Php 我如何检查电子邮件是否已经在使用?

Php 我如何检查电子邮件是否已经在使用?,php,html,css,Php,Html,Css,我一直在我的帐户创建页面工作,我被困在哪里,我应该检查电子邮件是否已经在使用中,以及如何通过它。我需要这样做一个查询语句吗 Select * from Customers WHERE Email = $email) 往那边查 <?php session_start(); ?> <?php require_once("headerTH.html") ?> <?php $db= new PDO("sqlite:onlinestore.

我一直在我的帐户创建页面工作,我被困在哪里,我应该检查电子邮件是否已经在使用中,以及如何通过它。我需要这样做一个查询语句吗

Select * from Customers WHERE Email = $email)
往那边查

<?php 
session_start();
?>
<?php require_once("headerTH.html") ?>

<?php
$db= new PDO("sqlite:onlinestore.db");

if(ISSET($_POST['register'])){
    $username = $_POST['username'];
    $email = $_POST['email'];
    $psw = sha1($_POST ['psw']);
    $tel = $_POST['tel'];

    if(! empty($email) && !empty($psw)) {
        $query = "INSERT INTO Customers (UserName, Passwd, PhoneNumber, Email) VALUES(:UserName, :Passwd, :PhoneNumber, :Email)";
        $result = $db->prepare($query);

        $result->bindParam(":UserName", $username);
        $result->bindParam(":Passwd", $psw);
        $result->bindParam(":Email", $email);
        $result->bindParam(":PhoneNumber", $tel);
        // Account pass or fail
        if($result->execute()){
            echo"You have successfully created an account.{$_POST['email']}<br>";
        }else{
           ///print_r($db->errorInfo());
           require_once("create.php");
        }
    } else {
        echo "all fields are required";
        require_once("create.php");
    }
} else {
    require_once("create.php");
}
?>
<?php require_once("footerT.html")?>


我认为理想的方法是检查数据库中是否存在新的电子邮件,并基于这种情况。如果数据库中不存在新电子邮件,用户将能够创建帐户,否则您应该显示电子邮件已存在的警报。

我认为理想的方法是检查数据库中是否存在新电子邮件,并基于该情况。如果数据库中不存在新电子邮件,用户将能够创建帐户,否则您应该显示电子邮件已存在的警报。

只需要在顶部添加一个简单的if语句

$stmt = $db->prepare("SELECT * FROM Customers WHERE Email=?");
        $stmt->execute([$email]);
        $user = $stmt->fetch();
        if($user){
            //email found
            echo "Email already used";
        }else if($result->execute()){
            echo"You have successfully created an account.{$_POST['email']}<br>";
        }else{
           ///print_r($db->errorInfo());
           require_once("create.php");
        }
    } else {
        echo "all fields are required";
        require_once("create.php");
    }
}
$stmt=$db->prepare(“从电子邮件=?”的客户中选择*”;
$stmt->execute([$email]);
$user=$stmt->fetch();
如果($user){
//找到电子邮件
回显“已使用的电子邮件”;
}else if($result->execute()){
echo“您已成功创建帐户。{$_POST['email']}
”; }否则{ ///打印($db->errorInfo()); 一次需要_(“create.php”); } }否则{ echo“所有字段都是必需的”; 一次需要_(“create.php”); } }
只需要在顶部添加一个简单的if语句

$stmt = $db->prepare("SELECT * FROM Customers WHERE Email=?");
        $stmt->execute([$email]);
        $user = $stmt->fetch();
        if($user){
            //email found
            echo "Email already used";
        }else if($result->execute()){
            echo"You have successfully created an account.{$_POST['email']}<br>";
        }else{
           ///print_r($db->errorInfo());
           require_once("create.php");
        }
    } else {
        echo "all fields are required";
        require_once("create.php");
    }
}
$stmt=$db->prepare(“从电子邮件=?”的客户中选择*”;
$stmt->execute([$email]);
$user=$stmt->fetch();
如果($user){
//找到电子邮件
回显“已使用的电子邮件”;
}else if($result->execute()){
echo“您已成功创建帐户。{$_POST['email']}
”; }否则{ ///打印($db->errorInfo()); 一次需要_(“create.php”); } }否则{ echo“所有字段都是必需的”; 一次需要_(“create.php”); } }
如果是我,是的,就像你说的,我创建了一个新函数,比如checkUserByEmail($email)函数来检查电子邮件是否已经存在

然后,如果您需要通过电子邮件检查用户,也可以使用相同的功能,比如在登录时(如果您使用电子邮件登录)


顺便说一下,别忘了清理输入;)

如果是我,是的,就像你说的,我创建了一个新函数,比如函数checkUserByEmail($email),来检查电子邮件是否已经存在

然后,如果您需要通过电子邮件检查用户,也可以使用相同的功能,比如在登录时(如果您使用电子邮件登录)


顺便说一下,别忘了清理输入;)

我认为答案是肯定的,请不要使用自己的密码哈希,特别是不要使用
MD5()
SHA1()
。为了用户的安全,PHP提供并请使用它们。另一个选项是将该列设置为数据库中唯一的列,然后当您尝试插入一个已经存在的列时,捕获由此产生的错误。为什么所有的
都多次出现,但它们之间什么都没有?不必要不,如果只是一个测试,将密码保留为纯文本会更容易:)我想答案是可以的,请不要使用自己的密码哈希,特别是不要使用
MD5()
SHA1()
。为了用户的安全,PHP提供并请使用它们。另一个选项是将该列设置为数据库中唯一的列,然后当您尝试插入一个已经存在的列时,捕获由此产生的错误。为什么所有的
都多次出现,但它们之间什么都没有?不必要不,如果只是一个测试,将密码保留为纯文本会更容易:)