【发布时间】:2013-04-12 23:48:47
【问题描述】:
FIXED! See bottom for solution.
我在这方面遇到了令人难以置信的困难。我已经做了好几个星期了。我正在尝试使用 AJAX 将新记录添加到 mysql 中。 PHP 文件 100% 工作,但我似乎无法让 AJAX 与我的表单一起使用,该表单具有发送数据的 POST 方法。这是我第一次在 StackOverflow 上,所以请放轻松。代码如下:
HTML 代码:
<form name='addform' method='POST' >
<td></td>
<td><input type='text' id='cname'></td>
<td>
<select id='fuel'>
<option value='Petrol'>Petrol</option>
<option value='Diesel'>Diesel</option>
<option value='Hybrid'>Hybrid</option>
<option value='LPG'>LPG</option>
</select>
</td>
<td>
<select id='trans'>
<option value='Automatic'>Automatic</option>
<option value='Manual'>Manual</option>
<option value='Semi-Auto'>Semi-Auto</option>
</select>
</td>
<td><input type='text' id='engine'></td>
<td><input type='text' id='doors'></td>
<td><input type='text' id='total'></td>
</tr>
<tr>
<td><input type='submit' value='Add Car' onclick='addRecord()'></td>
...
我有一个外部 .js 文件来处理 Javascript:
function addRecord(){
if (
document.addform.cname.value == ""
|| document.addform.fuel.value == ""
|| >document.addform.trans.value == ""
|| document.addform.engine.value == ""
|| document.addform.doors.value == ""
|| document.addform.total.value == ""
)
{
alert ("Empty >field(s) - Cannot create record");
return;
}
var mydata = null;
// Mozilla/Safari
if (window.XMLHttpRequest)
{
xmlHttpReq2 = new XMLHttpRequest ();
}
// IE
else if (window.ActiveXObject)
{
xmlHttpReq2 = new ActiveXObject ("Microsoft.XMLHTTP");
}
var cname = document.getElementById('cname').value;
var fuel = document.getElementById('fuel').value;
var trans = document.getElementById('trans').value;
var engine = document.getElementById('engine').value;
var doors = document.getElementById('doors').value;
var total = document.getElementById('total').value;
mydata = '?cname='+cname+'&fuel='+fuel+'&trans'+trans+'&engine'+engine+'&doors'+doors+'&total'+total;
alert ("To Server (Add New Record):\n\nadd.php" + mydata);
xmlHttpReq2.open('POST', "add.php" +mydata, true);
xmlHttpReq2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttpReq2.send(null);
xmlHttpReq2.onreadystatechange = addRecordCallback;
}
PHP 代码:
<?php
$link = mysql_connect ("194.81.104.27", "www", "www");
mysql_select_db ("xyz") or die(mysql_error());
$tot=$_POST[total];
$door=$_POST[doors];
$query = "INSERT INTO tbl
(ID, CARNAME, FUELTYPE, TRANSMISSION, ENGINESIZE, DOORS, TOTAL, AVAILABLE)
VALUES ('$_POST[cname]','$_POST[cname]', '$_POST[fuel]', '$_POST[trans]','$_POST[engine]', $door, $tot, $tot)";
$result = mysql_query($query);
mysql_close ($link);
?>
发生的情况是我将信息放入表单中,单击按钮,警报告诉我它确实从表单中获取了数据。但在那之后什么也没有发生。我认为由于某种原因,数据没有以正确的格式发送到 PHP 文件。
谢谢!
Solution was:
我设法让它工作了!部分问题是,就像@adeneo 说我没有onclick='addRecord(); return false;' 那样!我做的另一件事是删除表单的 id,不确定这是否有任何作用。我还像这样将“mydata”附加到 .send:xmlHttpReq2.send(mydata); 最后我不得不删除一个“?”它在 mydata 变量收集中的 cname 前面。所以它是mydata = '?cname='+cname+...,我不得不删除?。感谢大家的帮助!
【问题讨论】:
-
add.php是什么样的? -
还有一些参数在名称和值之间没有等号(在 mydata 中)
-
你愿意为 AJAX 尝试 jQuery 吗?
-
将数组键放在引号中(例如,
$_POST[total]应该是$_POST['total'])。 -
好吧,通过向该脚本发送一个简单的 POST 请求来删除整个数据库肯定很容易。一旦找出问题所在,您可能应该开始学习 PDO。