2013-06-12 81 views
1

Hy我正在嘗試驗證註冊表單中的電子郵件地址。我想檢查地址是否存在於數據庫中;檢查數據庫中是否已存在電子郵件jquery + php

我有以下功能:

function validateEmailRepeat(){ 
     // check if email exists in the database; 
      var emailVal = $('#email').val(); 
      // assuming this is a input text field 

      $.post('check_email.php', {'email' : emailVal}, function(data) { 
        if(data==1) 
         { 
         email.addClass("error"); 
         emailInfo.text("Adress exists"); 
         emailInfo.addClass("error"); 
         dataExist=1; 
          } 

        else { 

         email.removeClass("error"); 
         emailInfo.text("Valid adress"); 
         emailInfo.removeClass("error"); 
         dataExist=0; 
          } 
         }); 

         if(dataExist==1) 
         return false; 
         else 
         return true; 

        } 

的check_email.php看起來是這樣的:

require_once('db.php'); 

if (isset($_POST['email'])){ 
$email=mysqli_real_escape_string($con,$_POST['email']); 
$sql = "SELECT * FROM users WHERE `username`='".$email."'"; 
$select=mysqli_query($con,$sql) or die("fail"); 
$row = mysqli_num_rows($select); 

if ($row >0) { 

    echo 1; 
}else echo 0 ; 

} 
else 
echo "post error"; 

我是新在此。所以,不要強硬。提前致謝。

LE:對不起!我忘了問題... 問題是,如果我在函數形式$ .post 之外定義var dataExist並且如果我讓它像現在在函數中那樣我的函數返回true我得到「dataExist未定義」錯誤並返回true

樂:在PHP返回我想預期的1個0就是這個樣子..

LE: 好像定義

VAR dataExist = 0;

外功能validateEmailRepeat()解決了這個問題。

如果有另一種更優雅的方式請告訴我,因爲這對我來說似乎有點愚蠢。

+3

你已經告訴我們你在做什麼,但是這裏有什麼問題? – MrCode

+3

請注意:[email protected],[email protected],[email protected],[email protected]等。所有電子郵件都是一樣的 –

+0

您忘了實際提問了。你寫的代碼有一些可觀察的問題嗎?它不像預期的那樣行事?有錯誤嗎?你以什麼方式尋求幫助? – David

回答

2

問題是你不能將值返回到被調用的函數,因爲ajax異步工作。

   function validateEmailRepeat(){ 
       // check if email exists in the database; 
        var emailVal = $('#email').val(); 
       // assuming this is a input text field 

       $.post('check_email.php', {'email' : emailVal}, function(data) { 
        if(data==1){ 
         email.addClass("error"); 
         emailInfo.text("Adress exists"); 
         emailInfo.addClass("error"); 
         dataExist=1; 
        }else{ 
         email.removeClass("error"); 
         emailInfo.text("Valid adress"); 
         emailInfo.removeClass("error"); 
         dataExist=0; 
        } 
         $('#some_input').val(dataExist); 
         validateUserName(); 
        }); 
       } 

       function validateUserName() { 
        var input = $('#some_input').val(); 
        if (input) { 
         alert("This username is already taken");// whatever 
        } else { 
         // whatever 
        } 

       }; 
+0

中找到電子郵件時返回false,這比我所做的更好?它肯定看起來更好,但爲什麼它比全局聲明變量dataExist更好? –

+0

問題是:您無法獲取ajax請求之外的dataExist值,因爲該原因是回調函數「validateUserName();」現在我改變了這個:ValidateUserName(dataExist);在回調和函數如下:function ValidateUserName(xxx){if(xxx){alert('already taken))} else {// whatever}}對不起我的英國人...祝你好運 –

+0

感謝您的幫助和你的時間來解釋。我明白了 –

0

您正在比較用戶名和電子郵件地址。這是你的數據庫如何工作?

$ sql =「SELECT * FROM users WHERE username ='」。$ email。「'」;

我敢打賭,你在數據庫中有一個字段用於郵件本身,否則我建議你這樣做。查詢應該如下所示:

$sql = "SELECT * FROM users WHERE email = '".$email."'"; 

沒有列的單引號。

+0

的PHP代碼工作得很好。在數據庫中的用戶名=電子郵件..問題是與功能。我不能讓它在數據庫 –

相關問題