Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z logowaniem
Forum PHP.pl > Forum > Przedszkole
Max Damage
Tak jak w opisie tematu: Nie wiem czy mnie w końcu zalogowało czy nie. Domyślam się, że jednak tak, ponieważ żadnego błędu mi nie napisało. Tylko w takim razie nie wiem dlaczego nie napisało mi : 'Zalogowano jako: '
  1. <?php
  2.  
  3.  //utworzenie krótkich nazw zmiennych
  4. $nazwa_uz=$_POST['nazwa_uz'];
  5. $haslo=$_POST['haslo'];
  6. require_once('f_prawidlowe_dane.php');
  7.  
  8. if($nazwa_uz && $haslo)
  9.  {
  10. try
  11.  {
  12. //połączenie z bazą danych
  13. $lacz=lacz_bd();
  14.  //sprawdzenie czy uzytkownik jest w bazie i zalogowanie or nie
  15.  $wynik=$lacz->query
  16. ("select * from uzytkownik where nazwa_uz='$nazwa_uz' and haslo=sha1('$haslo')");
  17.  if(!$wynik)
  18. throw new exception('Logowanie nie powiodło sie!');
  19.  
  20.  if($wynik->num_rows>0)
  21. return true;
  22.  else
  23. throw new exception ('Logowanie nie powiodło się!');
  24.  $_SESSION['prawid_uzyt']=$nazwa_uz;
  25.  }
  26.  catch(exception $e) 
  27.  {
  28. echo $e->getMessage();
  29.  } 
  30.  }
  31.  sprawdz_prawid_uzyt();
  32. ?>


Funkcji lacz_bd() nie będę pisał bo na pewno działa dobrze.
Funkcja sprawdz_prawid_uzyt();
  1. <?php
  2. function sprawdz_prawid_uzyt()
  3.  //sprawdzenie czy uzytkownik jest zalogowany i powiadomienie jesli nie
  4. {
  5. if(isset($_SESSION['prawid_uzyt']))
  6.  { 
  7.  echo 'Zalogowano jako '.stripslashes($_SESSION['prawid_uzyt']).'.';
  8.  echo '<br/>';
  9.  }
  10.  else
  11.  {
  12. echo 'Brak zalogowania';
  13.  }
  14.  }
  15. ?>
Grzyw
Pierwsza rzecz - może sprawdź przez print_r($_POST) czy hasło i login masz dobrze przekazywane z formularza do tej stronki.
Druga rzecz - mogę się mylić, nie wiem tego, ale może akurat - czy wewnątrz deklaracji funkcji tablica superglobalna $_SESSION jest widoczna? Nie trzeba jej wrzucić jako argument funkcji?
Max Damage
Login i haslo są dobrze przekazywane.
Jeśli chodzi o to drugie to nie wiem. Próbowałem czegoś na ten temat poszukać, ale nic nie znalazłem. Jak mam to dopisać?
Grzyw
Sprawdź coś takiego:

  1. <?php
  2. function sprawdz_prawid_uzyt($zmiennaSesji)
  3.  //sprawdzenie czy uzytkownik jest zalogowany i powiadomienie jesli nie
  4. {
  5. if(isset($zmiennaSesji)
  6.  { 
  7.  echo 'Zalogowano jako '.stripslashes($zmiennaSesji).'.';
  8.  echo '<br/>';
  9.  }
  10.  else
  11.  {
  12. echo 'Brak zalogowania';
  13.  }
  14.  }
  15. ?>
  16.  
  17.  
  18. sprawdz_prawid_uzyt($_SESSION['prawid_uzyt']);


I jeszcze jedno - wrzucając do pierwszej linijki print_r($_SESSION) możesz sprawdzić, czy faktycznie zmienna jest przetrzymywana w sesji. Proponuję sprawdzić jedno i drugie. Print_r() pozwoli Ci zobaczyć, czy ta zmienna istnieje. Z kolei taka deklaracja funkcji pozwoli sprawdzić, czy błąd tkwił w zasięgu zmiennych w funkcji. Teoretycznie, jeżeli sesje nie stanowią wyjątku, to faktycznie wewnątrz ciała funkcji $_SESSION jest niewidoczna. W końcu to też zmienna tablicowa jak inne, tylko ma specyficzny charakter:)

Poza tym w międzyczasie może ktoś tutaj dopisze, czy dobrze myślę:)
Max Damage
Ok, więc zmieniłem to tak jak mi napisałeś. Teraz wyświetla sie: 'Brak logowania'. Sprawdziłem także tą zmienną (myślę, że dobrze) i zwróciło mi pustą tablicę. Czyli we wszystkim miałeś racje smile.gif
Domyślam się, że trzeba $_SESSION zadeklarować jako globalną? Da się to jakoś w tej funkcji zrobić?
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.