Ошибка при проверке на то, существует ли аккаунт в базе данных
Решил попробовать написать по гайду форму регистрации и авторизации для сайта на PHP.
Вот код файла register.php:
<?php
require_once "config.php";
require_once "session.php";
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) {
$fullname = trim($_POST['name']);
$email = trim($_POST['email']);
$password = trim($_POST['password']);
$confirm_password = trim($_POST["confirm_password"]);
$password_hash = password_hash($password, PASSWORD_BCRYPT);
if($query = $db->prepare("SELECT * FROM users WHERE email = ?")) {
$error = '';
// Установка параметров (s = строка, i = int, b = blob, etc), в нашем случае имя пользователя это строка, поэтому обозначение 's'
$query->bind_param('s', $email);
$query->execute();
// Проверка на наличие электронной почты среди записей БД как зарегистрированный на сайте.
$query->store_result();
if ($query->num_rows > 0) {
$error .= '<p class="error">На данную электронную почту уже зарегистрирована!</p>';
} else {
// Валидация пароля
if (strlen($password ) < 6) {
$error .= '<p class="error">Пароль должен иметь как минимум 6 символов!.</p>';
}
// Проверка валидации пароля
if (empty($confirm_password)) {
$error .= '<p class="error">Пожалуйста, подтвердите пароль.</p>';
} else {
if (empty($error) && ($password != $confirm_password)) {
$error .= '<p class="error">Пароли не совпадают.</p>';
}
}
if (empty($error) ) {
$insertQuery = $db->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?);");
$insertQuery->bind_param("sss", $fullname, $email, $password_hash);
$result = $insertQuery->execute();
if ($result) {
$error .= '<p class="success">Вы зарегистрировались!</p>';
} else {
$error .= '<p class="error">Что-то пошло не так!</p>';
}
}
}
}
$query->close();
$insertQuery->close();
// Прекращение подключения к БД
mysqli_close($db);
}
?>
В БД в таблицу данные сохраняются, но при попытке зарегистрировать аккаунт на электронную почту, уже сохраненную в базе данных, выдаёт следующую ошибку:
Warning: Undefined variable $insertQuery in C:\OSPanel\domains\site\php\register.php on line 50
Fatal error: Uncaught Error: Call to a member function close() on null in C:\OSPanel\domains\site\php\register.php:50 Stack trace: #0 {main} thrown in C:\OSPanel\domains\site\php\register.php on line 50
Что с этим можно сделать?
Источник: Stack Overflow на русском