Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z logowaniem, Nie wiem czy mnie zalogowało czy nie
Max Damage
post 27.07.2007, 17:01:09
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
Grzyw
post 27.07.2007, 18:25:03
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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?


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
Max Damage
post 27.07.2007, 19:16:31
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


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ć?


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
Grzyw
post 27.07.2007, 21:35:57
Post #4





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ę:)


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
Max Damage
post 27.07.2007, 22:08:17
Post #5





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

Ostrzeżenie: (0%)
-----


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ć?


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 10:19