【发布时间】:2015-12-31 23:41:31
【问题描述】:
下面的代码是一个注册表单,在将数据插入数据库之前,我们检查如果用户名和电子邮件已经被占用,实际上它写成phpmysqli,它工作正常,但现在我正在切换到 PDO。代码工作正常并且插入了数据,但它不检查电子邮件和用户名,我的意思是我们可以使用相同的电子邮件和用户名再次插入数据。我不知道为什么它不能以这种 PDO 格式工作,它在简单的 php 标准中工作得很好可能是因为我还没有接触过 PDO。请帮我。我想要的是在将数据插入数据库之前检查电子邮件和用户名,如果它们已经被提取,则数据不会被插入,我们会收到错误消息。
$exists = "";
$query = $db->prepare("SELECT COUNT (username) from userss WHERE username = :username ");
$query->execute(array(':username'=>$un));
if ($query->fetchAll() == 1) {
$exists .= "u";
}
$query = $db->prepare("SELECT COUNT (email) from userss WHERE email = :email ");
$query->execute(array(':email'=>$em));
if ($query->fetchAll() == 1) {
$exists .= "e";
}
if ($exists == "u") echo "<p><b>Error:</b> Username already exists!</p>";
else if ($exists == "e") echo "<p><b>Error:</b> Email already exists!</p>";
else if ($exists == "ue") echo "<p><b>Error:</b> Username and Email already exists!</p>";
else {
$stmt = "INSERT INTO userss (username,first_name,last_name,email,password,password2,)
VALUES (:username,:first_name,:last_name,:email,:password,:password2,)";
$query = $db->prepare( $stmt );
$query->execute( array(':username'=>$un,':first_name'=>$fn,':last_name'=>$ln,':email'=>$em,
':password'=>$pswd,':password2'=>$pswd2,));
if ($query->rowCount() == 1) {
header("Location: login.php");
}
else {
echo "error";
}
【问题讨论】:
-
只是出于兴趣!你为什么要对密码 2 进行哈希处理,即
Confirm Password?另外,为什么将其存储在数据库中? DUH" 就是这样,您可以检查用户是否输入了 2 个不同的密码,即输入错误。