Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]zmiana hasla
Forum PHP.pl > Forum > Przedszkole
gigzorr
Witam.Mam taki oto kawałek kodu:
  1. $login = $_POST['login'];
  2. $haslo = md5($_POST['haslo']);
  3. $odp = $_POST['odp'];
  4.  
  5. //sql injection ochrona
  6.  
  7. if (empty($login) || (empty($haslo) || (empty($odp))))
  8. {
  9. echo 'Prosze wpisać login,haslo,odp.';
  10. }
  11. else {
  12. $sprloginu = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM rejestracja WHERE nick_z_gry = '".$login."' and odpowiedz = '".$odp."' LIMIT 1")) or die(mysql_error());
  13. print_r($sprloginu);
  14. if ($sprloginu[0] >= 1)
  15. {
  16. echo "";
  17. }
  18. else {
  19. $query= "UPDATE rejestracja set haslo = '".$haslo."' WHERE nick_z_gry = '".$login."'" or die(mysql_error());
  20. print_r($update);
  21. $result = mysql_query($query);
  22. if ($result)
  23. {
  24. echo 'Haslo zostało zmienione';
  25. }
  26. else {
  27. echo 'blad';
  28. }
  29. }
  30.  
  31. }


I gdy wpisze byle co , np. a, a, a to i tak wyskakuje , ze haslo zostalo zmienione.A teraz w druga strone , jak wpisze login+haslo to zmienia haslo , ale wlasnie jest tutaj nastepny problem , bo nie porownuje mi odpowiedzi wpisanej z odpowiedzia w bazie a z uzytkownikiem chce zrobic , ze jak nie ma takiego to ma wyskoczyc , ze nie ma , ale zapytanie cos nawala chyba.
Crozin
  1. $haslo = md5($_POST['haslo']);
  2. // (...)
  1. $haslo = md5($_POST['haslo']);
  2. // (....)
  3. if ( ... empty($haslo) ... )
Czasami zastanawiam się czy początkujący PHPowcy w ogóle wiedzą co piszą czy tylko klepią kod jak bezmózgie zombie.

Przepisz kod, tak by dało się go czytać... wtedy pewnie ktoś odpowie.
zonkerman
  1. $haslo = md5($_POST['haslo']);
  2. // (...)


Skoro najpierw hash'ujesz to tam nie ma znaków specjalnych, które usuwasz powyższymi funkcjami. Poza tym funkcje: mysql_real_escape_string i htmlspecialchars działają na takiej samej (lub podobnej) zasadzie. Więc po co tyle razy mielić?
gigzorr
Cytat(Crozin @ 23.07.2010, 20:23:44 ) *
  1. $haslo = md5($_POST['haslo']);
  2. // (...)
  1. $haslo = md5($_POST['haslo']);
  2. // (....)
  3. if ( ... empty($haslo) ... )
Czasami zastanawiam się czy początkujący PHPowcy w ogóle wiedzą co piszą czy tylko klepią kod jak bezmózgie zombie.

Przepisz kod, tak by dało się go czytać... wtedy pewnie ktoś odpowie.


nie rozumiem co miales do konca na mysli .
  1. $login = $_POST['login'];
  2. $haslo = md5($_POST['haslo']);
  3. $odp = $_POST['odp'];
  4.  
  5. //sql injection ochrona
  6.  
  7. if (empty($_POST['login']) || (empty($_POST['haslo']) || (empty($_POST['odp']))))
  8. {
  9. echo 'Prosze wpisać login,haslo,odp.';
  10. }
  11. else
  12. {
  13. $sprloginu = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM rejestracja WHERE nick_z_gry = '".$login."' and odpowiedz = '".$odp."'")) or die(mysql_error());
  14. print_r($sprloginu);
  15. if ($sprloginu[0] >= 1)
  16. {
  17. echo "nie ma takiego loginu";
  18. }
  19. else
  20. {
  21. $query= "UPDATE rejestracja set haslo = '".$haslo."' WHERE nick_z_gry = '".$login."'" or die(mysql_error());
  22. print_r($update);
  23. $result = mysql_query($query);
  24. if ($result)
  25. {
  26. echo 'Haslo zostało zmienione';
  27. }
  28. else
  29. {
  30. echo 'blad';
  31. }
  32. }
  33.  
  34. }


ps. jak masz jakas uwage to wal , chociaz naucze sie czegos smile.gif
Makciek
chodziło mu o to:
  1. $haslo = md5($_POST['haslo']); // hashuje, jesli nie wiesz co to to to rodzaj 'kodowania' jednostronnego
  2.  
  3. (...)
  4.  
  5. $haslo = mysql_real_escape_string(htmlspecialchars(trim(strip_tags($haslo)))); // a tu juz tą zakodowaną wersję sprawdzasz , co nie ma sensu


dalej:
(jak dla mnie to uprawiasz w tym miejscu jakieś cuda smile.gif
  1. $sprloginu = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM rejestracja WHERE nick_z_gry = '".$login."' and odpowiedz = '".$odp."' LIMIT 1")) or die(mysql_error());

(wiesz co to oznacza count?)
daj tak:
  1. $aaaa = mysql_query("SELECT * FROM rejestracja WHERE `nick_z_gry` = '$login' AND `odpowiedz` = '$odp'")) or die(mysql_error());
  2. $sprloginu = mysql_fetch_array($aaaa);


I spytam jeszcze z ciekawości:
Widziałeś chociaż na oczy jakikolwiek kurs PHP + MySQL?, bo chyba go nie czytałeś smile.gif
Crozin
@zonkerman:
1) Pozwól wykazać się gigzorr-owi, by sobie przemyślał co źle zrobił, a nie dawaj na tacy odpowiedzi
2) mysql_real_escape_string i htmlspecialchars nie mają ze sobą kompletnie nic wspólnego - ich działanie i efekty również w żadnym stopniu się nie pokrywają

@gigzorr: Widzę, że nadal nie udało Ci się przepisać kodu z zachowaniem odpowiednich wcięć - ale przynajmniej poprawiłeś błąd z empty.

1) Dlaczego, gdy pierwsze zapytanie (to z COUNT()) zwróci Ci 1, czyli potwierdzenie, że w bazie danych istnieje podana przez użytkownika odpowiedź do hasła, wyświetlasz komunikat "nie ma takiego użytkownika", skoro jest? Chyba Ci się bloki pomyliły (treść IF powinieneś zamienić z treścią ELSE)
2) Niepotrzebnie rozbijasz to na dwa zapytania:
  1. UPDATE rejestracja SET haslo = 'abc' WHERE login = 'def' AND odpowiedz = 'ghi';
Jeżeli jeden rekord został zaktualizowany (mysql_affected_rows) oznacza to, że zmieniono hasło i odpowiedź pasuje do loginu. Jeżeli żaden rekord nie został zmodyfikowany oznacza to, że login/odpowiedź nie pasują.
gigzorr
Cytat(Crozin @ 23.07.2010, 20:59:18 ) *
@zonkerman:
1) Pozwól wykazać się gigzorr-owi, by sobie przemyślał co źle zrobił, a nie dawaj na tacy odpowiedzi
2) mysql_real_escape_string i htmlspecialchars nie mają ze sobą kompletnie nic wspólnego - ich działanie i efekty również w żadnym stopniu się nie pokrywają

@gigzorr: Widzę, że nadal nie udało Ci się przepisać kodu z zachowaniem odpowiednich wcięć - ale przynajmniej poprawiłeś błąd z empty.

1) Dlaczego, gdy pierwsze zapytanie (to z COUNT()) zwróci Ci 1, czyli potwierdzenie, że w bazie danych istnieje podana przez użytkownika odpowiedź do hasła, wyświetlasz komunikat "nie ma takiego użytkownika", skoro jest? Chyba Ci się bloki pomyliły (treść IF powinieneś zamienić z treścią ELSE)
2) Niepotrzebnie rozbijasz to na dwa zapytania:
  1. UPDATE rejestracja SET haslo = 'abc' WHERE login = 'def' AND odpowiedz = 'ghi';
Jeżeli jeden rekord został zaktualizowany (mysql_affected_rows) oznacza to, że zmieniono hasło i odpowiedź pasuje do loginu. Jeżeli żaden rekord nie został zmodyfikowany oznacza to, że login/odpowiedź nie pasują.



Zrobiłem , tak jak napisałeś z jednym zapytaniem , i działa bez problemu , tylko jeszcze , nie chce żeby zwracalo 1 jak się uda lub 0 jak się nie uda , chce poprostu jak się uda , ze "haslo zostało zmienione" a jak nie to "nastapil blad".probowalem cos takiego:
  1. $result = mysql_query($query);
  2. if ($result)
  3. {
  4. echo 'haslo zostalo zmienione';
  5. }
  6. else
  7. {
  8. echo 'nastapil blad';
  9. }


ale takie cos to caly czas bedzie wyswietlalo "nastapil blad".

Crozin
Nie ma potrzeby cytowania całej wiadomości - więcej... to tylko przeszkadza.

1) Zobacz co zwraca mysql_query()
2) Zobacz co robi mysql_affected_rows()
gigzorr
Jestem pewien , iż z rana się lepiej myśli , jeżeli funkcja mysql_affected_rows zwraca 1 lub 0 , to wystarczylo podstawic
  1.  
  2. {
  3. echo 'zmieniono';
  4. }
  5. else
  6. {
  7. echo 'blad';
  8. }



dziekuje jeszcze raz smile.gif
darophp
Offtop.
Kiedyś wyczytałem, że między 8 - 10 człowiek najlepiej myśli, jest pobudzony, ma oczywiście dużo energii i mózg pracuje trochę szybciej tongue.gif
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.