Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]bł±d w skrypcie zmiany hasła
Forum PHP.pl > Forum > Przedszkole
kosior11
Korzystam z takiego skryptu logowania, w którym mam możliwo¶ć zmiany hasła, z tym,że jest w nim jeden mały bł±d i nie wiem jak go rozwi±zać.

Mianowicie aby zmienić hasło trzeba podać aktualne hasło, bo bez tego nie da rady zmienić - to jest OK
Ale np. podaj±c aktualne hasło i np. nie wpisuj±c w ogóle nowego i akceptuj±c ten wybór edycja zostaje zachowana w bazie i użytkownik od tej chwili nie ma w ogóle hasła i tu jest mój problem, jak zrobić, tak:

je¶li wpisane zostało aktualne hasło to musi też zostac wpisane nowe hasło, bo jak nie to wyskoczy bł±d

  1. // jeśli zostanie podane nowe hasło lub inny email
  2. if(!empty($_POST['new_password']) || $_POST['email'] != $user_data['user_email']) {
  3. // sprawdzamy czy zostało podane aktualne hasło
  4. if(empty($_POST['password'])) {
  5. $err = '<p>Jeśli chcesz zmienić hasło lub adres email musisz podać aktualne hasło.</p>';
  6. // jeśli zostało podane to sprawdzamy czy jest poprawne
  7. } elseif(codepass($_POST['password']) != $user_data['user_password']) {
  8. $err = '<p>Podane aktualne hasło jest nieprawidłowe.</p>';
  9. } else {
  10. // jeśli wszystko jest ok...
  11. // sprawdzamy czy user chce zmienić hasło
  12. [b]if(!empty($_POST['new_password'])) {
  13. $err = '<p>Jeśli chcesz zmienić hasło musisz podać nowe hasło.</p>';}[/b]
  14. // jeśli podane dwa hasła są różne to wyświetlamy błąd
  15. elseif($_POST['new_password'] != $_POST['new_password2']) {
  16. $err = '<p>Podane hasła nie są takie same.</p>';
  17. // jeśli wszystko jest ok, dopisujemy do zmiennej tymczasowej zapytanie do zaktualizowania hasła
  18. } else {
  19. $up2.= ", `user_password` = '".codepass($_POST['new_password'])."'";
  20. }
  21.  


Dodałem pogrubion± linię, my¶lałem że to pomoże ale niestety nic nie dało
Ruch Radzionków
Cytat(kosior11 @ 21.07.2012, 13:11:43 ) *
  1. // jeśli zostanie podane nowe hasło lub inny email
  2. if(!empty($_POST['new_password']) || $_POST['email'] != $user_data['user_email']) {
  3. // sprawdzamy czy zostało podane aktualne hasło
  4. if(empty($_POST['password'])) {
  5. $err = '<p>Jeśli chcesz zmienić hasło lub adres email musisz podać aktualne hasło.</p>';
  6. // jeśli zostało podane to sprawdzamy czy jest poprawne
  7. } elseif(codepass($_POST['password']) != $user_data['user_password']) {
  8. $err = '<p>Podane aktualne hasło jest nieprawidłowe.</p>';
  9. } else {
  10. // jeśli wszystko jest ok...
  11. // sprawdzamy czy user chce zmienić hasło
  12. [b]if(!empty($_POST['new_password'])) {
  13. $err = '<p>Jeśli chcesz zmienić hasło musisz podać nowe hasło.</p>';}[/b]
  14. // jeśli podane dwa hasła są różne to wyświetlamy błąd
  15. elseif($_POST['new_password'] != $_POST['new_password2']) {
  16. $err = '<p>Podane hasła nie są takie same.</p>';
  17. // jeśli wszystko jest ok, dopisujemy do zmiennej tymczasowej zapytanie do zaktualizowania hasła
  18. } else {
  19. $up2.= ", `user_password` = '".codepass($_POST['new_password'])."'";
  20. }
  21.  


tu masz bł±d:

  1. [b]if(!empty($_POST['new_password'])) {

powinno byc tak:
  1. if($_POST['new_password'] == '')

albo
  1. if(!isset($_POST['new_password']))
djgarsi
Poza tym zabezpiecz cokolwiek ten skrypt bo wieje atakiem.
wNogachSpisz
Cytat(djgarsi @ 21.07.2012, 13:28:03 ) *
zabezpiecz cokolwiek ten skrypt bo wieje atakiem.


W którym miejscu?
djgarsi
Cytat(wNogachSpisz @ 21.07.2012, 13:31:11 ) *
W którym miejscu?


We fragmencie ktory podał nie ma zadnego filtrowania danych z formularza. Chyba że przed samym połaczeniem z baz± co¶ filtruje.
sobol6803
  1. if(!empty($_POST['new_password']))

To znaczy "je¶li nowe hasło nie jest puste zrób ...". Wywal ten wykrzyknik. Dodatkowo zrób jakie¶ bardziej zaawansowane sprawdzanie tego pola - trim, sprawdzaj ilo¶ć znaków strlen, daj jaki¶ wymóg, że musi być np. przynajmniej 6 znaków w ha¶le.
kosior11
Zmieniłem, próbowałem obie opcje i mimo wszystko zapisuje bez hasła :/
Ruch Radzionków
pokaz cały kod php oraz html może gdzie¶ indziej masz bł±d
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.