Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt zmiany hasła - błąd przy sprawdzaniu hasła
Forum PHP.pl > Forum > PHP
ziox
Witam, mam problem ze skryptem który zmienia hasło, wygląda on tak:
  1. <form action="" method="post">
  2. Podaj login: <input type="text" name="login" /><br /><br />
  3. Podaj email:<input type="text" name="email" /><br /><br />
  4. Podaj hasło:<input type="password" name="haslo" /><br /><br />
  5. <input name="dalej" type="submit" value="Dalej"><br /><br />
  6. </form>
  7.  
  8. <?php
  9.  
  10. if($_POST['dalej'])
  11. {
  12.  
  13. if(empty($login) || empty($haslo) || empty($email)) $wiadomosc .= "Uzupełnij wszystkie pola<br>";
  14.  
  15. if(empty($wiadomosc))
  16. {
  17.  
  18. // sprawdzanie loginu
  19.  
  20. $log = mysql_query("SELECT * FROM tribal_gracze WHERE login='".$login."'");
  21. $log1 = mysql_num_rows($log);
  22.  
  23. if($log1 === 0) $wiadomosc .= "Podany login nie istieje<br>";
  24.  
  25. // sprawdzanie hasla
  26.  
  27. $has = mysql_query("SELECT * FROM admin WHERE haslo='".$haslo."'");
  28. $has1 = mysql_num_rows($has);
  29.  
  30. if($has1 === 0) $wiadomosc .= "Podane hasło jest nieprawidłowe<br>";
  31.  
  32. // sprawdzanie emaila
  33.  
  34. $ema = mysql_query("SELECT * FROM tribal_gracze WHERE email='".$email."'");
  35. $ema1 = mysql_num_rows($ema);
  36.  
  37. if($ema1 === 0) $wiadomosc .= "Podany email nie istnieje<br>";
  38. }
  39. }
  40.  
  41.  
  42.  
  43. if($_POST['dalej'] and empty($wiadomosc))
  44. {
  45. <form action="" method="post">
  46. <input type="hidden" name="login" value="'.$login.'">
  47. Podaj stare hasło <input type="password" name="haslos" /><br /><br />
  48. Podaj nowe hasło <input type="password" name="haslo1" /><br /><br />
  49. Powtórz nowe hasło <input type="password" name="haslo2" /><br /><br />
  50. <input name="zapisz" type="submit" value="Zapisz" /></form>
  51. ';
  52. }
  53.  
  54.  
  55.  
  56. if($_POST['zapisz'])
  57. {
  58. $haslo2 = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['haslo2'])));
  59.  
  60. if(empty($haslo) || empty($haslo1) || empty($haslo2)) $wiadomosc .= "Uzupełnij wszystkie pola<br>";
  61.  
  62. if(empty($wiadomosc))
  63. {
  64. $has = mysql_query("SELECT * FROM tribal_gracze WHERE haslo='".$haslo."'");
  65. $has1 = mysql_num_rows($has);
  66.  
  67. if($has1 === 0) $wiadomosc .= "Stare hasło nie pasuje<br>";
  68. if($haslo1 != $haslo2) $wiadomosc .= "Hasła są różne<br>";
  69. }
  70. if(empty($wiadomosc))
  71. {
  72.  
  73. $zapytanie1 = 'UPDATE `tribal_gracze` SET `haslo`= "'.$haslo2.'" WHERE `login`="'.$login.'"';
  74. $idzapytania1 = mysql_query($zapytanie1) or die(mysql_error());
  75. $wiadomosc .= "hasło zostało zmienione<br>";
  76. }
  77. }
  78. echo $wiadomosc;
  79. ?>


ale w bazie jest hasło zaszyfrowane róznymi znakami i nie zmienia mi. Jak to zroibć aby zmienił mi hasło?
Tu załączam scerny z bazy danych:



Z góry dziękuje i prosze o pomoc
aigo
A gdzie szyfrujesz hasło przed sprawdzeniem, bo rozumię że to co w bazie trzymasz to MD5?

  1. $has = mysql_query("SELECT * FROM tribal_gracze WHERE haslo='".$haslo."'");

zmień na
  1. $has = mysql_query("SELECT * FROM tribal_gracze WHERE haslo='".md5($haslo)."'");
ziox
czyta ok, ale po wpisaniu nowych haseł pisze zebym uzpelnil wszystkie pola, chociaz wszystko jest uzupełnione i hasła nie zmienia
modern-web
1. Przeczytaj dokumentację strip_tags i pomyśl, co powinieneś zmienić (to nie dotyczy problemu ale rzuca się w oczy).
2. Algorytm md5 NIE SZYFRUJE tylko HASH-uje dane - wbijcie to sobie do głowy, bo mylicie pojęcia; md5 (podobnie jak sha1) to nie kryptografia, nie posiadają klucza prywatnego/publicznego - po prostu zamieniają ciąg znaków na 32/40 znaki tak by precyzyjniej szło porównywać ciągi; działają w dwie strony.
3. Nie widzę u Ciebie dogłębnego filtrowania danych - wypadałoby ograniczyć wprowadzane do programu dane przez sprawdzenie typu, długości, wielkości liter (chyba, że nie mają znaczenia), no i gdzie masz funkcję trim, która w zasadzie powinna się tam znaleźć?!
4. Masz specyficzną technikę programowania - nie rozumiem, po co komunikat wsadzasz w zmienną - możesz go przecież wyświetlić za pomocą print / echo, a całą weryfikację wsadzić w sumie w kilka instrukcji warunkowych (if / switch).

Edit:
1. A w sekcji z zapisem nowego hasła - stare hasło to nie `haslo` (tak masz w programie) tylko `haslos` (tak masz w formularzu).
2. W linijce 67 definiujesz zmienna `wiadomosc`, a w 69 linijce sprawdzasz zawartość tej zmiennej. Co się stanie gdy pierwszy if zostanie pominięty? Odp. zmienna `wiadomosc` nie zostanie zdefiniowana = wywali Ci błąd podczas użycia empty na nie istniejącej zmiennej. Popraw definiując tę zmienną przed linią 67 dając jej pustą wartość.
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.