Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie widać wprowadzonych wartości w bazie danych
Forum PHP.pl > Forum > PHP
EthanLyonall
Witam.
Utworzyłem prosty kod PHP o następującej treści:

  1. <?php
  2.  
  3. if(!isset($_POST['email']))
  4. {
  5. header('Location: index.php');
  6. Exit();
  7. }
  8.  
  9. $registration = true;
  10. $email = htmlentities($_POST['email'], ENT_QUOTES, "UTF-8");
  11. $password = htmlentities($_POST['password'], ENT_QUOTES, "UTF-8");
  12.  
  13. if($email != htmlentities($_POST['email_repeat'], ENT_QUOTES, "UTF-8"))
  14. {
  15. $_SESSION['error_email_repeat'] = "<span style='color: red'>E-mail musi być identyczny!</span><br>";
  16. $registration = false;
  17. }
  18.  
  19. if(strlen($password) < 8)
  20. {
  21. $_SESSION['error_password'] = "<span style='color: red'>Hasło musi zawierać przynajmniej 8 znaków!</span><br>";
  22. $registration = false;
  23. }
  24.  
  25. if($password != htmlentities($_POST['password_repeat'], ENT_QUOTES, "UTF-8"))
  26. {
  27. $_SESSION['error_password_repeat'] = "<span style='color: red'>Hasła muszą być identyczne!</span><br>";
  28. $registration = false;
  29. }
  30.  
  31. if($_SESSION['token'] != $_POST['token'])
  32. {
  33. $_SESSION['error_token'] = "<br><span style='color: red'>Źle przepisany token!</span>";
  34. $registration = false;
  35. }
  36.  
  37. unset($_SESSION['token']);
  38. unset($_SESSION['token_png']);
  39.  
  40. if(empty($_POST['rules']))
  41. {
  42. $_SESSION['error_rules'] = "<span style='color: red'>Nie zaakceptowano regulaminu!</span><br>";
  43. $registration = false;
  44. }
  45.  
  46. if($registration == true)
  47. {
  48. require_once 'connect.php';
  49.  
  50. $question = @$connect -> query(
  51. sprintf("SELECT `email` FROM `users` WHERE `email`='%s'",
  52. mysqli_real_escape_string($email)));
  53.  
  54. if($question == true)
  55. {
  56. if(mysqli_num_rows($question) != 0)
  57. $_SESSION['error_email'] = "<span style='color: red'>Ten e-mail jest już zajęty!</span><br>";
  58.  
  59. if(!isset($_SESSION['error_Email']))
  60. {
  61. $hash_password = hash('md5', $password);
  62.  
  63. $question = @$connect -> query(
  64. sprintf("INSERT INTO `users` (`id`, `email`, `password`, `active`) VALUES ('', '%s', '%s', '0')",
  65. mysqli_real_escape_string($email),
  66. mysqli_real_escape_string($hash_password)));
  67.  
  68. if($question == true)
  69. {
  70. require_once('class.phpmailer.php');
  71. require_once('class.smtp.php');
  72. $mail = new PHPMailer();
  73. $mail -> From = "";
  74. $mail -> FromName = "";
  75. $mail -> AddReplyTo("", "mailing");
  76. $mail -> Host = "";
  77. $mail -> Mailer = "smtp";
  78. $mail -> SMTPAuth = true;
  79. $mail -> Username = "";
  80. $mail -> Password = "";
  81. $mail -> Port = ;
  82. $mail -> Subject = "";
  83. $mail -> Body = "";
  84. $mail -> AddAddress ($email, "");
  85.  
  86. if($mail -> Send())
  87. {
  88. $_SESSION['registration'] = "<span style='color: green'>Rejestracja powiodła się!</span>";
  89.  
  90. header('Location: index.php');
  91. }
  92. else
  93. echo "Twoje konto zostało utworzone! Jednakże wystąpił błąd z wysłaniem e-mail'a autoryzującego, skontaktuj się z administratorem!";
  94. }
  95. else
  96. echo "Error nr 2. Błąd zapytania.";
  97. }
  98. else
  99. header('Location: index.php');
  100. }
  101. else
  102. echo "Error nr 1. Błąd zapytania.";
  103. }
  104. else
  105. header('Location: index.php');
  106.  
  107. $connect -> close();
  108. ?>


Jest to system rejestracji konta. Problem pojawił się w chwili kiedy dodałem następujące funkcję:
htmlentities() - w linii: 11, 12, 14, 26;
mysqli_real_escape_string() - w linii: 53, 66, 67;

Ta modyfikacja miało zapobiec tak zwanemu "wstrzykiwaniu sql". Nie wiem czy działa czy nie, gdyż po utworzeniu konta za pośrednictwem powyższego kodu, wartości zapisane w bazie danych są niewidoczne (wygląda to mniej więcej tak jak na obrazku poniżej).



Bardzo proszę o pomoc, w czym może tkwić problem?
Pozdrawiam
nospor
http://php.net/manual/en/mysqli.real-escape-string.php
I przyjrzyj sie jakie parametry sa wymagane dla tej funkcji a jakie ty zapodajesz. Manual naprawde nie gryzie
viking
Wyrzuć @ sprzed query i poczytaj błędy.
Potem wejdź na http://php.net/manual/en/mysqli.real-escape-string.php i przeczytaj ten komunikat na żółto.
Co jest z tym mieszaniem proceduralnego / obiektowego stylu? To już n-ty problem ostatnio z tym. Albo piszesz strukturalnie, albo obiektowo.
A na koniec wywal to wszystko i zrób to porządnie przez http://php.net/manual/en/mysqli.prepare.php
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.