1

「ユーザー」と「コメント」の 2 つの入力フィールドがあり、AJAX を使用してユーザー入力を非同期に保存したいので、更新しません。ここまでDBに新しい行を追加してもらったのですが、なぜか空です。その理由は、値を正しく追加していないためだと思います。

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);
?>
4

2 に答える 2

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_* ライブラリは非推奨です。新しい開発には PDO や MySQLi などの最新の API を使用する必要があります。このライブラリを使用しているため、SQL インジェクションのために投稿データをエスケープする必要があります。

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

最新の API を使用すると、手動で何かをエスケープする必要のないパラメーター化されたクエリを実行できます。

また、気づいたので、次の行を削除します。

mysql_query($query, $con);

その前の行で既にクエリを実行しています。この行は役に立たず失敗します。最初のクエリの結果リソースを使用して別のクエリを実行しようとしています。

于 2012-11-19T14:53:59.037 に答える
0

Jquery について少し調べてみると、javascript/Ajax の部分で大いに役立ちます。

ここでの問題は、AJAX 呼び出しで変数を送信していないことです。次のようなものが必要です。

ajaxRequest.send(postvariables);
于 2012-11-19T14:54:45.760 に答える