【发布时间】:2017-12-17 03:55:32
【问题描述】:
我有这个 php 代码,它根据 ajax 发送的 3 个变量更新我的 MySQL 数据库中的一行,但返回一个 http 500 错误:
<?php
$dbname = 'xxxxxxxxxx';
$dbuser = 'xxxxxxxxxxxx';
$dbpass = 'xxxxxxxxxxxxx';
$dbhost = 'xxxxxxxxx';
$link = mysql_connect($dbhost, $dbuser, $dbpass) or die("Unable to Connect to '$dbhost'");
$db_selected = mysql_select_db($dbname, $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
$topparent = $_POST['name'];
$column = $_POST['column'];
$value = $_POST['value'];
$sql = "UPDATE reloaded SET" . $column . " = '" .$value . "'WHERE top_parent = '" . $name ."';
$retval = mysql_query( $sql, $link );
if(! $retval ) {
die('Could not create table: ' . mysql_error());
}
echo "success\n";
mysql_close($link);
?>
我的 jquery js 就是这个。变量正确传递(尝试使用警报):
function updatedb(a,b,c){
$.ajax({
url: "updatedb.php",
type: 'POST',
data: ({name:a,column:b,value:c}),
success: function(msg) {
alert('DB updated');
}
});
};
知道为什么它会返回错误吗?我花了一些时间检查代码,尝试了不同的变体,但似乎无法弄清楚。
【问题讨论】:
-
在你的成功函数中,写
console.log(msg) -
(1) 您在
$sql中缺少报价。 (2)$sql中有语法问题,因为SET后面没有空格。 (3) 你对sql注入很开放。您应该将您的列列入白名单并清理您的数据stackoverflow.com/questions/60174/… -
您使用的是哪个版本的 PHP?,mysql_* 自 PHP 7 起已被弃用
-
@Sean 那篇关于注射的帖子对我来说有点复杂,还有很多东西要学。仅添加一个 if 语句检查一组固定值是否足以保护数据库?
标签: javascript php jquery mysql ajax