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-инъекций не волнует.

0

Решение

Ваш код подразумевает, что вы ожидаете $_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.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]