ďťż

[PHP] Skrypt logowania nie działa poprawnie

       

Podstrony


telcocafe

Hej,
najpierw pokażę fragmenty kodu.
function rejestruj() { $login=$_POST['login']; $haslo = $_POST['haslo']; $haslo2 = $_POST['haslo2']; $email = $_POST['email']; $zapytanie = "SELECT * FROM uzytkownicy where login = '".$login."'"; $wynik= mysql_query($zapytanie); if (!$wynik) throw new Exception('Wykonanie zapytania nie powiodło się'); $ile = mysql_num_rows($wynik); if ($ile>0) throw new Exception ('Nazwa użytkownika jest już zajęta, proszę wrócić i wybrać inną'); $zapytanie="insert into uzytkownicy values (NULL, '".$login."', '".sha1($haslo)."', '".$email."')"; $wynik = mysql_query($zapytanie); if (!wynik) throw new exception('Nie można zarejestrować użytkownika, prosimy spróbować później'); return true; mysql_close($connection); }

function loguj() { $login=$_POST['login']; $haslo = $_POST['haslo']; $zapytanie = "select * from uzytkownicy where login = '".$login."' and haslo = '".sha1($haslo)."')"; $wynik = mysql_query($zapytanie); if (!$wynik) throw new Exception ('Logowanie nie powiodło się'); $ile = mysql_num_rows($zapytanie); if ($ile>0) return true; else throw new Exception('Logowanie nie powiodło się'); }

if ($login && $haslo) { try { loguj(); $_SESSION['prawid_uzyt'] = $login; } catch (Exception $e) { tworz_naglowek('Błąd'); echo 'Podano złe dane, spróbuj ponownie'; echo '<br />'; echo 'Jeżeli nie masz jeszcze konta, to możesz je założyć'; echo '<br />'; echo '<a href="formularz_rejestracji.php>Kliknij</a>'; tworz_stopke(); exit; } }

Rejestracja działa OK.
Kod do wylogowania też.
Ale jak bym nie próbował się zalogować to zawsze pokazuje mi, że podano złe dane.
Próbowałem już nawet bez sha1. To samo.
Wie ktoś gdzie popełniłem babola?
Dzięki.



Podano złe dane, ale gdzie jest błąd? $wynik jest false czy $ile wynosi 0?

No i pamiętaj, by mieć aktywne na serwerze magic quotes.

w zasadzie tez chciałbym wiedziec.
w sql zapytanie zwraca wynik.

Chciałbyś wiedzieć? To po co w ogóle stosujesz wyjątki, skoro ich nie używasz? Opisz przyzwoicie te dwa wyjątki w funkcji i skoro je wyłapujesz, to warto z nich jakoś skorzystać i wyświetlić te wyjątki.

http://php.net/manua....exceptions.php



wyjątki wyłapuje ale w prostacki sposób, ciągle się uczę.
Ale ogólnie rzecz biorąc znalazłem babola w kodzie :)
$ile = mysql_num_rows($zapytanie);

poprawiłem na $ile = mysql_num_rows($wynik);
I teraz trybi :)

A nad wyjątkami muszę jeszcze popracować.

A jeszcze jak możesz zerknąć na to:
dodawanie uzytkownika do bazy z md5
$zapytanie="insert into uzytkownicy values (NULL, '".$login."', '".md5($haslo)."', '".$email."')";
no i logowanie
$zapytanie = "select * from uzytkownicy where login = '".$login."' and haslo = '".md5($haslo)."'";

Bez md5 działa, ale z md5 już nie. Co jest nie tak?
Użytkownik wyatt edytował ten post 04 czerwiec 2010, 14:21
Huh. Trudne pytanie. Najlepiej wyświetl obydwa zapytania i będziesz wiedział, czy sumy wyglądają tak samo. Próbowałeś z jakimś zwykłym hasłem typu "abc"?

HA!

Poeksperymentowałem, i znalazłem :)
Napisałem sobie skrypcik, który porównuje wartość z formularza z bazą danych.
Co się okazało? W bazie miałem dla pola 'haslo' ustawioną max len. na 13 znaków :D
Bezczelnie urywało mi hasło w połowie i dlatego nie trybiło.
Ale dzięki za naprowadzenie na własciwy trop.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.