2012-11-19 42 views
1

我有2個輸入字段「用戶」和「評論」,我希望用戶輸入使用AJAX異步保存,所以不需要刷新。到目前爲止,我已經得到它添加一個新的行到數據庫,但由於某種原因它是空的。我相信原因是我沒有正確附加值。如何使用AJAX和PHP將數據添加到SQL數據庫

HTML(JS是在兩者之間的head標籤):

<p>User: <input type="text" id="userName" /></p> 
<p>Comment : <input type="text" id="comment" /></p> 
<input type="button" value="Submit" onclick="callServer();" /> 

JS:

function callServer(){ 
    var usr = document.getElementById("user").value; 
    var cmnt = document.getElementById("comment").value; 
    var ajaxRequest = XMLHttpRequest(); 

    ajaxRequest.open("POST", "insert.php", true); 
    ajaxRequest.send(null); 
} 

PHP:

<?php 
// Setting variables for the elements 
$user = $_POST['user']; 
$comment = $_POST['comment']; 

// Establishing connection and selecting db  
$con = mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db('local',$con); 

// Doing the query for the insert 
$query = mysql_query("INSERT INTO content (Title, Article) 
VALUES('$user', '$comment')"); 

mysql_query($query, $con); 
mysql_close($con); 
?> 
+0

使用PDO其他變線至$查詢=請求mysql_query(「INSERT INTO內容(標題,文章) VALUES('「。$ user。」','「。$ comment。」')「); –

+2

你的ajax調用實際上並沒有發送任何東西。你正在做一個POST,但實際上沒有包含任何數據。 '.send(null)'<---你發送一個空值作爲你的數據。 –

+0

您是否檢查了$ POST以查看它是否可用。你輸出任何mysql錯誤? – wesside

回答

1

你輸入ID爲userName,但你的目標user

更改爲:

var usr = document.getElementById("userName").value; 

您還發送null與Ajax請求,你應該發送您的數據:

var params = "user=" + encodeURIComponent(usr) + "&comments=" + encodeURIComponent(cmnt); 
ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
ajaxRequest.send(params); 

此外,您應包括Content-Type頭 - 如以上。

最後,mysql_ *庫已被棄用,您應該使用現代API(如PDO或MySQLi)進行任何新的開發。因爲你使用這個庫,你需要逃跑後的數據進行SQL注入:

$user = mysql_real_escape_string($_POST['user']); 
$comment = mysql_real_escape_string($_POST['comment']); 

如果使用先進的API,你可以做不需要你手動逃避任何參數化查詢。

而且剛剛注意到,刪除此行:

mysql_query($query, $con); 

您已經執行之前,該行查詢。這一行是無用的,會失敗,它試圖使用第一個查詢的結果資源執行另一個查詢。

0

我會開始尋找一點Jquery,它對javascript/Ajax部分有很大的幫助。

這裏的問題是,你永遠不會發送變量的AJAX調用,你需要的東西是這樣的:

ajaxRequest.send(postvariables); 
相關問題