通过AJAX将用户输入插入DB会导致空字段

时间:2012-11-20 17:49:00

标签: php ajax forms

我有一个PHP脚本执行插入部分如下(我知道,没有PDO或mysqli,这只是我的个人测试):

<?php
  $user = $_POST['user'];
  $comments = $_POST['comment'];

  $con = mysql_connect("localhost","root","") or die(mysql_error());
  mysql_select_db('localh',$con);

  $query = mysql_query("INSERT INTO content (Title, Article)
    VALUES('$user', '$comments')");

  if(!$query){die(mysql_error());}

  mysql_close($con);
?>

如果我在表单操作中使用此脚本,它将正常工作,输入值将添加到数据库中。

以下是表格:

<form>
  <p>User: <input type="text" id="user" /></p>
  <p>Comment:<input type="text" id="comment" /></p>
  <input type="button" id="submit" onClick="insertData();" />
</form>

AJAX部分,位于头标记之间:

function insertData(){
  var ajaxRequest = new XMLHttpRequest();

  var usr = document.getElementById("user").value;
  var cmnt = document.getElementById("comment").value;

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

结果将是数据库中的空行。我不知道为什么会这样,我很无能为力。

3 个答案:

答案 0 :(得分:2)

实际上,这是我实际建议有人使用jQuery的唯一非常具体的案例之一。

AJAX可能是最模糊的实现功能。每个浏览器都有关于其实现的怪癖。 jQuery可以用来消除那些跨浏览器的不兼容性。

<强> jQuery $.ajax documentation page

答案 1 :(得分:1)

您实际上并未将变量的密钥发送到脚本:

ajaxRequest.send(usr, cmnt);

因此,您的$_POST数组不会包含user也不会包含comment

虽然切换到jQuery可能是一个好主意,但您可以发送变量,如:

var vars = encodeURI("user="+usr+"&comment="+cmnt);
ajaxRequest.send(vars);

但是你必须测试它,因为我通常使用jQuery来处理我的ajax请求。

答案 2 :(得分:1)

检查您是否在$_POST可靠的usercomments数据中,只需在您的php文件中添加类似的内容

  

的print_r($ _ POST);出口();

如果您在服务器端没有它们,请检查ajax

如果可以检查你的mysql查询: