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

У меня есть PHP-файл, который пытается выполнить эхо-код $_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>' 

Вот код для эхо-сообщения POST.

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

Но когда код работает, я получаю ошибку, например:

 Notice: Array to string conversion in C:\xampp\htdocs\PHIS\FinalSubmissionOfTheFormPHP.php on line 8 

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

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

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

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

Как воспроизвести вышеупомянутое Уведомление:

Сообщение возникает, когда вы отправляете пустой массив в функцию типа: echo или print :

 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 

В этом случае эхо и печать будут просто печатать Array в stdout, а затем записывать уведомление в stderr.

Более конкретно вы можете сделать это и в php-скрипте:

Создайте массив PHP и попробуйте напечатать пустой массив в stdout:

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

Коррекция 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. 

Почему это происходит?

Если вы изучите документацию php для печати и эха,

http://php.net/manual/en/function.print.php

http://php.net/manual/en/function.echo.php

Вы увидите, что оба берут строки, а не массивы. Вы передаете массив как строку, в общем, когда вы делаете подобные ошибки, PHP ничего не сделает или сделает что-то очень неожиданное.

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

Вы используете echo $_POST['C']; для эха этого массива – это не сработает, а вместо этого испустит это уведомление и слово «Массив».

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