我的查询一直允许我注册现有帐户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的查询一直允许我注册现有帐户相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个添加学生的主帐户,我想通过电子邮件或唯一的USN(大学学生编号)显示某个帐户是否存在

<?php 
require 'config.php';

if (isset ($_POST['fname']) && (isset($_POST['mname']) && (isset($_POST['lname']) && (isset($_POST['email']) && (isset($_POST['usn']) && (isset($_POST['schedule'])))))))
{
    $fname = $_POST['fname'];
    $mname = $_POST['mname'];
    $lname = $_POST['lname'];
    $email = $_POST['email'];
    $usn = $_POST['usn'];
    $schedule = $_POST['schedule'];

    $sql = 'INSERT INTO students(fname, mname, lname, email, usn, schedule) VALUES (:fname, :mname, :lname, :email, :usn, :schedule))'; 

    $statement = $db->prepare($sql);

执行变量/数组

    if ($statement->execute([':fname' => $fname, ':mname' => $mname, ':lname' => $lname, ':email' => $email, ':usn' => $usn, ':schedule' => $schedule])) 
    {

        echo "<script type= 'text/javascript'> alert('New Student Record Inserted Successfully'); </script>";
    }

试图显示具有相同usn的学生存在的错误

        $check = $db->prepare("SELECT COUNT(*) FROM students WHERE 'usn' = :usn");
        $check->bindValue(':usn', $_POST['usn']);
        $check->execute();

    if($check->fetch(PDO::FETCH_ASSOC) > 0)
    {
    echo "<script type= 'text/javascript'> alert('User already exist.'); </script>";


    }

试图表明存在同一封电子邮件的学生

        $check2 = $db->prepare("SELECT COUNT(*) FROM students WHERE 'email' = :email");
        $check2->bindValue(':email', $_POST['email']);
        $check2->execute();

    if($check2->fetch(PDO::FETCH_ASSOC) > 0)
    {
    echo "<script type= 'text/javascript'> alert('Email already exist.'); </script>";
    }

    if (empty ($_POST['fname']) or (empty($_POST['lname']) or (empty($_POST['email']) or (empty($_POST['usn']) or (empty($_POST['schedule']))))))

    {

        echo "<script type= 'text/javascript'> alert('There are some field/s that must be filled.'); </script>";
    }


    }
?>

我尝试过这样做,但它会立即激活错误处理程序

答案

一个问题是你在查询中引用了列标​​识符('usn' = :usn"'email' = :email"。)这会将绑定值与文字字符串'usn'和'email'进行比较。所以不要这样做。

if($check2->fetch(PDO::FETCH_ASSOC) > 0)也是一个问题。

如果查询成功运行,$check2->fetch(PDO::FETCH_ASSOC)将成为一个具有一个值的数组,无论其值是多少,它都会计算为> 0。 (PHP将数组转换为int以与0进行比较,这是undefined behavior,但在这种情况下显然返回> 0。)

你需要从结果中找到get the first column,然后在if条件中引用它。

if ($check2->fetchColumn() > 0) ...

此外,无论如何,如果您的某些列在表中应该保持唯一,请为它们添加唯一索引,这样即使您的应用程序没有正确捕获它们,它们也不会接受重复值。

以上是关于我的查询一直允许我注册现有帐户的主要内容,如果未能解决你的问题,请参考以下文章

Xcode bot 报告未注册帐户

更新查询对象上的 Parse ACL

FireBaseUI Auth - 如何知道帐户是来自新注册用户还是现有用户?

如何获取片段内在firebase中注册的用户数?

活动与片段实施

将现有源代码导入 GitHub