【问题标题】:Check If Email exist or not on my database [duplicate]检查我的数据库中是否存在电子邮件[重复]
【发布时间】:2017-07-26 10:49:02
【问题描述】:

我目前正在尝试创建一个注册表单。我的条件有一个小问题,可以让我知道用户输入的邮件是否存在于我的数据库中

添加用户可以正常工作,但是当我重新输入相同的邮件时,它会被添加到数据库中,而不必添加,因为邮件已经存在

这是我的代码:

JS AJAX:

$('#btn_submit').click(function() {
    /* Action on the event */
    //1. Récupération des données saisie dans les champs du formulaire
    var firstname = $('#firstname').val();
    var lastname = $('#lastname').val();
    var phone = $('#phone').val();
    var email = $('#email').val();

    // var fullValues = firstname + " - " + lastname + " - " + email + " - " + phone + " - " + adress + " - " + country;
    // alert(fullValues);


    //2. Appel Ajax pour envoyé et traité les données en méthod GUEST vers le fichier manageGuest.php
    $.ajax({
        data:{
            firstname: firstname,
            lastname: lastname,
            phone: phone,
            email:  email
        },
        url: '/core/manageGuest.php',
        dataType: 'text',
        type: 'GET',
        success:function(response){
            console.log("Email not Found ! Compte Created");
        },
        error:function(response){
            console.log("Email Found ! Try Again ");
        }
    })
});

PHP:

$conf= Conf::$databases['default'];
$connectionString= "mysql:host=". $conf['host'] .";dbname=". $conf['database'];

try {
/* 1. Connection à la base de donnée */
$db = new PDO($connectionString, $conf['login'], $conf['password']);
//set the PDO error mode to exception
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$lastname = $_GET['lastname'];
$firstname = $_GET['firstname'];
$email = $_GET['email'];
$tel = $_GET['phone'];


/* 2. verification si l'email existe  dans la BDD*/
$query = $db->prepare("SELECT email
                       FROM guest
                       WHERE email=:email");

$query->execute(array('email'=>$email));
$query->fetch(PDO::FETCH_OBJ);
$result = $query->fetch(PDO::FETCH_OBJ);

if(empty($result)){
    $query = $db->prepare("INSERT INTO guest (firstname, lastname , tel, email)
                           VALUES('$firstname','$lastname', '$tel', '$email')");
    $query->execute();
    echo "Le compte été créé";
} else {
    echo "Cette email existe déjà";
}}catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();}

Guest's table on my phpmyadmin

【问题讨论】:

标签: php mysql sql email pdo


【解决方案1】:

您可以在将电子邮件输入数据库之前检查电子邮件是否存在

function emailExist($email) {
    $db = new PDO($connectionString, $conf['login'], $conf['password']);

    $query = $db->prepare("SELECT email FROM users WHERE email = :email");
    $query->bindParam(':email', $email, PDO::PARAM_STR);
    $query->execute();

    if ($query->rowCount() == 1) {
        return true;
    } else {
        return false;
    }
}
if (emailExist($email)) {
    /* do something */
} else {
    /*register the user */
}

但不要忘记照顾函数内部的作用域变量

【讨论】:

  • 基本上,如果我理解正确的话,在 try {} catch {} 之前我有一个 emailExist 函数吗?而且我必须把我的 try {} catch {} 放在 if
  • 你可以先把你的 try{} catch 块放在函数内部,然后调用 $db 变量作为全局 $db;然后调用函数。
【解决方案2】:

你有两个“获取”,因此我想第二个是空的;)

【讨论】:

  • 感谢您的评论您想说“$result = $query->fetch(PDO::FETCH_OBJ);”没用?
  • 不,是那个之前的 fetch。
【解决方案3】:

我还没有测试它,但我认为你在那里做了很多获取,这对我来说是错误的。

应该是这样的:

$query = $db->prepare("SELECT email
                       FROM guest
                       WHERE email=:email");

$query->execute(array('email'=>$email));
if ($query->rowCount() > 0) {
    // There is exist record
} else {
    // Insert new record
}

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多