2011-12-18 151 views
-2

我有一個簡單的註冊表單,它使用jQuery和Ajax來驗證用戶輸入。當Ajax嘗試對電子郵件地址進行服務器端驗證(例如)並連接到數據庫時,它不會通過$msg返回結果。通過Ajax傳遞MySQL

function checkUser() { 
    $search = mysql_query("SELECT * FROM users WHERE username = '" . $username . "'"); 
    $match = mysql_num_rows($search); 

    if($match > 0) { 
     $msg .= 'Username already in use, please try another.'; 
    } 
} 

這裏是JS:

function send(datastr) { 
    $.ajax({ 
     type: "POST", 
     url: "./scripts/addmember.php", 
     dataType: "text", 
     data: datastr, 
     cache: false, 
     success: function(html) { 
      $("#errordiv").fadeIn("slow"); 
      $("#errordiv").html(html); 
      //setTimeout('$("#errordiv").fadeOut("slow")',2000); 
     } 
    }); 
} 
+1

嘿只是,如果你想知道爲什麼向下票(不是我),這是可怕的應用程序設計通過SQL通過JS/Ajax。你可能想重新考慮你的設計。 – 2011-12-18 00:38:08

+0

如果沒有addmember.php,除了一般性建議外,很難提供任何內容。 – Purefan 2011-12-18 00:41:13

+0

@DamenTheSifter和@因爲這個原因downvoted的人:標題是錯誤的。沒有SQL通過Ajax傳遞。第一個片段是* PHP *。它可能不會被SQL注入攻擊,因爲我們只能看到變量'$ username'。你在逃避它,對吧? – Ryan 2011-12-18 01:08:03

回答

3

在你checkUser()功能你使用$msg$username,這是沒有定義的。你要麼把這些留下,要麼你對編程很陌生。

在PHP中,變量通常只有一個「範圍」。這意味着變量$msg在函數中是不可訪問的,除非在那裏定義它。

在JavaScript中,這是有效的:

var msg = ""; 
function appendToMsg(text) { 
    msg += text; 
} 
appendToMsg("test"); 

在PHP中,這是不是:

$msg = ""; 
function appendToMsg($text) { 
    $msg += $text; 
} 
appendToMsg("test"); 

,這將拋出一個通知PHP公告:未定義的變量:味精。功能appendToMsg將只知道$text,而不是$msg

小JavaScript代碼的正確PHP表示爲:

$msg = ""; 
function appendToMsg(&$msg, $text) { 
    $msg += $text; 
} 
appendToMsg($msg, "test"); 

更多關於變量的作用域:

0

您需要echo輸出:

echo 'Username already in use, please try another.'; 
0

你的$味精變量設置文本之後,這樣寫:

echo $msg;