我正在运行一个AJAX调用,它将一些变量传递给PHP脚本,该脚本应该INSERT
到表中。由于我不知道的原因,不是吗。
AJAX调用取得了成功,因此可能会出现问题。
$('#rate_button').click(function(){
var varate = $('#u_varate').val(),
fharate = $('#u_fharate').val(),
usdarate = $('#u_usdarate').val(),
conv15rate = $('#u_conv15rate').val(),
conv5rate = $('#u_conv5rate').val(),
conv20rate = $('#u_conv20rate').val();
$('#varate').val(varate);
$('#fharate').val(fharate);
$('#usdarate').val(usdarate);
$('#conv15rate').val(conv15rate);
$('#conv5rate').val(conv5rate);
$('#conv20rate').val(conv20rate);
var rates = $('#rates').serialize();
rurl = 'http://www.nexthometown.com/components/com_singleprop/views/singleprop/tmpl/scripts/rates.php?' + rates;
$.ajax({
url: rurl,
success: function(){
$('#success').fadeIn(500).delay(500).fadeOut(500);
},
error: function(){
alert('Oopsy!');
}
});
});
AJAX函数调用的PHP脚本。我没有收到来自AJAX的error
回调,所以我猜这可以运行吗?
<?php
$link = mysql_connect('localhost','user','pass');
$varate = $_GET['varate'];
$fharate = $_GET['fharate'];
$usdarate = $_GET['usdarate'];
$conv15rate = $_GET['conv15rate'];
$conv5rate = $_GET['conv5rate'];
$conv20rate = $_GET['conv20rate'];
$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . $varate . "', '" . $fharate . "', '" . $usdarate ."', '" . $conv15rate . "', '" . $conv20rate . "');";
$result = mysql_query($query);
mysql_close($link);
?>
此外,当我在浏览器中运行脚本本身并使其echo
为valiables时,Everything运行良好。
当我复制INSERT
参数但它在具有适当值的CMD中时,它可以正常工作。
答案 0 :(得分:3)
问题是你的sql有6个字段但只给出了5个值。您遗失了$conv5rate
。
答案 1 :(得分:0)
这对我来说似乎是个问题:
$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . $varate . "', '" . $fharate . "', '" . $usdarate ."', '" . $conv15rate . "', '" . $conv20rate . "');";
您指定了6列但只给它5个值。我认为这是插入的SQL语法错误。看起来你错过了$ conv5rate条目。
答案 2 :(得分:0)
查看您传递给ajax here的设置对象的data
属性。如果你使用它,你可以使你的JS代码更简单:
$('#rate_button').click(function(){
var data = {varate:$('#u_varate').val(),
fharate:$('#u_fharate').val(),
usdarate:$('#u_usdarate').val(),
conv15rate:$('#u_conv15rate').val(),
conv5rate:$('#u_conv5rate').val(),
conv20rate:$('#u_conv20rate').val()
};
rurl = 'http://www.nexthometown.com/components/com_singleprop/views/singleprop/tmpl/scripts/rates.php';
$.ajax({
url: rurl,
type:'GET',
data:data,
success: function(){
$('#success').fadeIn(500).delay(500).fadeOut(500);
},
error: function(){
alert('Oopsy!');
}
});
});
此外,当您进行SQL查询时,您应该清理传递给它的变量。否则,您的代码将打开以进行sql注入。 你至少可以这样做:
$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . mysql_real_escape_string($varate) . "', '" . mysql_real_escape_string($fharate) . "', '" . mysql_real_escape_string($usdarate) ."', '" . mysql_real_escape_string($conv15rate) . "', '" . mysql_real_escape_string($conv5rate) . "', '" . mysql_real_escape_string($conv20rate) . "');";
以下是有关该功能的更多信息:http://php.net/manual/en/function.mysql-real-escape-string.php
另外,为了将来,建议使用PDO,因为不推荐使用mysql扩展名并将其删除。