Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PDO] Problem z porównaniem pola z inputem
DonJeday
post 8.11.2008, 13:00:33
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
WebCM
post 9.11.2008, 09:16:59
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. ?>


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
DonJeday
post 9.11.2008, 12:30:28
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 9.11.2008, 12:42:57
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 04:29