【发布时间】:2014-11-03 16:46:13
【问题描述】:
我有一个切换到运行 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 已经贬值,但是,没有资源可以重写系统,而且它位于 Intranet 上,因此无需担心 SQL 注入。
【问题讨论】:
-
尝试转储
$sqldata和$sql。他们有什么价值观?尝试在 mysql 中直接运行echo $sql的输出。它在说什么? -
乍一看,我没有发现任何兼容性问题。也许你没有启用
mysql扩展? -
我敢打赌 (a) 问题在于 PHP 5.3 中的
magic_quotes_gpc已关闭,并且 (b) 您有一个巨大的 SQL 注入漏洞,这应该是您主要关心的问题。 -
此代码在每个页面上运行以规避magic_quotes 的折旧。 foreach($_POST as $key => $val){ $_POST[$key] = addlashes($val); }
-
@lolka_bolka - ["editinvoice"]=> NULL 的值