我有一个已经切换到运行PHP 5.3的遗留系统。出现的问题是设计用于编辑表中动态生成的值的代码。 editinvoice数组没有任何价值。有什么想法吗?
//Line Item x:<input type="text" name="editinvoice[lineitem_text_x]">
//Value x:<input type="text" name="editinvoice[lineitem_amount_x]">
//edit values in the invoice table
$sqldata = array();
foreach ($_POST['editinvoice'] AS $k => $v)
{
$sqldata[] = "$k = '$v'";
}
$sql = "UPDATE db.invoices SET ".implode(',', $sqldata)." WHERE (booking_id = '$booking_id') LIMIT 1";
mysql_query($sql);
我知道mysql已被折旧,但是没有资源可以重写系统并且它在内部网上,所以没有SQL注入令人担忧。
答案 0 :(得分:2)
您的代码暗示您希望$_POST['editinvoice']
成为一个数组。但是你说你添加了某个地方作为magic_quotes_gpc
a
foreach($_POST as $key => $val){
$_POST[$key] = addslashes($val);
}
那么猜猜数组$_POST['editinvoice']
发生了什么?
<?php
$expected = array("foo" => "bar");
$_POST["editinvoice"] = addslashes($expected);
assert ($expected == $_POST["editinvoice"]); // it's NULL
警告:addslashes()期望参数1为字符串...
PHP警告:assert():断言失败
您也可以在错误日志中找到这样的警告。
您的代码依赖于magic_quotes_gpc=on
。所以再次打开它并删除那个破解的解决方法。当您更新到&gt; = PHP-5.4。