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

Panowie mam problem, logowanie mam, ale chciałbym zrobić sesje aby jak ktoś się zaloguje na konto, można było wyciągnąć jego inne dane z tabeli.

Jeżeli coś źle napisałem to proszę powiedzieć spróbuje wytłumaczyć o co mi chodzi.

Pozdrawiam i z góry dziekuje za pomoc
RubiX
Poprostu ustalasz sesje np :

Na początku każdego dokumentu wpisujesz :

  1. <?php
  2. ?>


Następnie:

Jak ktoś sie zaloguje:
  1. <?php
  2. $_SESSION['zalogowany'] = True;
  3. ?>


Jeżeli chcesz ustalić dostep do strony tylk odla zalogowanych :

  1. <?php
  2. if ($_SESSION['zalogowany']==True) {
  3. //tresc strony
  4. } else {
  5. echo "dostep tylko dla zalogowanych";
  6. }
  7. ?>


Sesje traktuj jak zmienne smile.gif

Np:
  1. <?php
  2. //wyciag z mysql
  3. //$dane = mysql_fetch_array($wyciag);
  4. $_SESSION['login'] = $dane['login'];
  5. ?>


I później na stronie możesz uzywać

  1. <?php
  2. echo "Witaj ".$_SESSION['login']." !";
  3. ?>


Sesje traktuj jak zmienne tylko jak raz je przypiszesz to są ważne aż do zamknięcia przeglądarki lub ich "utracenia"
Możesz je cochwile nadpisywać ale nie musisz deklarować 2 razy tej samej zmiennej.

No i Twoje pytanie : po ustaleniu $_SESSION['login'] - login zalogowanego w stronie tylko dajesz kod :

  1. <?php
  2. $wynik = mysql_query("SELECT * FROM uzytkownicy WHERE login='".$_SESSION['login']."'");
  3. ?>
Maxik
Na początku dokumentu(i we wszystkich w których odwołujesz się do sesji):
  1. <?php
  2. ?>


Potem przypisujesz dane do sesji
  1. <?php
  2. $_SESSION['jakas_nazwa'] = 'jakas_wartosc';
  3. ?>
maciasgta
RubiX dziekuje, ale jeszcze mam pytanie jak zrobić zeby skrypt lokalizował że ktoś sie zalogował i teraz nie wiem czy po id czy po loginie że to on i żeby wyciągnąć z bazy na temat jego jakieś inne dane.
RubiX
No więc tak : jak zrobić zeby skrypt lokalizował że ktoś sie zalogował - nie wiem o co Ci w tym chodzi tongue.gif (opisz)

A 2: teraz nie wiem czy po id czy po loginie że to on i żeby wyciągnąć z bazy na temat jego jakieś inne dane.

Czy po id czy po loginie to jest obojętne ja proponuje po loginie będzie to wygodniejsze

A zeby wyciągnąć dane na jego temat musisz wykonoać polecenie SELECT z bazy sql z tabeli uzytkownicy (czy jak ją tam nazwałeś) np:

  1. <?php
  2. $wynik = mysql_query("SELECT * FROM uzytkownicy WHERE login='".$_SESSION['login']."'");
  3. $dane = mysql_fetch_array($wynik);
  4.  
  5. echo "Imię : ".$dane['imie']."<br>
  6. Login : ".$dane['login']." albo ".$_SESSION['login']."<br>
  7. Wiek : ".$dane['wiek']."<br>";
  8. ?>


Poprostu tak jak wyciągasz dane podczas logowania i sprawdzasz gdzie login = post login i haslo = post haslo tak tutaj robisz to samo smile.gif Tylko wyciagasz gdzie login = session login
maciasgta
Chodzi o to że ktoś sie zalogował i teraz chce z bazy uzytkownicy tabeli jakieś tam wyciągnąc jakieś informacje o nim.
RubiX
No to już napisałem wklej to:

  1. <?php
  2. $wynik = mysql_query("SELECT * FROM uzytkownicy WHERE login='".$_SESSION['login']."'");
  3. $dane = mysql_fetch_array($wynik);
  4.  
  5. echo "Imię : ".$dane['imie']."<br>
  6. Login : ".$dane['login']." albo ".$_SESSION['login']."<br>
  7. Wiek : ".$dane['wiek']."<br>";
  8. ?>


Tylko w $dane['wartosc'] zamiast wartosc wpisuj takie pola jakie masz w Twojej tabeli
maciasgta
Rubix wielkie dzięki! Bardzo mi pomogłeś wszystko śmiga! Jeszcze raz wielkie dzięki!

Witam

Mam jeszcze pytanie w sprawie sesji chce zrobić żeby w bazie było pole id_zaloguj żeby skrypt mógł sprawdzać czy ktoś zalogowany a jak nie zalogowany to wywala błąd ze nie zalogowany.

Pozdrawiam i licze na pomoc.
RubiX
Hmm ciężka sprawa.
Najlepiej jest zrobić nową tabele np:

  1. CREATE TABLE `zalogowani` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` text NOT NULL,
  4. `czas` DATETIME NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) TYPE=MyISAM;


I teraz podczas każdego (prawidłowego) logowania zapisujesz do tabeli zalogowani nowy wiersz z id, login zalogowanego, aktualny czas (00-00-0000 00:00:00 [dzien-miesiac-rok godzina:minuta:sekundy])
Przykład :

  1. <?php
  2. $zapisz = mysql_query("INSERT INTO zalogowani VALUES ('', '".$_SESSION['login']."', NOW() )");
  3. ?>


No i później musisz (najlepiej w nowym pliku i później includować ten plik do każdej strony) wstawić kod który ustawia nowy czas jeżeli użytkownik jest nadal zalogowany, kasuje wpisy po jakimś czasie i na wszelki wypadek jak wpis wcześniej nie został dodany - dodaje:
np:

  1. <?php
  2. // Sprawdzenie czy użytkownik jest w tabeli zalogowani
  3. //Jeżeli go niema to go dodajemy:
  4. $wynik = mysql_query("SELECT * FROM zalogowani WHERE login='".$_SESSION['login']."'");
  5. if (mysql_num_rows($wynik) == 0) {
  6. $zapisz = mysql_query("INSERT INTO zalogowani VALUES ('', '".$_SESSION['login']."', NOW() )");
  7. }
  8.  
  9. //Ustawianie aktualnego czasu dla użytkowników którzy istnieją w tabeli zalogowani
    :
  10. $sprawdz = mysql_query("SELECT * FROM zalogowani WHERE login='".$_SESSION['login']."'");
  11. if (mysql_num_rows($sprawdz) == 1) {
  12. $update = mysql_query("UPDATE zalogowani SET czas=NOW() WHERE login='".$_SESSION['login']."'");
  13. }
  14.  
  15. //No i kasowanie użytkowników z tabeli zalogowani po np 3 minutach:
  16. $usun = mysql_query("SELECT * FROM zalogowani WHERE login='".$_SESSION['login']."' AND czas < DATE_SUB(NOW(), INTERVAL 180 SECOND)");
  17. if (mysql_num_rows($usun) == 1) {
  18. $kasowanie = mysql_query("DELETE FROM zalogowani WHERE login='".$_SESSION['login']."' AND czas < DATE_SUB(NOW(), INTERVAL 180 SECOND)");
  19. }
  20. ?>


Możesz też to skrócić :

  1. <?php
  2. $wynik = mysql_query("SELECT * FROM zalogowani WHERE login='".$_SESSION['login']."'");
  3. if (mysql_num_rows($wynik) == 0) {
  4. $zapisz = mysql_query("INSERT INTO zalogowani VALUES ('', '".$_SESSION['login']."', NOW() )");
  5. }
  6.  
  7. $update = mysql_query("UPDATE zalogowani SET czas=NOW() WHERE login='".$_SESSION['login']."'");
  8.  
  9. $kasowanie = mysql_query("DELETE FROM zalogowani WHERE login='".$_SESSION['login']."' AND czas < DATE_SUB(NOW(), INTERVAL 180 SECOND)");
  10. ?>


Nie sprawdzałem tego, pisałem z głowy ale mam nadzieje że działa winksmiley.jpg
Maxik
Ewentualnie można użyć ajaxa i zdarzenia onUnload do wylogowywania i wywalania danych z bazy.
blackjohn
Witam.
Chciałem tylko powiedzieć, że mi tez bardzo pomógł ten skrypt.
Wielkie dzięki biggrin.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.