Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Edycja rekordu
Pcbecaw
post
Post #1





Grupa: Zarejestrowani
Postów: 236
Pomógł: 0
Dołączył: 4.06.2011

Ostrzeżenie: (0%)
-----


Mam z internetu taki formularz dot. zmiany hasła w panelu użytkownika:
  1. <form action="" method="post">
  2. Podaj login: <input type="text" name="nick" /><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 include("config.php");
  9. error_reporting(E_ALL^E_NOTICE);
  10. if($_POST['dalej'])
  11. {
  12. $haslo = substr(addslashes($_POST['haslo']),0,32);
  13.  
  14. if(empty($login) || empty($haslo) || empty($email)) $wiadomosc .= "Uzupełnij wszystkie pola<br>";
  15.  
  16. if(empty($wiadomosc))
  17. {
  18.  
  19. // sprawdzanie loginu
  20.  
  21. $log = mysql_query("SELECT * FROM uzytkownicy WHERE nick='".$login."'");
  22. $log1 = mysql_num_rows($log);
  23.  
  24. if($log1 === 0) $wiadomosc .= "Podany login nie istieje<br>";
  25.  
  26. // sprawdzanie hasla
  27.  
  28. $has = mysql_query("SELECT * FROM uzytkownicy WHERE haslo='".$haslo."'");
  29. $has1 = mysql_num_rows($has);
  30.  
  31. if($has1 === 0) $wiadomosc .= "Podane hasło jest nieprawidłowe<br>";
  32.  
  33. // sprawdzanie emaila
  34.  
  35. $ema = mysql_query("SELECT * FROM uzytkownicy WHERE email='".$email."'");
  36. $ema1 = mysql_num_rows($ema);
  37.  
  38. if($ema1 === 0) $wiadomosc .= "Podany email nie istnieje<br>";
  39. }
  40. }
  41.  
  42.  
  43.  
  44. if($_POST['dalej'] and empty($wiadomosc))
  45. {
  46. echo '
  47. <form action="" method="post">
  48. <input type="hidden" name="login" value="'.$login.'">
  49. Podaj stare hasło <input type="password" name="haslos" /><br /><br />
  50. Podaj nowe hasło <input type="password" name="haslo1" /><br /><br />
  51. Powtórz nowe hasło <input type="password" name="haslo2" /><br /><br />
  52. <input name="zapisz" type="submit" value="Zapisz" /></form>
  53. ';
  54. }
  55.  
  56.  
  57.  
  58. if($_POST['zapisz'])
  59. {
  60. $haslos = substr(addslashes($_POST['haslos']),0,32);
  61. $haslo1 = substr(addslashes($_POST['haslo1']),0,32);
  62. $haslo2 = substr(addslashes($_POST['haslo2']),0,32);
  63.  
  64. if(empty($haslos) || empty($haslo1) || empty($haslo2)) $wiadomosc .= "Uzupełnij wszystkie pola<br>";
  65.  
  66. if(empty($wiadomosc))
  67. {
  68. $has = mysql_query("SELECT * FROM uzytkownicy WHERE haslo='".$haslos."'");
  69. $has1 = mysql_num_rows($has);
  70.  
  71. if($has1 === 0) $wiadomosc .= "Stare hasło nie pasuje<br>";
  72. if($haslo1 != $haslo2) $wiadomosc .= "Hasła są różne<br>";
  73. }
  74. if(empty($wiadomosc))
  75. {
  76.  
  77. $zapytanie1 = 'UPDATE `uzytkownicy` SET `haslo`= "'.$haslo2.'" WHERE `nick`="'.$login.'"';
  78. $idzapytania1 = mysql_query($zapytanie1) or die(mysql_error());
  79. $wiadomosc .= "hasło zostało zmienione<br>";
  80. }
  81. }
  82. echo $wiadomosc;
  83. ?>

W bazie hasła w rejestracji koduje tak:
  1. $haslo = substr(addslashes($_POST['haslo']),0,32);


Teraz problem pojawia się w edycji i uwierzytelnianiu. Po wpisaniu hasła takiego, jak przy rejestracji, wyskakuje komunikat, że hasła są nieprawidłowe. Jednak po skopiowaniu zakodowanego hasła i wpisanie go w pole formularza - wszystko jest ok. Błędem jest odkodowywanie hasła w pliku dot. edycji hasła. Jak to naprawić?
Dzięki, pozdrawiam (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Po pierwsze zauważ, że element tablicy $_POST['zapisz'] istnieje (jest ustawiony, ang. isset) tylko wtedy, gdy wyślesz dane poprzez formularz. Oznacza to, że przy każdym pierwszym wejściu na stronę będzie pojawiał się komunikat uwagi NOTICE, ponieważ takiego elementu jeszcze w talicy $_POST nie ma. W tym przypadku trzeba zastąpić linię 13 takim kodem (który de facto niewiele się różni):
  1. if(isset($_POST['zapisz'])) {

Użytkownika powinieneś identyfikować po jego id, a nie po loginie. Skoro jest to formularz zmiany hasła i możesz określić login użytkownika, to i możesz określić jego id. Zastąp zatem ukryte pole login ukrytym polem id, i przekazuj w nim identyfikator użytkownika.
Trzecia sprawa to kwestia użycia funkcji empty(). Po co kodować pusty łańcuch znaków (bo to się właśnie dzieje, gdy użytkownik nie uzupełni któregoś z pól)? Linie 16, 17 i 18 powinny się znaleźć dopiero w bloku if(empty($wiadomosc)) {. Natomiast instrukcja warunkowa w linii 20 powinna wyglądać tak:
  1. if(empty($_POST['haslos']) || empty($_POST['haslo1']) || empty($_POST['haslo2']))

Pozostaje jeszcze kwestia użycia funkcji addslashes(). Modyfikuje ona hasło podane przez użytkowniaka, a wcale nie jest tutaj potrzebna. Oznacza to tyle, że hasło w bazie danych nie jest hasłem użytkownika. Jest wiele sposobów na zabezpieczenie hasła np. sól, podwójne hashowanie lub "miks" obu wspomnianych metod, itp.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 07:35