PHP 5.3动态数组坏了

时间:2014-11-03 16:46:13

标签: php arrays php-5.3

我有一个已经切换到运行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注入令人担忧。

1 个答案:

答案 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。

时,您仍然可以找到解决方法