INSERT使用PHP和AJAX的问题

时间:2013-01-25 17:56:53

标签: php mysql ajax

我正在运行一个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中时,它可以正常工作。

3 个答案:

答案 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扩展名并将其删除。