Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和AJAX插入的问题_Php_Mysql_Ajax - Fatal编程技术网

使用PHP和AJAX插入的问题

使用PHP和AJAX插入的问题,php,mysql,ajax,Php,Mysql,Ajax,我正在运行一个AJAX调用,它将一些变量传递给一个PHP脚本,该脚本应该插入到一个表中。因为我不知道的原因,不是吗 AJAX调用获得成功,因此可能会出现问题。 $('#rate_button').click(function(){ var varate = $('#u_varate').val(), fharate = $('#u_fharate').val(), usdarate = $('#u_usdarate').val(), conv15rate = $('#u_

我正在运行一个AJAX调用,它将一些变量传递给一个PHP脚本,该脚本应该
插入到一个表中。因为我不知道的原因,不是吗

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的
错误
回调,所以我想这运行正常吗?

<?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);
?>

问题是sql有6个字段,但只给出了5个值。您缺少
$conv5rate

这似乎是我的问题:

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

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

查看传递给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) . "');";
以下是有关该功能的更多信息:


另外,为了将来,建议使用PDO,因为mysql扩展已被弃用,将被删除

伙计,你需要转义你的值,因为你的代码对sql注入是完全开放的。你如何转义值?我对此不熟悉。在您的情况下,您使用的是不推荐使用的mysql_*函数,您应该更改这些函数。有关如何转义值的信息,请参见。然后看一下页面顶部的警告。我知道它已被弃用,但当我尝试使用
mysqli
替代它时,事情就停止了。因此我使用
substr
after
$\u GET
将每个字符的数量减少到7个字符。这是否足以保证安全?$conv5rate=$_GET['conv5rate'];你插入了这个值吗?我还研究了如何对我的数据值进行
.serialize
,但我喜欢在一个地方看到它们,这样我就知道要插入什么,而且我可以在需要时省略一些内容。另外,我实际上更新了隐藏值,而不是直接将值传递给服务器,因为我在其他地方使用这些值。但是谢谢你的提示!你不明白。将变量收集到隐藏字段中,然后用这些字段序列化表单。然后将收到的字符串添加到url。无用的工作。我答案中的代码添加了要在临时JS对象中传递到服务器上的变量。与隐藏字段相比,它更容易使用。而且更快。ajax调用中的这一行:
data:data,
将告诉jquery——获取该对象,序列化它,并传递给服务器。在服务器端,不会有任何更改。但您不需要大量隐藏字段。代码看起来更干净。我明白了,我只是用那些隐藏的字段来显示被修改的数据。嗯。对不起,我不清楚。只是指了一件我觉得很奇怪的事,我明白了。别担心。相信我,如果有人给我一个更好的方法做某事,我会毫不犹豫的。我从这个网站上得到了各种各样的好信息,大多数时候我甚至不需要发帖。