У меня есть устаревшая система, которая перешла на запуск 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-инъекций не волнует.
Ваш код подразумевает, что вы ожидаете $_POST['editinvoice']
быть массивом. Но вы сказали, что вы добавили где-то в качестве замены magic_quotes_gpc
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
Предупреждение: addlashes () ожидает, что параметр 1 будет строкой…
Предупреждение PHP: assert (): утверждение не удалось
Вы также можете найти такое предупреждение в журнале ошибок.
Ваш код опирается на magic_quotes_gpc=on
, Так что включите его снова и удалите этот сломанный обходной путь. Вы все еще можете найти обходной путь при обновлении до> = PHP-5.4.
Других решений пока нет …