ОШИБКА ПРОВЕРКИ! Проверка проверки, существует ли адрес электронной почты уже в базе данных phpmyadmin

#php #html #phpmyadmin

#php #HTML #phpmyadmin

Вопрос:

Если адрес электронной почты уже существует в базе данных, поэтому программа не должна выполняться и отображать ошибку «Электронная почта уже зарегистрирована», но она так не работает. Код выглядит нормально для меня, синтаксической ошибки нет. Но работает не так, как я хочу, вместо того, чтобы показывать мне, что ошибка электронной почты существует. Он выполняет форму и вставляет дубликат адреса электронной почты в базу данных mysql.

Вот код, пожалуйста, дайте мне знать, если кто-нибудь может помочь.

 <?php
include('dbconnection.php');
if(isset($_REQUEST['rSignup'])){
    if(($_REQUEST['rName'] == "") || ($_REQUEST['rEmail'] =="") || ($_REQUEST['rPassword'] =="")){
        $regmsg = '<div class="alert alert-warning mt-2" role="alert">All Fields are Required</div>';
    }else{
        $sql = "SELECT r_email FROM requestorlogin_tb WHERE r_email='".$_REQUEST['rEmail']."'";
        $result = $conn->query($sql);
        if($result->num_rows==1){
            $regmsg = '<div class="alert alert-warning mt-2" role="alert">Email ID Already Registered</div>';
        } else{
            $rName = $_REQUEST['rName'];
            $rEmail = $_REQUEST['rEmail'];
            $rPassword = $_REQUEST['rPassword'];
            $sql = "INSERT INTO requesterlogin_tb(r_name,r_email,r_password) VALUES('$rName','$rEmail','$rPassword')";
            if($conn->query($sql) == TRUE){
                $regmsg = '<div class="alert alert-success mt-2" role="alert">Account Successfully Created</div>';
            } else{
                $regmsg = '<div class="alert alert-danger mt-2" role="alert">Unable to Create Account</div>';
                }
            }
    }
}
  

?>

Комментарии:

1. добавьте ограничение уникальности в базу данных, и тогда дубликат электронного письма не сможет быть вставлен, независимо от того, что делает ваш php

2. Я подозреваю, что ваша проблема заключается здесь: $result->num_rows==1 если вы не очищаете базу данных каждый раз? Вы, вероятно, хотите проверить, существует ли $result->num_rows > 0

3. и затем вы хотите пойти и изучить подготовленные инструкции, потому что это: WHERE r_email='".$_REQUEST['rEmail']."'" это катастрофа, ожидающая своего часа

4. Итак, я должен попробовать это:$result-> num_rows > 0

5. Я изменил его, но не работает, и возникает ошибка, Обратите внимание: Попытка получить свойство ‘num_rows’ не-объекта в C:xampphtdocsNewOSMSUserRegistration.php в строке 9

Ответ №1:

Пожалуйста, обновите свой запрос для предотвращения внедрения sql и попробуйте это :

   $remail=$_REQUEST['rEmail'];
   $stmt = $conn->prepare("SELECT r_email FROM requestorlogin_tb WHERE r_email=?");
    $stmt->bind_param('s', $remail);
    $stmt->execute();
    $result = $stmt->get_result(); // Assign the result to a variable

    if ($result->num_rows > 0) { // Check the number of rows in the MySQLi result object
        echo "exist";
        
        $stmt->close();
        $conn->close();
    } else {
    ....
  

Комментарии:

1. Simone, он не вставил дубликат электронной почты в базу данных, но вместо этого была ошибка n. Неперехваченная ошибка: вызов функции-члена bind_param() при boolean в C:xampphtdocsNewOSMSUserRegistration.php:9 Трассировка стека: #0 C:xampphtdocsNewOSMSindex.php (76): добавлено include() #1 {main} C:xampphtdocsNewOSMSUserRegistration.php в строке 9

2. вы уверены, что include path подходит? файл подключения установлен правильно?