更新数据库,如果值=== $ _POST值,如果不存在值

时间:2013-04-17 12:56:31

标签: php mysql pdo

那基本上就是我要做的事。

我有一个保存到数据库中的表单,现在如果这个情况下的电子邮件已经存在,它会给我一条错误消息“用户已经存在。

由于我将数据库中的值回显到表单字段中,因此每次推送更新时都会向我发出“用户已存在”错误。 如果没有回显该值,当我更新表单时,它会保存一个空的电子邮件地址,或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;
    }
} 

可能还有数百万种其他方式,但我无法想象其他任何方法。 感谢

1 个答案:

答案 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';
}

当你改变它时,调用数据库的函数只会被调用一次。