Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PDO] Problem z porównaniem pola z inputem
DonJeday
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


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

Ten post edytował DonJeday 8.11.2008, 13:07:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
WebCM
post
Post #2





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


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. ?>
Go to the top of the page
+Quote Post
DonJeday
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 0
Dołączył: 24.10.2008
Skąd: Częstochowa

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


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


Ten post edytował DonJeday 9.11.2008, 12:31:00
Go to the top of the page
+Quote Post
wlamywacz
post
Post #4





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 13.10.2025 - 00:02