PHP / MySQL - 电子邮件验证不起作用

时间:2017-05-19 10:09:08

标签: php mysql pdo

我知道这已经被问了很多,而且我已经搜索过并且真的尝试了所有这些。我真的很接近,但无法让它发挥作用。

我试图检查用户名或用户邮件是否已被使用并相应地显示错误。

<?php
if (isset($_POST['register'])) {

    try 
    {
        $checkValidity = $connect->prepare('SELECT username, usermail FROM users WHERE username = :username OR usermail = :usermail');
        $checkValidity->bindValue(':username', $username);
        $checkValidity->bindValue(':usermail', $usermail);
        $checkValidity->execute();
        $row = $checkValidity->fetchColumn();

        if ($row == $username) {
            $errName = 'This username is already taken.';
        } 
        if ($row == $usermail) {
            $errMail = 'Email already in use.';
        }
    }
    catch(PDOException $e)
    {
        // print $e->getMessage();
    }
}
?>

它适用于用户名,但对于我的生活,我无法收到电子邮件错误...

我尝试单独的SELECT查询(用户名/用户邮件),如果用户名错误显示,则仅显示电子邮件错误。

电子邮件错误永远不会单独显示。

我花了太多时间试图让它发挥作用,我慢慢失去理智。

任何迹象都会非常赞赏......!

谢谢...

2 个答案:

答案 0 :(得分:2)

FetchColumn返回第一列值。你需要使用fetch。喜欢

$row = $checkValidity->fetch();
if ($row['username'] == $username) {
    $errName = 'This username is already taken.';
} 
if ($row['usermail'] == $usermail) {
    $errMail = 'Email already in use.';
}

答案 1 :(得分:0)

  

如果使用PDOStatement :: fetchColumn()来检索数据,则无法从同一行返回另一列。

您的提取用户名只需要使用fetch()来获取整行并进行比较

$row = $checkValidity->fetch();

 if ($row['username'] == $username)  {
    $errName = 'This username is already taken.';
} 
 if ($row['useremail'] == $useremail)  {
    $errMail = 'Email already in use.';
}