2013-09-12 5 views
3

Некоторое время эта ошибка возникала и не могла найти окончательных ответов на ее устранение. Я попытался удалить цитаты из $key в строке 59, но безрезультатно.PHP Замечание: Ошибка преобразования массива в строку

if (!get_magic_quotes_gpc()) { 
    if (isset($_POST)) { 
     foreach ($_POST as $key => $value) { 
      $_POST['$key'] = trim(addslashes($value)); 
     } 
    } 

    if (isset($_GET)) { 
     foreach ($_GET as $key => $value) { 
      $_GET[$key] = trim(addslashes($value)); 
     } 
    } 
} 

ЛИНИЯ 59

$_POST['$key'] = trim(addslashes($value)); 

Ошибка на экране

Примечание: Массив для преобразования строки в C: \ Inetpub \ виртуальных доменов \ domain.com \ httpdocs \ библиотека \ config.php на линия 59

+0

не $ _POST ['key'] ?? , в любом случае ваше значение post представляет собой массив. Вот почему вы получаете ошибку –

+0

@Sudhir, поэтому просто переименуйте '$ value' на что-то еще? – ngplayground

+0

Похоже, очень плохая практика. Если вам нужно избегать ввода пользователя (предположим, что вы используете MySQL), прочитайте о [подготовленных заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) – Touki

ответ

2

Проверьте это массив, прежде чем назначить его

$_POST[$key] = !is_array($value) ? trim(addslashes($value)) : ''; 
    //^ Remove the quotes here       //^Do something 
                  // Instead of 
                  // Using empty 
+0

Просто используя это, похоже, избавиться от ошибки. Что вы предлагаете сделать, а не оставлять его пустым? – ngplayground

+0

@Beardy, Создайте обработчик обоих случаев, один из которых является массивом, а другой - строкой. – Starx

+0

Я использовал этот '$ _POST [$ key] =! Is_array ($ value)? trim (addslashes ($ value)): $ value; ' – ngplayground

0

Я думаю, вы должны использовать этот код $_POST[$key] = $value; вместо того, чтобы использовать эту $_POST['$key'] = trim(addslashes($value));

или сделать чек, если значение в массиве или нет

+0

А как насчет котировок вокруг '$ key', а? – Havelock

+0

Это должно быть '$ _POST [$ key] = $ value;' Я отредактировал свой ответ. Спасибо, что указали! – vanurag

0

В соответствии с PHP.net функция addslashes() принимает параметр String в качестве параметра. Проверьте, какой тип значения $. Если это массив, то addlashes() может вызывать ошибку.

PS: Вы должны использовать $ _POST [$ key], а не $ _POST ['$ key'], если вы хотите использовать значение $ key как индекс массива $ _POST.

0

ли это:

foreach ($_POST as &$value) { 
    $value = is_array($value) ? 
     array_map(function($x) { return trim(addslashes($x)); } : 
     trim(addslashes($value)); 
} 

Однако, это все еще может потерпеть неудачу, если любой из ваших параметров многомерные массивы. Как упоминалось в комментариях, правильным решением является использование подготовленных запросов с параметрами, а не интерполяция строк в SQL.

Смежные вопросы