Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Dziwny problem z logowanie PDO
Forti
post
Post #1





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

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


Witam

Cały swój projekt zmieniam na biblioteki PDO (dużo roboty z tym mam) i często wyskakują mi błędy. Generalnie z wszystkim sobie radzę, ale nad systemem logowania siedze od godziny i już brakuje mi pomysłów. Skrypt jest od turson (turson.pl).

Rejestracja działą prawidłowo, wszystko zapisuje do bazy itp.

plik config jest require w index.php, tam natomiast include rejestracja i logowanie. (rejestracja działa, jak już pisałem)

  1. <?PHP
  2. //Formularz rejestracji
  3. function form(){
  4. echo '
  5. <form method="post" action="">
  6. <label for="login">Login:</label>
  7. <input maxlength="32" type="text" name="login" id="login" />
  8.  
  9. <label for="pass">Hasło:</label>
  10. <input maxlength="32" type="password" name="password" id="pass" />
  11.  
  12. <label for="pass_again">Hasło (ponownie):</label>
  13. <input maxlength="32" type="password" name="password2" id="pass_again" />
  14.  
  15. <label for="email">Email:</label>
  16. <input type="text" name="email" maxlength="50" id="email" />
  17.  
  18. <label for="email_again">Podaj swój Battle.tag: (nie wymagane)</label>
  19. <input type="text" maxlength="255" name="battle" id="btag" />#<input type="text" maxlength="255" name="tag" id="btag" /><br />
  20.  
  21.  
  22. <input type="submit" name="wyslano" value="Zarejestruj" />
  23. </form>
  24.  
  25. ';
  26. }
  27.  
  28.  
  29. if(isset($_POST['wyslano'])){ //Sprawdzamy, czy submit został wciśnięty
  30. //Usuwamy białe znaki z przesłanych danych
  31. $login = trim($_POST['login']);
  32. $password = trim($_POST['password']);
  33. $password2 = trim($_POST['password2']);
  34. $email = trim($_POST['email']);
  35. $battle = trim($_POST['battle']);
  36. $tag = trim($_POST['tag']);
  37.  
  38. $errors = NULL; //Tworzymy zmienną przechowująca ewentualne błędy
  39.  
  40. //Sprawdzamy, czy przesłane dane mają odpowiednią ilość znaków
  41. if(strlen($login)<3) $errors .= 'Login musi zawierać co najmniej 3 znaki<br>';
  42. if(strlen($password)<6) $errors .= 'Hasło musi zawierać co najmniej 6 znaków<br>';
  43. if($password!==$password2) $errors .= 'Hasła nie są takie same<br>';
  44. if(!preg_match('/\@/', $email) || strlen($email)<5) $errors .= 'Podany adres e-mail jest nieprawidłowy<br>';
  45.  
  46. //Sprawdzamy czy użytkownik o takim samym loginie już nie istnieje
  47. $stmt = $baza->prepare("SELECT COUNT(id) FROM users WHERE login=:login");
  48. $stmt->bindValue(":login", $login, PDO::PARAM_STR);
  49. $stmt->execute();
  50. $row = $stmt->fetch();
  51. if($row[0]>0) $errors .= 'Konto o takim loginie już istnieje<br>';
  52.  
  53. //Sprawdzamy czy użytkownik o takim samym adresie e-mail już nie istnieje
  54. $stmt2 = $baza->prepare("SELECT COUNT(id) FROM users WHERE email=:email");
  55. $stmt2->bindValue(":email", $email, PDO::PARAM_STR);
  56. $stmt2->execute();
  57. $row2 = $stmt2->fetch();
  58. if($row2[0]>0) $errors .= 'Konto o takim adresie e-mail już istnieje<br>';
  59.  
  60. if(empty($errors)){ //Jeśli nie ma błędów, rejestrujemy użytkownika
  61. $password = sha1($password); //kodujemy hasło
  62. $dodaj = $baza->prepare("INSERT INTO users (login, pass, email, date, battle, tag) VALUES(:login, :password, :email, NOW(), :battle, :tag)");
  63. $dodaj->bindValue(":login", $login, PDO::PARAM_STR);
  64. $dodaj->bindValue(":password", $password, PDO::PARAM_STR);
  65. $dodaj->bindValue(":email", $email, PDO::PARAM_STR);
  66. $dodaj->bindValue(":battle", $battle, PDO::PARAM_STR);
  67. $dodaj->bindValue(":tag", $tag, PDO::PARAM_STR);
  68. $dodaj->execute();
  69. echo "Zarejestrowałeś się. Możesz się teraz <a href=\"login.php\">zalogować</a>";
  70. }
  71. else{
  72. echo '<div style="color:red">'.$errors.'</div>';
  73. form(); //Wyświetlamy formularz
  74. }
  75. }
  76. else form();
  77. ?>


A o to logowanie:

  1. <?PHP
  2. //Formularz logowania
  3. function form(){
  4. echo '
  5. <form action="" method="post">
  6. <label for="login">Login</label>
  7. <input type="text" name="login" required>
  8. <br>
  9. <label for="password">Hasło</label>
  10. <input type="password" name="pass" required>
  11. <br>
  12. <input type="submit" name="wyslano" value="Zaloguj się"/>
  13. </form>
  14. ';
  15. }
  16.  
  17. if(isset($_POST['wyslano'])){ //Sprawdzamy, czy submit został wciśnięty
  18. //Usuwamy białe znaki z przesłanych danych
  19. $login = trim($_POST['login']);
  20. $pass = trim($_POST['pass']);
  21.  
  22. //Kodujemy hasło - przy rejestracji również je zakodowaliśmy, wiec przy porównywaniu musi być zakodowane
  23. $pass = sha1($pass);
  24.  
  25.  
  26. //Sprawdzamy czy użytkownik o podanych danych istnieje
  27. $stmt = $baza->prepare("SELECT login, pass FROM users WHERE login=:login AND pass=:pass");
  28. $stmt->bindValue(":login", $login, PDO::PARAM_STR);
  29. $stmt->bindValue(":pass", $pass, PDO::PARAM_STR);
  30. $stmt->execute();
  31. $row = $stmt->fetch(PDO::FETCH_ASSOC);
  32. if($stmt->rowCount()!=0){
  33. echo "Zalogowałeś się!";
  34. /*
  35.   * Tworzymy sesję dla zalogowanego uzytkownika z:
  36.   * - informacja, ze uzytkownik jest zalogowany
  37.   * - jego id
  38.   */
  39. $_SESSION['logged'] = true;
  40. $_SESSION['user_id'] = $row['id'];
  41.  
  42. }
  43. else{
  44. echo '<div style="color:red">Login i/lub hasło są nieprawidłowe</div>';
  45. form();
  46. }
  47. }
  48. else form();
  49. ?>



Problem: po wpisaniu login i pass pokazuje Login i/lub hasło są nieprawidłowe.
Tak, tak, ale sytuacja taka, że login i hasło są na 100% prawidłowe. Założyłem już 11 kont i wszędzie ten sam problem. Już nie wiem na co patrzeć...

Struktura bazy danych:

users
id - login - pass - email - date - battle - tag - grupa (interesuje nas przy logowaniu tylko login i pass, prawda?)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





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




http://pl1.php.net/manual/en/pdostatement.rowcount.php

Cytat
PDOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

No, i tyle w temacie (IMG:style_emoticons/default/wink.gif)

Skoro przy logowaniu pobierasz $row, to sprawdzaj czy ten $row jest poprawny a nie ilosc
Go to the top of the page
+Quote Post

Posty w temacie


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 - 18:05