1

我正在运行一个 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 脚本。我没有收到error来自 AJAX 的回调,所以我想这运行正常吗?

<?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作为变量时,一切都运行良好。

当我复制INSERT参数但它在具有适当值的 CMD 中时,它工作正常。

4

3 回答 3

3

问题是您的 sql 有 6 个字段,但只给出了 5 个值。你失踪了$conv5rate

于 2013-01-25T17:59:35.727 回答
0

这对我来说似乎是个问题:

$query = "INSERT INTO singleprop.jos_rates(varate, fharate, usdarate, convfifteen, convfive, convtwenty)VALUES('" . $varate . "', '" . $fharate . "', '" . $usdarate ."', '" . $conv15rate . "', '" . $conv20rate . "');";

您指定 6 列,但只给它 5 个值。我相信这是插入的 SQL 语法错误。看起来您缺少 $conv5rate 条目。

于 2013-01-25T18:03:47.833 回答
0

此处查看data传递给 ajax 的设置对象的属性。如果你使用它,你可以让你的 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 扩展并将被删除。

于 2013-01-25T18:14:14.350 回答