2011-05-08 92 views
2

我遇到了使用ajax和php的麻煩。我想要做的是調用一個ajax函數,它從表單的輸入中獲取一個值,並檢查該電子郵件是否存在於數據庫中。這是我目前的javascript:Ajax如何與PHP一起工作?

//Checks for Existing Email 
function checkExisting_email() { 
    $.ajax({ 
     type: 'POST', 
     url: 'checkExist.php', 
     data: input 
    }); 

emailExists = checkExisting_email(); 

//If it exists 
if (emailExists) { 
    alert("This email already exists!"); 
} 

不幸的是,我不能讓我的警報熄滅。在我的PHP函數中,它檢查輸入是用戶名還是電子郵件(僅用於我的目的,所以你知道),然後在任一列中查找它。如果找到,則返回true,如果沒有,則返回false:

include ('func_lib.php'); 
connect(); 
check($_POST['input']); 

function check($args) 
{ 
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i"; 
    if (!preg_match($checkemail, $args)) { 
     //logic for username argument 
     $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     //logic for email argument 
     $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

} 

所以我的問題是,如何將這些收益AJAX迴應,我該如何作出相應的AJAX功能?主要是,爲什麼這不起作用?

任何幫助,非常感謝。謝謝!

+0

焦慮問題:當你將$ _POST變量直接傳遞給你的MySQL查詢,而不使用像mysql_real_escape_string()這樣的轉義函數時,你的PHP可以適應XSS攻擊。 – cmbuckley 2011-05-08 20:49:47

+0

Buckley,我認爲你的意思是sql注入,因爲xss是一個依賴用戶運行任意javascript的前端功能。 – BRampersad 2011-05-08 21:12:25

+0

感謝您糾正我的胡言亂語! – cmbuckley 2011-05-08 22:44:31

回答

1

您需要將success選項添加到您的Ajax請求中,這是在XHR成功時執行的JS函數。查看jQuery documentation瞭解更多信息。

沒有運行腳本,我想你會發現$_POST['input']是空的;你需要傳遞你的數據,像data: {'input': input}這樣做。

您的PHP還需要將一些內容返回給腳本;考慮改變您的來電check()到這樣的事情:

echo (check($_POST) ? 'true' : 'false'); 

現在可以檢查在JavaScript中的內容。

+0

感謝您的回覆。所以如果我在那裏取得成功,它會是什麼樣子?從服務器返回的數據將是什麼數據?基本上,我只需要ajax調用返回true或false,但我將'emailExists'設置爲'undefined'。 – Sawyer 2011-05-08 20:51:54

+0

默認情況下,Ajax調用不會返回任何內容,因爲它是異步的。你需要創建一個回調函數,如:'function callback(data,status,xhr){if(data =='true'){alert('Already exists!'); }}'然後將'success:callback'添加到'.ajax'調用中。上面的文檔鏈接有一些關於異步操作的更多信息。 – cmbuckley 2011-05-08 20:59:11

+0

我明白你的意思了,我已經試過了。我的麻煩是讓該數據變量返回true。 check($ _ POST ['input']); 函數檢查($ args).... 這就是我的麻煩所在,我不確定php如何與ajax交互,那麼我的變量如何被饋送到php,然後返回?它返回true還是試圖返回一個變量?這麼多問題......重點是,我甚至不認爲成功被稱爲是因爲它不成功! 再次感謝您的回覆。 ;) – Sawyer 2011-05-08 21:06:56

1

基本上ajax是一個與你的服務器握手的例程。

阿賈克斯:

$.post('yoursite.com/pagewithfunction.php', 
    {postkey1:postvalue1, postkey2:postvalue2...}, 
    function (response) { 
     // response is the data echo'd by your server 
    }, 'json' 
); 

pagewithfunction:

yourFunction(){ 
    $var1 = $_POST['postkey1'];.... 
    $result = dosomething($var1..); 
    echo json_encode($result); // this is passed into your function(response) of ajax call 
} 

所以在$。員額你有功能PHP頁面的URL,{VAR:VAL}是後數據,以及函數(響應)是處理從服務器回顯的數據的位置 - 變量response是回顯的內容。