Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO] Problem z porównaniem pola z inputem
Forum PHP.pl > Forum > PHP
DonJeday
Mój problem polega na tym iż chcę napisać zmianę hasła do konta usera, jednak nie wiem co jest grane...

Chcę sprawdzić czy podane stare hasło przez usera zgadza się w bazie danych i teraz to mój kod:

  1. <?php
  2.  
  3. $stare_haslo = sha1(md5($_POST['stare']));
  4. try {
  5.    $pdo = new PDO('mysql:host=localhost;dbname=...', '...', '...',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  6.    $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7.    $query = $pdo -> prepare('SELECT password FROM users WHERE id = :id');
  8.    $query -> bindValue(':id', $user_info[1], PDO::PARAM_INT);
  9.    $query -> execute();
  10.    $query -> closeCursor();
  11.    $row = $query -> fetch(PDO::FETCH_ASSOC);
  12.    echo $row[0]['password'];
  13.    if ($row[0]['password'] == $stare_haslo) {
  14.        echo 'takie same';
  15.    } else {
  16.        echo 'Nie takie same';
  17.    }
  18. }
  19. catch(PDOException $e) {
  20.          echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  21. }
  22.  
  23.  
  24.  
  25. ?>




Co jest nie tak? Bo ja już nie wiem...
WebCM
Usuń closeCursor(), gdyż w ten sposób usuwasz dane z $query. Źle odczytujesz zawartość pól z rekordu. Nie używasz fetchAll(), więc tablica jest jednowymiarowa.

  1. <?php
  2. $query -> closeCursor(); //Usunąć
  3. echo $row['password']; //Tak poprawnie odczytasz dane
  4. ?>
DonJeday
Mimo tych zmian i tak nie działa... Mimo iż podaje dobre hasło zwraca else
W ogóle nie wypisuje hasła echo dałem po to żeby zobaczyc czy w ogóle mi wypisze hasło, ale nic czysto.
Po zmianach:
  1. <?php
  2. $query = $pdo -> prepare('SELECT password FROM users WHERE id = :id');
  3.   $query -> bindValue(':id', $user_info[1], PDO::PARAM_INT);
  4.   $query -> execute();
  5.   $row = $query -> fetchAll(PDO::FETCH_ASSOC);
  6.   echo $row['password'];
  7.   if ($row['password'] == $stare_haslo) {
  8.       echo 'takie same';
  9.   } else {
  10.       echo 'Nie takie same';
  11.   }
  12. ?>


----------------------
Problem rozwiązany powinno wyglądać to tak:
  1. <?php
  2. $query = $pdo -> prepare('SELECT password FROM users WHERE id = :id');
  3.   $query -> bindValue(':id', $user_info[1], PDO::PARAM_INT);
  4.   $query -> execute();
  5.   $row = $query -> fetch(PDO::FETCH_ASSOC);
  6.   if ($row['password'] == $stare_haslo) {
  7. ?>
wlamywacz
Nie łatwiej sprawdzić to ile rekordów zwróci z warunkiem:
  1. WHERE `user` = '$user' AND `password` = `$oldPassword`

Jeśli zwróci jeden to znaczy że jest ok lub po prostu dać update z tym warunkiem i pobrać ilość zmodyfikowanych rekordów
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.