Witam.
Utworzyłem prosty kod PHP o następującej treści:
<?php
if(!isset($_POST['email'])) {
header('Location: index.php'); }
$registration = true;
$email = htmlentities($_POST['email'], ENT_QUOTES
, "UTF-8"); $password = htmlentities($_POST['password'], ENT_QUOTES
, "UTF-8");
if($email != htmlentities($_POST['email_repeat'], ENT_QUOTES
, "UTF-8")) {
$_SESSION['error_email_repeat'] = "<span style='color: red'>E-mail musi być identyczny!</span><br>";
$registration = false;
}
{
$_SESSION['error_password'] = "<span style='color: red'>Hasło musi zawierać przynajmniej 8 znaków!</span><br>";
$registration = false;
}
if($password != htmlentities($_POST['password_repeat'], ENT_QUOTES
, "UTF-8")) {
$_SESSION['error_password_repeat'] = "<span style='color: red'>Hasła muszą być identyczne!</span><br>";
$registration = false;
}
if($_SESSION['token'] != $_POST['token'])
{
$_SESSION['error_token'] = "<br><span style='color: red'>Źle przepisany token!</span>";
$registration = false;
}
unset($_SESSION['token']); unset($_SESSION['token_png']);
if(empty($_POST['rules'])) {
$_SESSION['error_rules'] = "<span style='color: red'>Nie zaakceptowano regulaminu!</span><br>";
$registration = false;
}
if($registration == true)
{
require_once 'connect.php';
$question = @$connect -> query(
sprintf("SELECT `email` FROM `users` WHERE `email`='%s'", mysqli_real_escape_string($email)));
if($question == true)
{
if(mysqli_num_rows($question) != 0)
$_SESSION['error_email'] = "<span style='color: red'>Ten e-mail jest już zajęty!</span><br>";
if(!isset($_SESSION['error_Email'])) {
$hash_password = hash('md5', $password);
$question = @$connect -> query(
sprintf("INSERT INTO `users` (`id`, `email`, `password`, `active`) VALUES ('', '%s', '%s', '0')", mysqli_real_escape_string($email),
mysqli_real_escape_string($hash_password)));
if($question == true)
{
require_once('class.phpmailer.php');
require_once('class.smtp.php');
$mail = new PHPMailer();
$mail -> From = "";
$mail -> FromName = "";
$mail -> AddReplyTo("", "mailing");
$mail -> Host = "";
$mail -> Mailer = "smtp";
$mail -> SMTPAuth = true;
$mail -> Username = "";
$mail -> Password = "";
$mail -> Port = ;
$mail -> Subject = "";
$mail -> Body = "";
$mail -> AddAddress ($email, "");
if($mail -> Send())
{
$_SESSION['registration'] = "<span style='color: green'>Rejestracja powiodła się!</span>";
header('Location: index.php'); }
else
echo "Twoje konto zostało utworzone! Jednakże wystąpił błąd z wysłaniem e-mail'a autoryzującego, skontaktuj się z administratorem!"; }
else
echo "Error nr 2. Błąd zapytania."; }
else
header('Location: index.php'); }
else
echo "Error nr 1. Błąd zapytania."; }
else
header('Location: index.php');
$connect -> close();
?>
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).
(IMG:
https://zapodaj.net/images/c973e00226a11.png)
Bardzo proszę o pomoc, w czym może tkwić problem?
Pozdrawiam