Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]zmiana hasla
gigzorr
post 23.07.2010, 19:13:31
Post #1





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


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.

Ten post edytował gigzorr 23.07.2010, 19:14:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Crozin
post 23.07.2010, 19:23:44
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  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.
Go to the top of the page
+Quote Post
zonkerman
post 23.07.2010, 19:32:57
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 3.07.2010

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


  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ć?
Go to the top of the page
+Quote Post
gigzorr
post 23.07.2010, 19:35:22
Post #4





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


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
Go to the top of the page
+Quote Post
Makciek
post 23.07.2010, 19:58:13
Post #5





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 7.03.2009
Skąd: Rzeszów

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


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

Ten post edytował Makciek 23.07.2010, 20:03:02
Go to the top of the page
+Quote Post
Crozin
post 23.07.2010, 19:59:18
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@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ą.
Go to the top of the page
+Quote Post
gigzorr
post 23.07.2010, 22:00:04
Post #7





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


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".

Go to the top of the page
+Quote Post
Crozin
post 23.07.2010, 22:32:08
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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()
Go to the top of the page
+Quote Post
gigzorr
post 24.07.2010, 06:53:43
Post #9





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


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
Go to the top of the page
+Quote Post
darophp
post 24.07.2010, 07:47:49
Post #10





Grupa: Zarejestrowani
Postów: 309
Pomógł: 20
Dołączył: 13.02.2010
Skąd: Kęty

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


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


--------------------
Fotografia, projektowanie stron WWW | web-coding.pl - HTML 5 i CSS 3 - już w krótce ;)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:03