Как решить ошибку PHP ' Примечание: преобразование массива в строку в...'


у меня есть PHP-файл, который пытается повторить a $_POST и я получаю сообщение об ошибке, вот код:

echo "<html>";
echo "<body>";
for($i=0; $i<5;$i++){
    echo "<input name='C[]' value='$Texting[$i]' " . 
         "style='background-color:#D0A9F5;'></input>";

}
echo "</body>";
echo "</html>";
echo '<input type="submit" value="Save The Table" name="G"></input>'

вот код, чтобы повторить сообщение.

if(!empty($_POST['G'])){
    echo $_POST['C'];
}

но когда код запускается я получаю ошибку, как:

Notice: Array to string conversion in 
C:xampphtdocsPHISFinalSubmissionOfTheFormPHP.php on line 8

что означает эта ошибка и как это исправить?

3 67

3 ответа:

когда у вас есть много HTML-входов с именем C[] то, что вы получаете в массиве POST на другом конце, является массивом этих значений в $_POST['C']. Так что когда вы echo то, что вы пытаетесь напечатать массив, так что все, что он делает, это печать Array и уведомления.

чтобы правильно напечатать массив, вы либо перебираете его и echo каждый элемент, или вы можете использовать print_r.

кроме того, если вы не знаете, если это массив или строка или что-то еще, вы можете использовать var_dump($var) что расскажу вам, что это за тип и что это за контент. Используйте это только для отладки.

что означает уведомление PHP и как его воспроизвести:

если вы отправляете массив PHP в функцию, которая ожидает строку типа:echo или print, тогда интерпретатор PHP преобразует Ваш массив в литеральную строку Array, бросьте это уведомление и продолжайте идти. Например:

php> print(array(1,2,3))

PHP Notice:  Array to string conversion in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(591) :
eval()'d code on line 1
Array

в этом случае функция print выводит текстовую строку: Array в stdout, а затем регистрирует уведомление в stderr и продолжает идти.

еще один пример в PHP скрипте:

<?php
    $stuff = array(1,2,3);
    print $stuff;  //PHP Notice:  Array to string conversion in yourfile on line 3
?>

у вас есть 2 варианта: либо привести свой массив PHP в строку с помощью преобразователя массива в строку, либо подавить уведомление PHP.

исправление 1: используйте встроенную функцию php print_r или var_dump:

http://php.net/manual/en/function.print-r.php или http://php.net/manual/en/function.var-dump.php

$stuff = array(1,2,3);
print_r($stuff);
$stuff = array(3,4,5);
var_dump($stuff);

принты:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
array(3) {
  [0]=>
  int(3)
  [1]=>
  int(4)
  [2]=>
  int(5)
}

исправление 2: Используйте json_encode, чтобы свернуть массив в строку json:

$stuff = array(1,2,3);
print json_encode($stuff);   //Prints [1,2,3]

исправление 3: объединение всех ячеек в массиве вместе:

<?php
    $stuff = array(1,2,3);
    print implode(", ", $stuff);    //prints 1, 2, 3
    print join(',', $stuff);        //prints 1, 2, 3
?>

исправление 4: подавить уведомления:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.

вы используете <input name='C[]' в HTML. Это создает массив в PHP при отправке формы.

вы используете echo $_POST['C']; чтобы эхо этого массива - это не будет работать, но вместо этого испускать это уведомление и слово "массив".

В зависимости от того, что вы сделали с остальной частью кода, Вы, вероятно, должны использовать echo $_POST['C'][0];