У меня есть 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 ?>
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) }
$stuff = array(1,2,3); print json_encode($stuff); //Prints [1,2,3]
<?php $stuff = array(1,2,3); print implode(", ", $stuff); //prints 1, 2, 3 print join(',', $stuff); //prints 1, 2, 3 ?>
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];