Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja PASSWORD()
Forum PHP.pl > Forum > Bazy danych > MySQL
raqqos
Mam taki problem: za pomocą pliku wsadowego tworze baze z jednoczesnym wpisem rekordu administratora w tabeli urzednicy(pola:id, imie, nazwisko, login, haslo, status_admin). Wszystko ładnie, pięknie się wpisuje - hasełko jest szyfrowane (za pomocą funkcji password()), ale kiedy chcę odczytać ten rekord poprzez funkcję logującą - klapa.
Kod wygląda tak:
  1. <?php
  2. require_once('funkcje_zakladki.php');
  3.  
  4. $login = $HTTP_POST_VARS['login'];
  5. $haslo = $HTTP_POST_VARS['haslo'];
  6.  
  7. if ($login && $haslo)
  8. // właśnie nastąpiła próba logowania
  9. {
  10.  if ($loguj = loguj($login, $haslo));
  11.  {
  12. if ($loguj == 'admin')
  13. {
  14.  $HTTP_SESSION_VARS['uzyt_admin'] = $login;
  15. }
  16. elseif ($loguj == 'zwykly')
  17. {
  18.  $HTTP_SESSION_VARS['uzyt_zwykly'] = $login;
  19. }
  20. else
  21. {
  22.  // niepomyślne logowanie
  23.  tworz_naglowek_html('Problem:');
  24.  echo 'Błąd logowania!
  25. Należy być zalogowanym aby oglądać tę stronę.';
  26.  tworz_html_url('logowanie.php', 'Logowanie');
  27.  print_r($loguj);
  28.  tworz_stopke_html();
  29.  exit;
  30. }
  31.  }
  32. }
  33. tworz_naglowek_html('Strona główna');
  34.  
  35. wyswietl_menu_uzyt();
  36. tworz_stopke_html();
  37. ?>


funkcja loguj wygląda tak:
  1. <?php
  2. function loguj($login, $haslo)
  3. {
  4. $lacz = lacz_bd();
  5. if (!$lacz)
  6. return false;
  7.  
  8. $wynik = mysql_query(&#092;"select status_admin from urzednicy
  9.  where login_urzednika='$login' 
  10.  and haslo_urzednika=password('$haslo')&#092;");
  11.  
  12. if (!$wynik)
  13.  return false;
  14. if (mysql_num_rows($wynik)<1)
  15.  return false;
  16.  
  17. $status = mysql_result($wynik, 0, 0);
  18. if ($status == '1')
  19.  return 'admin';
  20. else
  21.  return 'zwykly';
  22. }
  23. ?>


Jeśli usunę drugi warunek w zapytaniu to bez hasła wyszukuje mi rekord ale jaki to wtedy ma sens. A podczas wpisywania hasło było szyfrowane ta samą metodą.
Może ktoś ma jakiś pomysł o co tu chodzi?
brachu
sprawdzilem u mnie to dziala... wiec to napewno nie jest kwestia zapytania!!! a teraz pytanie jak u Ciebie wyglada haslo_urzednika... czy ma wystarczajaca dlugosc?questionmark.gif bo jezeli jest to pole znakowe zakrotkie to tak sie bedzie dzialo.... jeszcze sprobowalbym wypisac zmienna $haslo i sprawdzic czy wszystko z nia OK ale wydaje mi sie, ze jest spoko... ewentualnie sprobuj md5 zamiast password - ale caly czas zwracaj uwage na rozmiar pola haslo_urzednika - musi byc o 1 wiekszy (jezeli dobrze pamietam) od liczby znakow w jakim koduje algorytm!!!

pozdrawiam
SongoQ
Wydaje mi sie ze jesli haslo przekroczy zakres to i tak funkcja password powinna uciag go do opowiedniej wielkosci, tak jak to jest przy md5.
raqqos
Zmieniłem na funkcję md5 i jest OK! A swoją drogą chyba miałeś racje z tą wielkością pola haslo_urzednika (miało tylko 8 znaków). Znalazłem na forum mysqla, info że pod md5 pole hasla musi byc przynajmniej 60-znakowe. Przerobiłem i jest git:) Dzięki i pozdro!!!
SongoQ
Cytat
Znalazłem na forum mysqla, info że pod md5 pole hasla musi byc przynajmniej 60-znakowe.

Cos chyba nie tak, bo md5 to 32 znaki. Mozesz podac linka do tego posta? Chcialbym to przeczytac.
raqqos
Sorry, źle odczytałem gościa. Pisze, że u niego to pole ma 60 znaków.biggrin.gif Tu masz link do tej stronki: http://dev.mysql.com/doc/mysql/en/encryption-functions.html
Pierwszy post.
SongoQ
Czyli mialem racje.

Cytat
Calculates an MD5 128-bit checksum for the string. The value is returned as a binary string of 32 hex digits, or NULL if the argument was NULL. The return value can, for example, be used as a hash key.
FiDO
Ja tylko dodam, ze NIE POWINNO sie uzywac funkcji PASSWORD() w mysqlu.. ona jest uzywana wewnetrznie do hasel uzytkownikow, ale jest napisane, zeby jej nie uzywac w swoich aplikacjach.
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.