2017-05-19 48 views
0

我知道这已被问了很多,而且我已经搜索并且真正尝试了这一切。我非常接近,但无法实现。PHP/MySQL - 电子邮件验证不起作用

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

<?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查询(用户名/ usermail),以及如果显示用户名错误,电子邮件错误将只显示。

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

我花了太多时间试图让这个工作,我慢慢失去了我的想法。

任何迹象都会是大大赞赏...!

谢谢......

+0

使用fetchRow如果($行[ '用户名'] == $的用户名){}如果($ row ['useremail'] == $ usermail){} – JYoThI

+0

我不使用PDO很多,但不fetchColumn只检索第一列,你的结果集中哪一列始终是用户名列? –

+0

你需要在'用户名'部分 –

回答

2

FetchColumn返回第一列值。您需要使用提取。像

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

后再次调用fetchColumn'非常感谢你......这确实有诀窍!现在就像魅力一样。谢谢。 – needtobreathe

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.'; 
} 
+0

哈!我没有看到你的编辑信息!是的,这是解决方案,它的工作原理!感谢您花时间提供帮助。 – needtobreathe

+0

我认为你使用了我的旧版本。尝试我更新的答案 – JYoThI

+0

作品像一个魅力,谢谢! – needtobreathe