那基本上就是我要做的事。
我有一个保存到数据库中的表单,现在如果这个情况下的电子邮件已经存在,它会给我一条错误消息“用户已经存在。
由于我将数据库中的值回显到表单字段中,因此每次推送更新时都会向我发出“用户已存在”错误。
如果没有回显该值,当我更新表单时,它会保存一个空的电子邮件地址,或filter_validate_Email
函数告诉我该电子邮件无效。
当我用复选框修复问题时我尝试并取得了成功,但这有点混乱和丑陋所以我正在尝试if else声明但没有运气。 关于如何管理这个的任何提示?
我发给你一些代码。
if(email_exists($_POST['email'])===($_POST['email'])){
}
if(email_exists($_POST['email'])){
$errors[] = 'email already registered';
}
如果$ _POST电子邮件等于$ _POST电子邮件,那我想到了这个陈述。
什么也不做,但如果电子邮件存在于email_exist函数中。 error email already exist.
if(empty($errors)){
set_profile_info($_POST['firstname'],
$_POST['lastname'],
$_POST['username'],
$_POST['email'],
$_POST['about']);
}
}
email_exists查询
function email_exists($email){
global $db;
$st = $db->prepare("SELECT * FROM user WHERE email=?" );
$st->bindParam(1, $email);
$st->execute();
if($st->rowCount() ==1){
return true;
}
else{
return false;
}
}
可能还有数百万种其他方式,但我无法想象其他任何方法。 感谢
答案 0 :(得分:1)
您应该在“电子邮件”字段中使用UNIQUE索引
ALTER TABLE yourtable
ADD UNIQUE INDEX EMAIL_UNIQUE(email);
然后当你尝试用电子邮件添加用户时,它会给你错误/异常取决于你使用的是什么sql引擎。
我注意到你使用全局变量这是一个坏习惯。最好创建Registry或Singleton来获取数据库对象。
http://www.phpeveryday.com/articles/OOP-Pattern-Registry-Introduction-Registry-Pattern-P240.html http://en.wikipedia.org/wiki/Singleton_pattern
你也做了一件奇怪的事。为什么你使用“===”,这意味着“EXACT”变量具有相同的类型,然后你将字符串与布尔值进行比较,它将始终返回false。更改
if(email_exists($_POST['email'])===($_POST['email'])){
到
if(email_exists($_POST['email'])==($_POST['email'])){
或
if(email_exists($_POST['email'])===((bool)$_POST['email'])){
变化
if(email_exists($_POST['email'])===($_POST['email'])){
}
if(email_exists($_POST['email'])){
$errors[] = 'email already registered';
}
到
$emailExists = email_exists($_POST['email'])
if(emailExists == $_POST['email']){
//doing your stuff when email exists
}
if(emailExists){
//doing other stuff when email exists
$errors[] = 'email already registered';
}
当你改变它时,调用数据库的函数只会被调用一次。