Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] md5 i porównanie zmiennych w warunku
Forum PHP.pl > Forum > Przedszkole
Turson
Więc robię taki skrypcik zmiany hasła. Użytkwnik musi podać nowe, a potem stare hasła dla potwierdzenia. Hasło w bazie jest zakodowane md5. W jaki sposób teraz porównać czy hasło z bazy jest takie samo jak to wpisane przez użytkownika w formularzu?

  1. if(md5($_POST["haslo_z_formularza"]==($haslo_z_bazy))

Takie coś nic nie da, bo za każdym razem zakoduje inaczej
buliq
md5 to algorytm szyfrujący na podstawie ciągu znaków. Za każdym razem ten sam ciąg będzie miał taki sam wynik w wyniku szyfrowania. Więc jeżeli użytkownik w bazie ma wpisane hasło 12345 i ponownie poda to hasło to obydwa wyniki będą równe.

Spróbuj:

  1. if ( md5(stare_haslo) == md5(nowe_haslo)) do something
Turson
Napisałem następujący kod:
  1. $zapytanie2 = "SELECT * FROM `users` WHERE login='$_SESSION[login]'";
  2. $idzapytania2 = mysql_query($zapytanie2);
  3. while ($haslo = mysql_fetch_assoc($idzapytania2)) {
  4. $password = (md5($_POST["opass"]));
  5. if($password==($haslo["password"])){
  6. echo "ok";}else echo "hasła nie sa takie same";}

Ale nie wychodzi. Gdy dam polecenie wyświetlenia zmiennej $password to różni się od tej w bazie ;O
nospor
1) Jak wkładasz dane do bazy
2) Jakiego typu jest pole w bazie i jakiego rozmiaru
piotrooo89
Cytat(buliq @ 30.12.2011, 21:06:38 ) *
md5 to algorytm szyfrujący na podstawie ciągu znaków. Za każdym razem ten sam ciąg będzie miał taki sam wynik w wyniku szyfrowania.


md5 to nie algorytm szyfrujący, tylko hashujący, szyfrowanie możemy odszyfrować (na podstawie np. klucza), a hashowanie to obliczanie skrótu, czyli jest jednokierunkowy.
Turson
Faktycznie, problemem było char(15) w bazie tongue.gif zapomniałem się przy zakładaniu tabeli i tyle.

Po powiększeniu do 32 znaków problem się rozwiązał

Napotkałem kolejny problem.

  1. $zapytanie2 = "SELECT * FROM `users` WHERE login='$_SESSION[login]'";
  2. $idzapytania2 = mysql_query($zapytanie2);
  3. while ($haslo = mysql_fetch_assoc($idzapytania2)) {
  4. $password = (md5($_POST["opass"]));
  5. if($password==($haslo["password"])){
  6. $zap = "UPDATE `users` SET `password` = '$password' WHERE login='$_SESSION[login]'";
  7. $aktualizuj = mysql_query($zap);

Problemem jest tu zaktualizowanie rekordu. Działa każda kombinacja słowna, ale zmienna $password nic nie robi
piotrooo89
a co ma ta zmienna "robić"? sprecyzuj.
Turson
Nie zmienna $password ma robić. Ale aktualizowanie działa dla dowolnej frazy, a nie dla zmiennej
piotrooo89
albo jest już późno i muszę się położyć, albo nie kumam... dzieje się że ten if sie zawsze wykonuje? jak tak wyechuj sobie $password i $haslo["password"] przed if'em i zobacz co w nich siedzi.
Turson
Problem rozwiązałem i kolejny raz to moja wina przed niedopatrzenie.
Przecież $password to nic innego jak hasło z bazy (taki miał być warunek), więc jeśli zastąpiłem hasło w bazie zmienną $password to wychodziło na to samo co było biggrin.gif przecież miałem uaktualnić nowym hasłem...
zalespl
  1.  
  2.  
  3. $user = $_SESSION['username'];
  4.  
  5. if ($user)
  6. {
  7. if ($_POST['submit'])
  8. {
  9. //zmiana hasla
  10. $oldpassword = md5($_POST['oldpassword']);
  11. $newpassword = md5($_POST['newpassword']);
  12. $repeatnewpassword = md5($_POST['repeatnewpassword']);
  13.  
  14. //sprawdzam hasło
  15.  
  16. //łączę się z bazą
  17. $connect = mysql_connect("mysql10.000webhost.com","a4814337_zales","******") or die("Nie mogę połączyć się z bazą danych");
  18. mysql_select_db("a4814337_phplog") or die("Nie znalazłem takiej bazy danych");
  19.  
  20. $queryget = mysql_query("SELECT password FROM users WHERE username='$user'");
  21. $row = mysql_fetch_assoc($queryget);
  22.  
  23. $oldpassworddb = $row['password'];
  24.  
  25. //spr hasło
  26. if ($oldpassword==$oldpassworddb)
  27. {
  28. //spr nowe hasło
  29. if ($newpassword==$repeatnewpassword)
  30. {
  31. //zmieniam hasło w bazie
  32. $querychange = mysql_query("
  33. UPDATE users SET password='$newpassword' WHERE username='$user'
  34.  
  35. ");
  36. session_destroy(); //aby wylogowało użytkownika po zmianie hasła
  37. die("Hasło zmieniono. <a href='index.html'>Kliknij tu</a> aby przejsc do strony logowania");
  38.  
  39.  
  40. }
  41. else
  42. {
  43. die("Nowe hasła nie zgadzają się.");
  44. }
  45. }
  46. else
  47.  
  48. die("Stare hasło nie zgadza się.");
  49.  
  50.  
  51. }
  52. else
  53. {
  54. <form action='changepassword.php' method='POST'>
  55. Stare hasło: <input type='oldpassword' name='oldpassword'><p>
  56. Nowe hasło: <input type='password' name='newpassword'><p>
  57. Powtórz nowe hasło: <input type='password' name='repeatnewpassword'><br>
  58. <input type='submit' name='submit' value='Zmień hasło'>
  59. ";
  60. }
  61. }
  62. else
  63. die("Musisz być zalogowany aby zmienić hasło.");
  64.  
  65.  


Ostatnio się tym bawiłem. Proszę, oto mój kod.
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.