Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Hasło nie zwraca uwagi na wielkość liter.
Forum PHP.pl > Forum > Przedszkole
JaNieUmiem
Witam, witam.
Ostatnio nie było mnie trochę na forum, ale teraz wracam.
Otóż zrobiłem skrypt PHP do rejestracji i logowania (wreszcie) smile.gif
Naprawdę bardzo się cieszyłem, gdy zobaczyłem, że wszystko działa. Jednak mimo to jest jeden problem: zarejestrowałem się i chciałem się zalogować. Wszystko działało, ale serwer nie zwracał kompletnie uwagi na to, czy hasło napisałem dużymi literami, czy małymi.
Wpisałem hasło: test12345, a system akceptował także TEST12345.
Pisał mi ktoś, żebym sobie odpuścił, a więc pozdrowienia dla niego smile.gif
Pyton_000
No to teraz wróżymy z fusów. Gdzie kod? struktura BD
JaNieUmiem
index.php - stronka logowania
  1. <?php
  2. if ((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true))
  3. {
  4. header('Location: tankshooter.php');
  5. exit();
  6. }
  7. ?>
  8. <DOCTYPE HTML5>
  9. <html lang="pl">
  10. <head>
  11. <title>Tank shooter</title>
  12. <meta charset="utf-8" />
  13. <meta name="description" content="Tank shooter to prosta gra przeglądarkowa, mini-strzelanka. Strzelaj w czołgi przeciwnika i baw się dobrze!" />
  14. <meta name="keywords" content="Tank shooter" />
  15. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  16. <link rel="stylesheet" href="arkusz.css" type="text/css" />
  17.  
  18. </head>
  19. <body>
  20. <div id="header"><b>Tank shooter</b></div>
  21. <div id="page">
  22. <b><font size="5"><i>Proszę zalogować się do gry.</font></i></b><br><br><font size="4">
  23. Login:<br>
  24. <form action="sent.php" method="post" /> <input type="text" name="login" /><br><br>
  25. Hasło:<br>
  26. <input type="password" name="haslo" /><br><br>
  27. <input type="submit" name="log" value="Zaloguj się" /><br><br>
  28. </form>
  29. <?php
  30. if(isset($_SESSION['blad'])) echo $_SESSION['blad'];
  31. ?><br>
  32. <font size="3">Nie masz jeszcze konta?<br><font size="4"><a href="rejestracja.php">Zarejestruj się!</a></font></font>
  33.  
  34.  
  35. </div>
  36.  
  37. </body>
  38.  
  39. </html>




sent.php
  1. <?php
  2. require_once "connect.php";
  3.  
  4. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  5.  
  6. if ($polaczenie->connect_errno!=0)
  7. {
  8. echo "Error:".$polaczenie->connect_errno."Opis: ".$polaczenie->connect_error;
  9. }
  10. else
  11. {
  12. $login = $_POST['login'];
  13. $haslo = $_POST['haslo'];
  14.  
  15. $login = htmlentities($login, ENT_QUOTES, "UTF-8");
  16. $haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
  17.  
  18. $sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$haslo'";
  19. if ($rezultat = @$polaczenie->query(sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
  20. mysqli_real_escape_string($polaczenie,$login),
  21. mysqli_real_escape_string($polaczenie,$haslo))))
  22. {
  23. $users = $rezultat->num_rows;
  24. if($users>0)
  25. {
  26. $_SESSION['zalogowany'] = true;
  27. unset($_SESSION['blad']);
  28. $wiersz = $rezultat->fetch_assoc();
  29. $_SESSION['id'] = $wiersz['id'];
  30. $_SESSION['user'] = $wiersz['user'];
  31. $_SESSION['email'] = $wiersz['email'];
  32. $rezultat->close();
  33. header('Location: tankshooter.php');
  34. }
  35. else
  36. {
  37. $_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło</span>';
  38. header('Location: index.php');
  39.  
  40.  
  41. }
  42. }
  43. $polaczenie->close();
  44. }
  45.  
  46. ?>


no i rejestracja.php, chociaż nie wiem czy będzie przydatna
  1. <?php
  2. if (isset($_POST['email']))
  3. {
  4. $wszystko_OK=true;
  5. $login = $_POST['login'];
  6. if ((strlen($login)<3) || (strlen($login)>20))
  7. {
  8. $wszystko_OK=false;
  9. $_SESSION['e_login']="Login powinien zawierać od 3 do 18 znaków";
  10. }
  11. if (ctype_alnum($login)==false)
  12. {
  13. $wszystko_OK=false;
  14. $_SESSION['e_login']="Login może składać się tylko z liter i cyfr (bez polskich znaków)";
  15. }
  16.  
  17. $haslo1 = $_POST['haslo1'];
  18. if ((strlen($haslo1)<8))
  19. {
  20. $wszystko_OK=false;
  21. $_SESSION['e_haslo']="Hasło powinno zawierać conajmniej 8 znaków";
  22. }
  23.  
  24. $haslo2 = $_POST['haslo2'];
  25. if ($haslo1!=$haslo2)
  26. {
  27. $wszystko_OK=false;
  28. $_SESSION['e_haslo2']="Podane hasła są różne";
  29. }
  30. if (!isset($_POST['regulamin']))
  31. {
  32. $wszystko_OK=false;
  33. $_SESSION['e_regulamin']="Aby się zarejestrować, potwierdź regulamin";
  34. }
  35.  
  36. $email = $_POST['email'];
  37. $emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
  38. IF ((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false)|| ($emailB!=$email))
  39. {
  40. $wszystko_OK=false;
  41. $_SESSION['e_email']="Podany adres e-mail jest niepoprawny";
  42. }
  43. require_once "connect.php";
  44. mysqli_report(MYSQLI_REPORT_STRICT);
  45.  
  46. try
  47. {
  48. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  49. if ($polaczenie->connect_errno!=0)
  50. {
  51. throw new Exception(mysqli_connect_errno());
  52. }
  53. else
  54. {
  55. $rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
  56. if (!$rezultat) throw new Exception($polaczenie->error);
  57.  
  58. $ile_maili = $rezultat->num_rows;
  59. if($ile_maili>0)
  60. {
  61. $wszystko_OK=false;
  62. $_SESSION['e_email']="Podany adres e-mail jest już zajęty";
  63. }
  64.  
  65.  
  66. $rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$login'");
  67. if (!$rezultat) throw new Exception($polaczenie->error);
  68.  
  69. $ile_loginow = $rezultat->num_rows;
  70. if($ile_loginow>0)
  71. {
  72. $wszystko_OK=false;
  73. $_SESSION['e_login']="Podany login jest już zajęty.";
  74. }
  75. if ($wszystko_OK==true)
  76. {
  77. if ($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$login', '$haslo1', '$email')"))
  78. {
  79. $_SESSION['udanarejestracja']=true;
  80. header('Location: welcome.php');
  81. }
  82. else
  83. {
  84. if (!$rezultat) throw new Exception($polaczenie->error);
  85. }
  86. }
  87.  
  88. $polaczenie->close();
  89. }
  90. }
  91. catch(Exception $e)
  92. {
  93. echo "Przepraszamy. Serwer aktualnie niedostępny. Prosimy o rejestrację innym razem.";
  94. echo '<br>inf: '.$e;
  95. }
  96.  
  97. }
  98.  
  99.  
  100. ?>
  101. <DOCTYPE HTML5>
  102. <html lang="pl">
  103. <head>
  104. <title>Tank shooter - rejestracja</title>
  105. <meta charset="utf-8" />
  106. <meta name="description" content="Tank shooter to prosta gra przeglądarkowa, mini-strzelanka. Strzelaj w czołgi przeciwnika i baw się dobrze!" />
  107. <meta name="keywords" content="Tank shooter" />
  108. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  109. <link rel="stylesheet" href="arkusz.css" type="text/css" />
  110. <script src='https://www.google.com/recaptcha/api.js'></script>
  111. <style>
  112. .error
  113. {
  114. color: red;
  115. font-size: 15px;
  116. }
  117. </style>
  118. </head>
  119. <body>
  120. <div id="header"><b>Tank shooter - rejestracja</b></div>
  121. <div id="page">
  122. <b><font size="5"><i>Zarejestruj się i graj za darmo!</font></i></b><br><br><font size="4">
  123. <form method="post">
  124. Login:<br>
  125. <input type="text" name="login" /><br>
  126. <?php
  127. if (isset($_SESSION['e_login']))
  128. {
  129. echo '<div class="error">'.$_SESSION['e_login'].'</div>';
  130. unset($_SESSION['e_login']);
  131. }
  132. ?>
  133. <br>
  134. Hasło:<br>
  135. <input type="password" name="haslo1" /><br>
  136. <?php
  137. if (isset($_SESSION['e_haslo']))
  138. {
  139. echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
  140. unset ($_SESSION['e_haslo']);
  141. }
  142. ?>
  143. <br>
  144. Powtórz hasło:<br>
  145. <input type="password" name="haslo2" /><br>
  146. <?php
  147. if (isset($_SESSION['e_haslo2']))
  148. {
  149. echo '<div class="error">'.$_SESSION['e_haslo2'].'</div>';
  150. unset ($_SESSION['e_haslo2']);
  151. }
  152. ?>
  153. <br>
  154. E-mail:<br>
  155. <input type="text" name="email" /><br>
  156. <?php
  157. if (isset($_SESSION['e_email']))
  158. {
  159. echo '<div class="error">'.$_SESSION['e_email'].'</div>';
  160. unset ($_SESSION['e_email']);
  161. }
  162. ?>
  163. <br>
  164. <label><input type="checkbox" name="regulamin" />Akceptuję </label><a href="regulamin.php">regulamin</a><br>
  165. <?php
  166. if (isset($_SESSION['e_regulamin']))
  167. {
  168. echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
  169. unset ($_SESSION['e_regulamin']);
  170. }
  171. ?>
  172. <br>
  173. <center><div class="g-recaptcha" data-sitekey="6LcscScUAAAAAEHkV27vHvoALWsOQb3brY_QlgDF"></div><br><br></center>
  174. <input type="submit" value="Zarejestruj się" />
  175. </div>
  176.  
  177.  
  178. </form>
  179. </body>
  180.  
  181. </html>


Pyton_000
kod jest ok, więc na 90% masz złę collate w BD na kolumnie pass. Powinno być np. utf8_bin.
Generalnie pola *_bin są case sensitive, pozostałe nie koniecznie.
Możesz też użyć konwersji podczas wybierania z BD: https://dev.mysql.com/doc/refman/5.7/en/cha...collations.html
JaNieUmiem
A co to collate w BD?
Rysh
hasło trzymasz otwartym tekstem w bazie danych?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.