Ошибка при проверке на то, существует ли аккаунт в базе данных

Рейтинг: 0Ответов: 1Опубликовано: 05.06.2023

Решил попробовать написать по гайду форму регистрации и авторизации для сайта на 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

Что с этим можно сделать?

Ответы

▲ -1

Попробуйте перенести $insertQuery->close(); в конец if:

   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>';
        }
        //сюда
    }