Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]PDO wyszukiwanie usera w bazie
Boshi
post
Post #1





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Cześć, za cholerę nie mogę napisac prostego warunku sprawdzania w PDO, co innego w mysql korzystając z funkcji mysql_num_row.

Co tutaj jest źle? w tej chwili wpisując imię do formularza które jest już w bazie, nie wyświetla żadnego komunikatu. Zresztą w ogóle nie wyświetla czy jest czy nie jest.

Jak sprawdzić czy taki user jest już w bazie czy nie?
  1. $add = $conect->prepare('SELECT `id`, `imie` FROM user WHERE `imie` = :imie');
  2.  
  3. // $add=$conect->prepare('INSERT INTO uzytkownicy ( `imie`, `nazwisko`, `haslo`)
  4. // VALUES(:imie, :nazwisko, :haslo)');
  5. $add->bindValue('imie', $imie, PDO::PARAM_STR);
  6. $add->execute();
  7. if($add->fetch())
  8. {
  9. echo 'istnieje taki user';
  10.  
  11. }
  12. else 'nie istnieje taki user';


Ten post edytował Boshi 7.10.2014, 19:03:27
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro ci nie wyswietla zadnego komunikatu to:
albo w ogole nie dochodzi do tego kodu
albo masz blad, ktory powoduje przerwanie skryptu. Włącz wyswietlanie bledow a sie dowiesz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #3





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


brakuje 'echo' przy elsie dlatego nie wyświela , teraz zauważyłem.

Jednak dalej nie rozumiem jak sprawdzić czy w bazie jest taki user ? Powyższy kod niestety nie działa.
Wyswietla elsa a więc 'nie istnieje taki user' co jest oczywiście bzdurą bo takowy w bazie jest.


Ten post edytował Boshi 7.10.2014, 19:56:46
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$row = $add->fetch();
var_dump($row);

co wyswietla?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #5





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


bool(false) , czy wpiszę w polu imię dane z bazy czy totalna bzdurę zwraca false.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Widac nie znajduje wink.gif

To lecim dalej:
var_dump($imie);
co wyswietla?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #7





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Zwraca długość wpisanego stringa w pole imie:)

string(6) "Kacper"
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra, a pokaz kod jaki dales z fetch co kazalem ci dopisac. Moze wstawiles to w zlym miejscu


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #9





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Może aby było łatwiej podam cały kod. ( nie jest długi+ wyrzuciłem łączenie bo jest na pewno dobrze a szkoda rozszerzać kod tutaj) Jest sporo błędów, brak zastosowania wyrażeń regularnych itd, ale najpierw chcę nauczyć się operacji na samej bazie a potem te szczegóły sobie poprawię smile.gif

  1. <?php
  2. function przekieruj()
  3. {
  4. echo 'nie wszyskie pola zostaly wypelnione'."<br />";
  5. echo ' za 5 sekund nastąpi powrót do formularza rejestracyjnego'."<br />";
  6. header("Refresh: 5; dane_reje.html");
  7. }
  8.  
  9. function codepass($password)
  10. {
  11. return sha1(md5($password).'#!Rfdgd64'); // zakodowanie hasla algorytmem SHA1 ORAZ MD5
  12. }
  13.  
  14.  
  15. $imie= $_POST['imie'];
  16. $nazwisko= $_POST['nazwisko'];
  17. $haslo= codepass($_POST['haslo']);
  18. $haslo1=codepass($_POST['haslo1']);
  19.  
  20.  
  21. //sprawdzenie czy zmienne nie są puste
  22.  
  23.  
  24. if (empty($imie) || empty($nazwisko) || empty($haslo) || empty($haslo1) )
  25. przekieruj();
  26.  
  27. else if($haslo!=$haslo1)
  28. {
  29. echo 'podane hasla nie sa takie same'."<br />";
  30.  
  31. echo ' za 5 sekund nastąpi powrót do formularza rejestracyjnego'."<br />";
  32. header("Refresh: 5; dane_reje.html");
  33. exit;
  34. }
  35.  
  36. // sprawdzenie czy dany uzytkownik istnieje w bazie
  37. $add = $conect->prepare('SELECT `id`, `imie` FROM user WHERE `imie` = :imie');
  38.  
  39. // $add=$conect->prepare('INSERT INTO uzytkownicy ( `imie`, `nazwisko`, `haslo`)
  40. // VALUES(:imie, :nazwisko, :haslo)');
  41. $add->bindValue('imie', $imie, PDO::PARAM_STR);
  42. $add->execute();
  43.  
  44. $row = $add->fetch();
  45. var_dump($row);
  46. var_dump($imie);
  47.  
  48. {
  49. echo 'istnieje taki user';
  50.  
  51. }
  52.  
  53. else echo 'nie istnieje taki user';
  54.  
  55.  
  56.  
  57. ?>


Ten post edytował Boshi 7.10.2014, 22:40:52
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra. Wynika z tego, że nie znajduje ci usera.
Albo go nie masz w bazie
Albo się łączysz do złej bazy
Albo się w ogóle nie łączysz do bazy - nigdzie nie widze, bys gdziekolwiek tworzyl obiekt $conect
Albo masz błąd zapytania - wyswietl go sobie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


$add->bindValue('imie', $imie, PDO::PARAM_STR);
piewszy parametr w bindValue() ma być taki sam jak w zapytaniu, czyli ':imie' a nie 'imie'

Go to the top of the page
+Quote Post
Boshi
post
Post #12





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Poprawiłem ":" ale to nie to oczywiście.

łącze się z dobrą bazą, nie ma błędów.

Jeżeli dobrze rozumiem to metoda fetch powinna działac jak poniżej. Czyli wykonanie jej na zmiennej 'add' powinna zwórcić jako wynik dane z tabeli. Tutaj zwraca false za każdym razem.


Może prościej będzie jak ktoś userów poda prosty kod na sprawdzenie czy coś w bazie istnieje?
  1. if($add->fetch())
  2. {
  3. echo 'istnieje taki user';
  4.  
  5. }
  6.  
  7. else echo 'nie istnieje taki user';


tutaj jeszcze owe połaczenie dla pewności:

  1. $dbname='user';
  2. $host='localhost';
  3. $user='root';
  4. $pass='';
  5.  
  6. // nazwiazanie połączenia
  7. try
  8. {
  9. $conect=new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass );
  10. echo '<span style="color:red"><b>polaczono z baza</b></span>'."<br>";
  11.  
  12. }
  13. catch (PDOException $e) // zlapanie wyjatku i wyprowadzenie komunkatu o bledzie polaczenia
  14. {
  15. echo 'nie udalo sie nawiazac polaczenia z baza danych'."<br>". $e->getMessage();
  16. }


Ten post edytował Boshi 8.10.2014, 14:35:43
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Sprawdziles dokladnie wszystkie rzeczy co podalem? Pokaz kod po porawkach, ktore miales zrobic, bo jakoś ci nie wierzę.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #14





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Sprawdziłem, ale miałeś rację... nie mam pojęcia jak mogłem popełnić tak banalny błąd w zapytaniu. Chodziło oczywiście o "FROM user" a user to nazwa bazy danych, a oczywiście miało być nazwa tabeli.. ehhh
Wszystko działa jak powinno.


jeszcze jedno pytanie. Czy ":" w metodzie bindValue jest konieczne? gdzieś spotkałem się, że można to pominąć?

Dziękuję serdecznie za pomoc, czasem faktycznie warto sprawdzać zapytania smile.gif

Go to the top of the page
+Quote Post
Turson
post
Post #15





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Sprawdz czy przejdzie bez : to sie dowiesz.
Go to the top of the page
+Quote Post
Boshi
post
Post #16





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Jeżeli miało to nie przejść, to niestety, a może stety ale przeszło biggrin.gif

Przy podaniu imienia z bazy -> istnieje taki user
przy podaniu bzdur-> nie istnieje taki user



Mógłbym prosić jeszcze o pomoc z logowaniem ? Nie chcę zakładać nowego tematu.

Doszedłem do rozwiązania, że loguje sie poprawnie, ale... hasło przesyłane w formularzu nie może być kodowane np funkcją password_hash() a mianowicie
$password= password_hash($password, PASSWORD_DEFAULT); - bez tej linijki sesja działa normalnie, z nią, wyrzuca że błąd logowania (nie znajduje hasła bo login sam sprawdzałem i działa.)
Czy to oznacza, że muszę rozkodowywać jakoś to hasło czy jak ?

Kawałek skryptu (obcięte dużo fragmentów aby zaoszczędzić na czasie)

  1. $login= ($_POST['login']);
  2. $password= ($_POST['password']);
  3. // haszowanie hasła
  4. $password= password_hash($password, PASSWORD_DEFAULT);
  5.  
  6. // wyciagniecie danych login oraz haslo z bazy danych
  7. $logg=$conect->prepare("SELECT * FROM uzytkownicy WHERE login=:login && haslo=:password");
  8. $logg->bindValue(':login', $login, PDO::PARAM_STR);
  9. $logg->bindValue(':password', $password, PDO::PARAM_STR);
  10. $logg->execute();
  11.  
  12. // jezeli istnieja takie dane...
  13. if ($logg->fetch())
  14. {
  15. echo 'zalogowales sie poprawnie';
  16. $_SESSION['login']=$login;
  17. $_SESSION['auth']=TRUE;
  18.  
  19. }
  20. else
  21. {
  22. echo 'blad podczas logowania do systemu'."<br>";
  23. }



I jeszcze miałbym prośbę. Czy taki skrypt logowania jest akutalny na dziś ? tzn dalej wszystko bazuje na sesjach?
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jesli przy logowaniu sprawdzasz hash z hasla, to i rejestrujac usera, masz do bazy wrzucac hash z hasla... to chyba logiczne. Nie mozesz podczas rejestracji wrzucac do bazy hasla jawnego a podczas logowania w bazie szukac hasła zahashowanego... przeciez to nie ma sensu...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #18





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


No tak to jest logiczne, ale powiedz mi jak mam porównać hash z logowania z hashem z bazy danych? wyprintowałem sobie hash logowania gdzie hasło odpowiada temu z bazy i się różnią sporo między sobą.

Hash z bazy
  1. $2y$10$jG6xksRgtAC/eCW1RF8S1eR2b/QEoThEu0o3XMFqmyB...


hash logowania
  1. $2y$10$aiun8XlhYrGgWUjK/tNZwO9MOmN8VFNXNdWfVzaHoMAIRwkwxZ4Vu


Ten post edytował Boshi 9.10.2014, 19:48:36
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie sądzisz, że logicznym jest sprawdzenie skryptu rejestracji, gdyz to tam wlasnie prawdopodobnie wstawiasz ten hash do bazy?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Boshi
post
Post #20





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Wybacz ale nie za bardzo rozumiem.
Wg logiki to ma działać tak;

1 user się rejestruje-podaje hasło, skrypt przetwarza dane i hashuje hasło odpowiednim algorytmem
2 skrypt wrzuca do bazy zahashowane hasło
3 user się loguje- hash hasła które podaje user musi być identyczne jak w bazie

i przy 3 punkcie nie bardzo rozumiem jak to w skrypcie rejestracji poprawić?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 21.08.2025 - 06:36