Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Kilka tabel
Forum PHP.pl > Forum > Przedszkole
maciasgta
Witam

Tworze swój projekt i mam kolejny problem, mam baze danych w niej narazie tabele uzytkownicy. Nie chce w jednej tabeli trzymać wszystkiego:) Więc teraz utworze nową tabele ale potrzebuje pomocy ponieważ nie wiem jak zrobić coś takiego:

Gdy ktoś się zaloguje to w tabeli uzytkownicy skrypt sprawdza po loginie, a teraz gdy utworze nową tabele np: kasa, i teraz jak skrypt ma odnajdywać konkretnego użytkownika że to akurat jego kasa.

Jeżeli coś źle wytłumaczyłem prosze pisać napiszę więcej.

Z góry dziękuje za pomoc.

Pozdrawiam
Grzyw
W tabeli kasa zrób pole np. user_id..
I teraz wyciągając dane z bazy np. imie, nazwisko i info o kasie, zrobisz to tak:

  1. SELECT uzytkownicy.imie, uzytkownicy.nazwisko, kasa.wartosc FROM uzytkownicy,kasa WHERE uzytkownicy.id = kasa.user_id
cornholio666
UZYTKOWNIK

user_id | login | ...
--------------------
1 | adam
2 | ewa


KASA

kasa_id | user_id | ...
-----------------------
1 | 1
2 | 1
3 | 2
4 | 2


Czyli do ADAMA nalezy KASA O ID 1 i 2 a do EWY 3 i 4.

ADAM się loguje zapisujesz jego ID (np w sessji). Pozniej wyciagasz wszystkie REKORDY Z "KASA" gdzie ID usera = ID usera w tabeli KASA. I masz wynik smile.gif

EDIT:

Grzyw uprzedziles mnie ale ja w zyciu nie skonstruowałbym tak tego zapytania. Jak dla mnie jest ono nie do konca poprawne (wydajne)
maciasgta
smile.gif

Rozumiem o co chodzi, ale jeżeli ktoś móglby jeszcze bardziej wytłumaczyć. Między innymi jezeli chodzi o te sesje po logowaniu..smile.gif

Pozdrawiam
cornholio666
1. user wpisuje dane
2. sprawdzasz czy podal poprawne
3. Zapisujesz jego ID w sessji

  1. <?php
  2. if(!isset($_SESSION['user_id']){
  3.  
  4. $_SESSION['user_id'] = $user_id // $user_id to pobrane id z bazy
  5. }
  6. ?>


teraz masz to ID zapisane w sessji. Pamiętaj o session_start" title="Zobacz w manualu PHP" target="_manual przy korzystaniu z sessji
Grzyw
@cornholio666 zrobiłbyś to przez natural join?

OK, już wiem. maciasgta, Cornholio ma rację.
Zapisując ID w sesji masz do niego cały czas dostęp. Przy takim układzie tabeli, jaki Cornholio podał, możesz uzyskać dostęp do danych wybierając je w dowolnym momencie z jednej tabeli podając jako warunek do WHERE jako id w tabeli uzytkownicy lub user_id w tabeli kasa, właśnie to id zapisane w sesji.
maciasgta
U mnie user loguje się poprzez login i hasło, to teraz jak to ID wyciągnąć? Proszzę najlepiej większe przykłady bo jak widzicie z sesjami ciężko jest:)
cornholio666
maciasgta a ja u ciebie wyglada logowanie usera? mozesz przedstawić kod ? (bedzie latwiej )

Cytat(Grzyw @ 13.01.2008, 16:08:11 ) *
@cornholio666 zrobiłbyś to przez natural join?


Przeczytaj tu http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO fragment. Zaczyna się on od słów "Potrafimy już pobierać wyniki pojedynczego zapytania, potrafimy też wewnątrz jednego zapytania tworzyć relacje" (Obsługa relacji). Tam jest to ładnie wytłumaczone smile.gif
maciasgta
<?php
session_start();
mysql_connect("localhost","root","");
mysql_select_db("gra");

if(isset($_SESSION['zalogowany'])) {
echo "Witam, ".$_SESSION['login'];

$wynik = mysql_query("SELECT * FROM uzytkownicy WHERE login='".$_SESSION['login']."'");
$dane = mysql_fetch_array($wynik);

echo " <bR>Imię : ".$dane['imie']."<br>
Login : ".$dane['imie']." albo ".$_SESSION['login']."<br>
Wiek : ".$dane['imie']."<br>";
echo"<a href='Logout.php'>dsf</a></p>";




}else{

if(isset($_POST['wyslij'])) {


if(mysql_num_rows(mysql_query("SELECT login, haslo
FROM uzytkownicy WHERE login = '".$_POST['login']."'
&& haslo = '".md5($_POST['haslo'])."' ")) > 0) {


if(mysql_num_rows(mysql_query("SELECT nr FROM uzytkownicy
WHERE login = '".$_POST['login']."'
&& haslo = '".md5($_POST['haslo'])."' ")) > 0 ) {


$_SESSION['zalogowany'] = true;
$_SESSION['login'] = $_POST['login'];
$_SESSION['haslo'] = $_POST['haslo'];
echo "Jeste¶ zalogowany.";
echo"<meta http-equiv='Refresh' content='2' />";


} else {

echo "Złe hasło, proszę spróbować ponownie";
}
} else {
echo "Nie ma takiego użytkownika lub wpisałe¶ niepoprawne hasło.";
}
} else {

?>


<?php
}
}
?>
cornholio666
w $_SESSION['nr'] bedziesz mial jego ID (nr). Pisalem z palca wiec przeanalizuj i dostosuj do swoich potrzeb. Po co przechowujesz hasło w sesji ?

  1. <?php
  2. if(isset($_POST['wyslij'])) {
  3.  
  4.  $result = mysql_query("SELECT login, haslo, nr FROM uzytkownicy WHERE login = '".mysql_escape_string($_POST['login'])."' && haslo = '".md5($_POST['haslo'])."' ");
  5.  
  6. if(mysql_num_rows($result)> 0) {
  7.  
  8.  
  9. $row = mysql_fetch_row($result);
  10. $_SESSION['zalogowany'] = true;
  11. $_SESSION['login'] = $row['login'];
  12. $_SESSION['nr'] = $row['nr'];
  13.  
  14. echo "Jesteś zalogowany.";
  15. echo"<meta http-equiv='Refresh' content='2' />";
  16.  
  17.  
  18. }
  19. ?>
maciasgta
Niestety dalej nie rozumiem, wklejam to i wyskakują jakieś błędy. Jeżeli byłbyś tak miły wklej cały kod wtedy wkleje i przeanalizuje - bo naprawde nie rozumiem.

Pozdrwaiam i dziekuje z góry za pomoc
RubiX
No to jedziemy od nowa winksmiley.jpg

Najpierw wykonajmy 2 tabele w sql:

Pierwsza user:

  1. CREATE TABLE user (
  2. id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. login VARCHAR(50) NOT NULL,
  4. haslo VARCHAR(32) NOT NULL
  5. ) TYPE=MyISAM;


Druga inneuser:

  1. CREATE TABLE `inneuser` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_login` text NOT NULL,
  4. `email` text NOT NULL,
  5. `klasa` text NOT NULL,
  6. `dataurodzenia` text NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) TYPE=MyISAM;


Teraz wyjaśnie:
Podczas rejestracji (dodawania nowego użytkownika) robisz wpis do bazy user i jednocześnie wpis do bazy inneuser

Baza user : id, login uzytkownika , haslo uzytkownika
Baza inneuser: id, login użytkownika (do którego ma należeć dany wiersz[czyli tu wstawiasz login uzytkownika z tabeli user]), email, jakaś klasa, data urodzenia danego usera.

No i teraz:


Logowanie użytkownika:
  1. <?php
  2. $result = mysql_query("SELECT login, haslo FROM user WHERE login = '".mysql_escape_string($_POST['login'])."' && haslo = '".md5($_POST['haslo'])."' ");
  3.  if(mysql_num_rows($result)> 0) {
  4.  
  5. $row = mysql_fetch_row($result);
  6. $_SESSION['zalogowany'] = true;
  7. $_SESSION['login'] = $row['login'];
  8. } else {
  9. echo "podałeś błędny login lub hasło";
  10. }
  11. ?>


I jeżeli użytkownik zostal zalogowany to w sesji [login] znajduje się jego login z tabeli USER

Jeżeli chcesz wyciągnąć dane na jego temat z tabeli inne robisz takie zapytanie:

  1. <?php
  2. $result = mysql_query("SELECT * FROM inneuser WHERE user_login = '".$_SESSION['login']."' ");
  3.  if(mysql_num_rows($result)> 0) {
  4.  $row = mysql_fetch_row($result); 
  5.  
  6. echo "Witaj ".$_SESSION['login']."<br><br>
  7. Twój adres e-mail: ".$row['email']."<br>
  8. Twoja klasa: ".$row['klasa']."<br>
  9. Twoja data urodzenia: ".$row['dataurodzenia']."<br>
  10. ";
  11.  
  12. } else {
  13. echo "W tabeli inneuser nie istnieje wpis z user_login == ".$_SESSION['login']."";
  14. }
  15. ?>


Inni użytkownicy forum php napisali wyżej że zamiast user_login w tabeli inneuser powinieneś używać ID użytkownika z tabeli user czyli powinieneś zrobi w inneuser wpis user_id . Jest to bardziej "profesjonalne" i wygodniejsze ale niema większego znaczenia w użytkowaniu i kodzie.(Ja wytłumaczyłem to na loginie a nie na id ponieważ łatwiej będzie Ci to zrozumieć).

No i jeszcze ostatnie Twoje pytanie:

U mnie user loguje się poprzez login i hasło, to teraz jak to ID wyciągnąć? Proszzę najlepiej większe przykłady bo jak widzicie z sesjami ciężko jest:)

ID użytkownika wyciągasz tak samo jak jego login czy hasło :

Logowanie użytkownika:
  1. <?php
  2. $result = mysql_query("SELECT login, haslo FROM user WHERE login = '".mysql_escape_string($_POST['login'])."' && haslo = '".md5($_POST['haslo'])."' ");
  3.  if(mysql_num_rows($result)> 0) {
  4.  
  5. $row = mysql_fetch_row($result);
  6. $_SESSION['zalogowany'] = true;
  7. $_SESSION['login'] = $row['login'];
  8. // teraz wyciągamy ID użytkownika i ustalamy Sesje id
  9. $_SESSION['id'] = $row['id'];
  10. } else {
  11. echo "podałeś błędny login lub hasło";
  12. }
  13. ?>


Mam nadzieje że trochę Ci to wytłumaczyłem jak jeszcze czegoś nie będziesz wiedział to pisz smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.