2017-05-19 76 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