【问题标题】:VALIDATION ERROR! Validation check if email address already exist in the db phpmyadmin验证错误!验证检查数据库 phpmyadmin 中是否已存在电子邮件地址
【发布时间】:2020-12-09 20:17:18
【问题描述】:

如果邮箱地址已经存在于数据库中,那么程序不应该被执行并显示“邮箱已经注册”的错误,但它不是这样工作的。代码对我来说看起来不错,没有语法错误。但没有像我想要的那样工作,而不是向我展示存在电子邮件的错误。它执行表单并在 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>';
                }
            }
    }
}

?>

【问题讨论】:

  • 在数据库上添加唯一约束,然后无论您的 php 做什么,都无法插入重复的电子邮件
  • 我怀疑您的问题出在此处:$result-&gt;num_rows==1 除非您每次都清除数据库?你可能想检查$result-&gt;num_rows &gt; 0
  • 然后你想去研究准备好的陈述,因为:WHERE r_email='".$_REQUEST['rEmail']."'" 是一场等待发生的灾难
  • 所以我应该试试这个:$result->num_rows > 0
  • 我已更改但无法正常工作并且出现错误,注意:尝试在第 9 行获取 C:\xampp\htdocs\NewOSMS\UserRegistration.php 中非对象的属性 'num_rows'

标签: php html phpmyadmin


【解决方案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 {
    ....

【讨论】:

  • Simone,它没有在数据库中插入重复的电子邮件,而是出现了一个错误。未捕获的错误:在 C:\xampp\htdocs\NewOSMS\UserRegistration.php:9 中调用布尔成员函数 bind_param() 堆栈跟踪:#0 C:\xampp\htdocs\NewOSMS\index.php(76):包括() #1 {main} 在第 9 行的 C:\xampp\htdocs\NewOSMS\UserRegistration.php 中抛出
  • 你确定包含路径是好的吗?连接文件是否正确设置?
猜你喜欢
  • 2011-08-30
  • 2012-10-30
  • 2011-03-04
  • 1970-01-01
  • 2011-02-14
  • 2015-10-06
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多