Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem ze skryptem logowania.
Forum PHP.pl > Forum > Przedszkole
Lampek
Witam
Z góry sory za bałagn w kodzie ale jest nowy w php i pisze trochę chaotycznie jeszcze.
Problem polega na tym, że coś nie chce mi trybić w dwóch skryptach, a mianowicie logowanie poprostu nie działa(uzytkownik jest utworzony w bazie prawidłowo) wyświetla mi się komunikat że "Zalogowanie niemozliwe. Należy być zalogowanym aby oglądać te stronę." ktory jest umieszczony w funkcji logowania.

Oto kod funkcji:
funkcja która jest uruchamiana po kliknięciu przycisku zaloguj
  1. <?php
  2.  
  3.  
  4.  
  5. require_once('funkcje_all.php');
  6. $nazwa_uz = $_POST['nazwa_uz'];
  7. $haslo = $_POST['haslo'];
  8.  
  9.  
  10. if ($nazwa_uz && $haslo) {
  11. try {
  12. loguj($nazwa_uz, $haslo);
  13. $_SESSION['prawid_uzyt'] = $nazwa_uz;
  14. }
  15. catch (Exception $e) {
  16. tworz_naglowek_html('Problem:');
  17. menu_top();
  18. tworz_header();
  19.  
  20. tworz_menu();
  21.  
  22.  
  23. echo 'Zalogowanie niemożliwe.
  24. Należy być zalogowanym aby oglądać tę stronę.';
  25. tworz_url('logowanie.php', 'Logowanie');
  26.  
  27.  
  28.  
  29. tworz_stopke();
  30. }
  31. }
  32.  
  33. tworz_naglowek_html('Strona główna');
  34. sprawdz_prawid_uzyt();
  35. tworz_naglowek_html('Problem:');
  36. menu_top();
  37. tworz_header();
  38.  
  39. towrz_menu();
  40.  
  41. if ($tablica_url = pobierz_urle_uzyt($_SESSION['prawid_uzyt'])) {
  42. wyswietl_urle_uzyt($tablica_url);
  43. }
  44.  
  45.  
  46. wyswietl_menu_uzyt();
  47.  
  48.  
  49. tworz_stopke();


funkcja loguj()
  1. function loguj($nazwa_uz, $haslo) {
  2.  
  3. $lacz = lacz_bd();
  4.  
  5.  
  6. $wynik = $lacz->query("select * from uzytkownik
  7. where nazwa_uz='".$nazwa_uz."'
  8. and haslo = sha1('".$haslo."')");
  9. if (!$wynik) {
  10. throw new Exception('Logowanie nie powiodło się.');
  11. }
  12.  
  13. if ($wynik->num_rows>0) {
  14. return true;
  15. } else {
  16. throw new Exception('Logowanie nie powiodło się.');
  17. }
  18. }


Ma ktoś pojęcie co może być nie tak?
sada
a w bazie napewno masz hasła w sha1?

jeśli tak to sprawdź co dostaniesz jak dodasz to:

  1. echo $wynik->num_rows;exit;

przed
  1. if ($wynik->num_rows>0) {
  2. return true;
Lampek
Wyrzuca mi 0
peter13135
0 to liczba rekordów, czyli wpisujesz złe dane. Możliwe, że złe jest kodowanie, pokaż funkcję rejestracji.
Lampek
  1. function rejestruj($nazwa_uz, $email, $haslo) {
  2.  
  3. $lacz = lacz_bd();
  4.  
  5.  
  6. $wynik = $lacz->query("select * from uzytkownik where nazwa_uz='".$nazwa_uz."'");
  7. if (!$wynik) {
  8. throw new Exception('Wykonanie zapytania nie powiodło się.');
  9. }
  10.  
  11. if ($lacz->num_rows>0) {
  12. throw new Exception('Nazwa użytkownika zajęta — proszę wrócić i wybrać inną.');
  13. }
  14.  
  15.  
  16. $wynik = $lacz->query("insert into uzytkownik values
  17. ('".$nazwa_uz."', sha1('".$haslo."'), '".$email."')");
  18. if (!$wynik) {
  19. throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
  20. }
  21.  
  22. return true;
  23. }
sada
jest
  1. if ($lacz->num_rows>0) {

ma być
  1. if ($wynik->num_rows>0) {
Lampek
Dalej to samo "Zalogowanie niemozliwe. Nalezy byc zalogowanym aby ogladac te strone. "
peter13135
wyświetl sobie to zapytanie do logowania w throw new exception, następnie je skopiuj i wklej do phpmyadmina i potem myślę będzie już z górki
sada
zajrzyj do bazy czy coś zapisuje, co zapisuje i czy wogóle łączy lacz_bd() ?
Lampek
Tak zapisuje np stworzyłem użytkownika login michał, hasło: a2df1e659c9fd2578de0
sada
kodowanie musisz dodać , polskie literki
Lampek
Wklepałem w phpmyadmin select * from uzytkownik where nazwa_uz='".$nazwa_uz."' and haslo = sha1('".$haslo."') i wywaliło żę zero wyników.
W tabeli metoda porównywania napisów mam utf8_polish_ci
sada
przed każdym czytaniem i pakowaniem do bazy
  1. $lacz -> query("SET NAMES 'utf8'");


lub strukturalnie dla phpmyadmin
  1. mysql_query("SET NAMES 'utf8'");
Lampek
Czyli to ma wyglądać tak ?

  1. function rejestruj($nazwa_uz, $email, $haslo) {
  2.  
  3.  
  4.  
  5. $lacz = lacz_bd();
  6. $lacz -> query("SET NAMES 'utf8'");
  7.  
  8. $wynik = $lacz->query("select * from uzytkownik where nazwa_uz='".$nazwa_uz."'");
  9. if (!$wynik) {
  10. throw new Exception('Wykonanie zapytania nie powiodło się.');
  11. }
  12.  
  13. if ($wynik->num_rows>0) {
  14. throw new Exception('Nazwa użytkownika zajęta — proszę wrócić i wybrać innš.');
  15. }
  16. $lacz -> query("SET NAMES 'utf8'");
  17.  
  18. $wynik = $lacz->query("insert into uzytkownik values
  19. ('".$nazwa_uz."', sha1('".$haslo."'), '".$email."')");
  20. if (!$wynik) {
  21. throw new Exception('Rejestracja w bazie danych niemożliwa — proszę spróbować później.');
  22. }
  23.  
  24. return true;
  25. }
  26.  
  27. function loguj($nazwa_uz, $haslo) {
  28.  
  29.  
  30. $lacz = lacz_bd();
  31. $lacz -> query("SET NAMES 'utf8'");
  32.  
  33. $wynik = $lacz->query("select * from uzytkownik
  34. where nazwa_uz='".$nazwa_uz."'
  35. and haslo = sha1('".$haslo."')");
  36. if (!$wynik) {
  37. throw new Exception('Logowanie nie powiodło się.');
  38. }
  39.  
  40.  
  41.  
  42. if ($wynik->num_rows>0) {
  43. return true;
  44. } else {
  45. throw new Exception('Logowanie nie powiodło się.');
  46. }
  47. }
sada
zgrubsza tak
Lampek
Dalej to samo :/
sada
mam nadzieję , że przy próbach kasujesz najpierw ten zapis zbazy, jeśli nie to skasuj , spróbuj jeszcze raz a jeśli nie zatrybi to zamień
  1. $lacz -> query("SET NAMES 'utf8'");

na


  1. $lacz ->set_charset("utf8");


kodowanie strony w (meta) też ma być na UTF-8
Lampek
Pomogło wykasowałem całą baz i zatrybiło dzięki wielkie.
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.