Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Logowanie [PDO] [PHP]
jarek998
post 18.06.2015, 11:31:47
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Witam, mam problem dotyczący logowania w PDO, jestem początkującym w tej bibliotece.

Tutaj wklejam kod który ma za zadanie sprawdzić czy dany gracz istnieje bądź też nie:
  1. $sprawdz_dane = $db->prepare("SELECT * FROM uzytkownicy WHERE email=:email AND haslo=:haslo");
  2.  
  3. $sprawdz_dane->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
  4.  
  5. $sprawdz_dane->bindValue(':haslo', $_POST['haslo'], PDO::PARAM_STR);
  6.  
  7. $sprawdz_dane->execute();
  8.  
  9. if($sprawdz_dane->rowCount() > 0 ){
  10.  
  11. $_SESSION = array();
  12.  
  13. $_SESSION['gracz'] = $_POST['email'];
  14.  
  15. header("Location: start.php");
  16.  
  17.  
  18.  
  19. }else{
  20.  
  21. echo "<script type='text/javascript'>window.alert('Nie ma takiego użytkownika')</script>";


Nawet gdy wpisuje dobre dane pojawia się alert "Nie ma takiego gracza".

Z góry dziękuję za każdą pomoc !
Go to the top of the page
+Quote Post
markonix
post 18.06.2015, 11:39:36
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(jarek998 @ 18.06.2015, 12:31:47 ) *
Nawet gdy wpisuje dobre dane pojawia się alert "Nie ma takiego gracza".

To masz gdzie indziej błąd bo z kodu wynika, że powinien się wyświetlić błąd "Nie ma takiego użytkownika".

A tak na poważnie to debuguj, może źle przekazujesz dane z formularza.

Albo zastosuj poradę z PHP.net:

Cytat
For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.


Ten post edytował markonix 18.06.2015, 11:42:34


--------------------
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 12:03:08
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Tylko w tym jest problem że przy rejestracji mam podobnie zrobione i dzała:

KOD:
  1. $sprawdz = $db->prepare("SELECT * FROM uzytkownicy WHERE nick=:nick OR email=:email");
  2.  
  3. $sprawdz->bindValue(':nick', $_POST['nick'], PDO::PARAM_STR);
  4.  
  5. $sprawdz->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
  6.  
  7. $sprawdz->execute();
  8.  
  9.  
  10.  
  11. if($sprawdz->rowCount() > 0 ){
  12.  
  13. echo "<script type='text/javascript'>window.alert('Taki gracz już istnieje!')</script>";


PS. Formularz:
  1. <center><h2>Zaloguj się</h2></center>
  2. <form class="form-horizontal" action="index.php?act=log" method="POST">
  3.  
  4. <div class="form-group">
  5.  
  6. <label for="inputEmail3" class="col-md-2 control-label" >E-mail</label>
  7. <div class="col-md-8">
  8. <input type="email" class="form-control" id="inputEmail3" name="email" placeholder="E-mail">
  9. </div>
  10. </div>
  11. <div class="form-group">
  12. <label for="inputPassword3" class="col-md-2 control-label" >Hasło</label>
  13. <div class="col-md-8">
  14. <input type="password" class="form-control" id="inputPassword3" name="haslo" placeholder="Hasło">
  15. </div>
  16. </div>
  17. <div class="form-group">
  18. <div class="col-md-offset-2 col-md-8">
  19. <div class="checkbox">
  20. <input type="checkbox"> Zapamiętaj mnie
  21. </label>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="form-group">
  26. <div class="col-md-offset-2 col-md-8">
  27. <button type="submit" name="logo" class="btn btn-danger">Wchodzę do gry</button>
  28. </div>
  29. </div>
  30.  
  31. </form>
Go to the top of the page
+Quote Post
markonix
post 18.06.2015, 12:05:11
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Odnieś się do mojej drugiej części, która wg mnie jest bardziej kluczowa.


--------------------
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 12:31:11
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Hymm, ale skoro mam w rejestracji tak zrobione, a w logowaniu tak samo to też powinno działać, heh dziwne ohno-smiley.gif

Go to the top of the page
+Quote Post
viking
post 18.06.2015, 13:25:24
Post #6





Grupa: Zarejestrowani
Postów: 6 377
Pomógł: 1116
Dołączył: 30.08.2006

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


A wyświetl sobie jakie rekordy ten select zwraca. Może jakiś warunek nie jest spełniony? Poza tym nie trzymaj gołych haseł w bazie. Użyj choćby najprostszego sha1, albo http://php.net/manual/en/function.password-hash.php


--------------------
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 13:32:36
Post #7





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


md5 nie wystarczy?
Go to the top of the page
+Quote Post
nospor
post 18.06.2015, 13:35:11
Post #8





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




Trzymanie hasła w postaci md5 juz od dawien dawna jest jednoznaczne z trzymaniem hasła w postaci jawnej


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

"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
jarek998
post 18.06.2015, 13:38:17
Post #9





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Dzięki za podpowiedź.

PS. Zmieniłem troszkę kod i teraz nie zwraca mi zawsze że nie ma takiego użytkownika, ale znów pojawił się problem ponieważ nie przenosi do strony po zalogowaniu.

  1. if(empty($_POST['email']) || empty($_POST['haslo'])){
  2.  
  3. echo "<script type='text/javascript'>window.alert('Uzupełnij wszystkie dane')</script>";
  4.  
  5. }else{
  6.  
  7. $haslo = md5($_POST['haslo']);
  8.  
  9. $sprawdz = $db->prepare("SELECT * FROM uzytkownicy WHERE email=:email OR haslo=:haslo");
  10.  
  11. $sprawdz->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
  12.  
  13. $sprawdz->bindValue(':haslo', $haslo, PDO::PARAM_STR);
  14.  
  15. $sprawdz->execute();
  16.  
  17.  
  18.  
  19. if($sprawdz->rowCount() > 0 ){
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. header("Location: start.php");
  27.  
  28.  
  29.  
  30. }else{
  31.  
  32. echo "<script type='text/javascript'>window.alert('Nie ma takiego użytkownika')</script>";
  33.  
  34. }
Go to the top of the page
+Quote Post
Turson
post 18.06.2015, 13:46:42
Post #10





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

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


Włacz raportowanie wszystkich bledow a na 99,9% (o ile zapytanie ok) ujrzysz "Headers already sent by..."
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 13:54:04
Post #11





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Hymm, nigdy tego nie robiłem jak tą włączyć ? ohno-smiley.gif
Go to the top of the page
+Quote Post
Comandeer
post 18.06.2015, 13:57:14
Post #12





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


http://php.net/manual/en/errorfunc.configuration.php
Heh, fajnie, że mam domyślnie rumuński manual biggrin.gif

Ten post edytował Comandeer 18.06.2015, 13:57:43


--------------------
Go to the top of the page
+Quote Post
nospor
post 18.06.2015, 13:57:26
Post #13





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




Tu masz napisane
Temat: Jak poprawnie zada pytanie


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

"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
jarek998
post 18.06.2015, 14:05:30
Post #14





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Dodałem na początku swojego skryptu
  1. ini_set('display_errors','1');
lecz nic się nie pojawia - jestem w tym kompletnie zielony ;/
Go to the top of the page
+Quote Post
Bobek1910
post 18.06.2015, 14:15:37
Post #15





Grupa: Zarejestrowani
Postów: 31
Pomógł: 3
Dołączył: 14.04.2009
Skąd: Wziąć piwo?

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


Na samej górze pliku, od razu zaraz po "<?php" wstaw sobie ob_start();

Tak to ma wyglądać:
  1. <?php


A jak zadziała, to naucz się, jak robić aplikację, tak, żeby to nie było potrzebne. tongue.gif
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 14:20:17
Post #16





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Nie zadziałało - ale fakt zapomniałem o tym smile.gif

W konsoli też nie pojawia się żaden błąd (CRTL + SHIFT + J). :/

Ten post edytował jarek998 18.06.2015, 14:25:13
Go to the top of the page
+Quote Post
Bobek1910
post 18.06.2015, 14:24:32
Post #17





Grupa: Zarejestrowani
Postów: 31
Pomógł: 3
Dołączył: 14.04.2009
Skąd: Wziąć piwo?

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


Żadnego błędu nie pokazuje, nic?

Na pierwszy rzut oka w zapytaniu zamień OR na AND, bo mogą dziwne wyniki wychodzić.

A może zadziałało, ale ten start.php ma jakiegoś headera, który wywala Cię z powrotem na... główną?
Go to the top of the page
+Quote Post
jarek998
post 18.06.2015, 14:40:12
Post #18





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


Miałeś racje, był tam przekierowanie na index.php, ale to dlatego że sesja się nie ustalała, i dalej się nie ustala - gdy skasowałem przeniosło na start.php.

Ustalanie sesji :
  1. $_SESSION = array();
  2.  
  3. $_SESSION['gracz'] = $_POST['nick'];


Tutaj wyrzucało
  1. <?php
  2. if(empty($_SESSION['gracz'])){
  3. echo("<script type='text/javascript'>window.alert('Twoja sesja wygasła.');document.location.href = 'index.php';</script>");
  4. die();
  5. }
  6. ?>


Sesja powinna się ustalać a tego nie robi.. ohno-smiley.gif
Go to the top of the page
+Quote Post
nospor
post 18.06.2015, 14:41:55
Post #19





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




A masz tam session_start ?


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

"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
jarek998
post 18.06.2015, 15:30:14
Post #20





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 31.01.2014

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


mam

  1. if($_GET['act'] == 'log'){
  2.  
  3.  
  4. //pobieramy zawartość pliku ustawień
  5. require_once('inc/config.php');
  6.  
  7. //startujemy lub przedłużamy sesję


Temat do zamknięcia smile.gif

Mój błąd przy ustalaniu sesji
  1. $_SESSION['gracz'] = $_POST['email'];
zamiast 'email' wpisałem 'nick'.

Dziękuję wszystkim ! headsetsmiley.png

Ten post edytował jarek998 18.06.2015, 14:45:43
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: 12.06.2025 - 13:54