Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Zmiana Hasła - Problem
Forum PHP.pl > Forum > PHP
Reptile ReX
Ostatnio chciałem zrobić u siebie w serwisie opcję do zmiany hasła więc zrobiłem sobie form'a

  1. Zmiana Hasła:
  2. <form action='' method='post'>
  3. Nowe Hasło:<input type='password' name='password'><BR><BR>
  4. Powtórz Hasło:<input type='password' name='password2'><BR><BR>
  5. <input type='submit' name='submit' value='Zmień'>
  6. </form>


Teraz zrobiłem taki skrypcik php:

  1. <?php
  2. if ($_POST['password']==$_POST['password2']){
  3. $zapyt=mysql_query("SELECT `id`, `login` FROM `users` WHERE `login` = '$nick'");
  4. $wynik=mysql_fetch_array($zapyt);
  5. $id=$wynik["id"];
  6. $change = "UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1";
  7. }else{
  8.  echo 'Wpisałeś dwa rózne hasła<BR>'; }
  9.  if (@mysql_query ($change)) {
  10. echo "Gratulujemy $nick twoje hasło zostało zmienione";
  11. } else {
  12. echo "Error"; }
  13. ?>


niestety coś chyba z nim nie tak, ponieważ zmiana hasła nie działa poprawnie, zaznaczam że zmienna $nick jest zdefiniowana wcześniej).

Co zrobiłem nie tak? czekam na odpowiedź
nithajasz
Po pierwsze formularz gdzie wysyłasz? Jeśli masz action puste to skrypt wie tylko tyle, że ma nie robić żadnej akcji.

Mniemam, że $id jak $nick masz wcześniej zdefiniowane? a do $password masz wpisaną zmienną z $_POST?
Reptile ReX
Załuzmy że mam podstronę settings.php i na niej jest ten form:
z tego co wiem to

<form action=''>oznacza to samo co np: <form action='settings.php '>

Piszę tak bo mi wpadlo już w nawyk ;]. fakt faktem że to w tym przypadku jest zbedne :]

A co do php, faktycznie nie zdefiniowałem zmiennej $password ;pp
na prostej rzeczy się wyłozyć ;/

zaraz sprawdzę i dam edita biggrin.gif
Shili
Tak na marginesie - zawsze wykona Ci zapytanie do bazy, tylko w przypadku różnych haseł zapytanie będzie puste. Masz wyłączone raportowanie błędow przy zapytaniu, więc tego nie widzisz.
Reptile ReX
@up, co powienienem zrobić?

edit: zmiana hasła działa, tylko teraz problem z tym co Shili mówiłeś, proszę o odpowiedz smile.gif
pyro
a tak nawiasem twój kod jest podatny na SQL Injection...
nithajasz
@ <- znak małpy (@). Jeśli znak ten zostanie postawiony przed dowolnym wyrażeniem w PHP, jakiekolwiek powiadomienia o błędach wygenerowane przez to wyrażenie zostaną pominięte (nie będą wyświetlone).

Po drugie warunki masz faktycznie dziwne. W ten sposób jak masz wywołujesz zbędnie pustą funkcję..
Reptile ReX
pyro - wiem już właśnie zabezpieczyłem się:

  1. <?php
  2. $pass1 = htmlspecialchars($_POST['password'], ENT_QUOTES);
  3. $pass2 = htmlspecialchars($_POST['password2'], ENT_QUOTES);
  4. ?>


nithajasz - zaraz coś pokombinuję, mógłbyś mi pokazać co jest źle? czy mam sam próbować ? biggrin.gif
pyro
[b]Reptile ReX[/b], twój kod nadal jest podatny na SQL Injection haha.gif
Reptile ReX
Jak?, gdzie?, kiedy? biggrin.gif
Shili
zapytanie włóż w ifa ze zgodnymi hasłami - wykona się tylko dla zgodnych haseł.

http://pl.wikipedia.org/wiki/SQL_injection - proponuję tą funkcję mysql winksmiley.jpg
Na razie zabezpieczyłeś się przed code injection winksmiley.jpg
pyro
aaa sorry, zauważyłem tylko htmlspecialchars, nbie zauważyłem ENT_QUOTES
nithajasz
  1. <?php
  2. if ($_POST['password']==$_POST['password2'])
  3. {
  4. $zapyt=mysql_query("SELECT `id`, `login` FROM `users` WHERE `login` = '$nick'");
  5. $wynik=mysql_fetch_array($zapyt);
  6. $id=$wynik["id"];
  7. $change = "UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1";
  8. if (mysql_query ($change)) {
  9. echo "Gratulujemy $nick twoje hasło zostało zmienione";
  10. } else {
  11. echo "Error"; 
  12. }
  13. } else {
  14.  echo 'Wpisałeś dwa rózne hasła<BR>'; 
  15. }
  16. ?>
Reptile ReX
Hmm jakby nie było "ENT_QUOTES" trzeba było by zrobić tak?:

  1. <?php
  2. $change = mysql_real_escape_string("UPDATE `db570085`.`users` SET `haslo` = '$password2' WHERE `users`.`id` =$id LIMIT 1");
  3. ?>


to by wystarczyło? smile.gif

nithajasz - dzięki wielkie
marcio
mysql_real_escape_string() daje sie na zmienne z zapytan z sql nie na cale zapytanie smile.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.