$_POST
をエコーしようとするPHPファイルがあり、エラーになります。コードは次のとおりです。
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
このエラーはどういう意味ですか、どうすれば修正できますか?
C[]
という名前のHTML入力がたくさんある場合、反対側のPOST配列に入ってくるのは、$_POST['C']
内のこれらの値の配列です。そのため、echo
とすると、配列を印刷しようとしているので、print Array
とその通知だけが行われます。
配列を正しく表示するには、配列をループ処理して各要素をecho
するか、print_r
を使用します。
代わりに、それが配列なのか文字列なのかわからないのなら、var_dump($var)
を使うことができます。デバッグ目的でのみ使用してください。
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配列をStringにキャストするか、PHP Noticeを抑制します。
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.
HTMLで<input name='C[]'
を使っています。これにより、フォームが送信されたときにPHPに配列が作成されます。
その配列をエコーするためにecho $_POST['C'];
を使用しています - これは機能しませんが、その代わりにその注意とWordの「配列」を発行します。
残りのコードで何をしたかに応じて、おそらくecho $_POST['C'][0];
を使用する必要があります。
最新バージョンのphp 7.xのArray to string conversion
は、気付かずにエラーであり、それ以上コードが実行されるのを防ぎます。
print
を使用して、arrayでecho
を使用することはできなくなりました。
特に開発環境でコードをデバッグしているときは、エラーや通知を抑制することはお勧めできません。
var_dump
、print_r
を使用し、foreach
またはfor
を使用して入力値を反復処理し、入力配列として宣言されている名前の入力データを出力します( 'name[]
')
エラーをキャッチするための最も一般的な方法はtry/catch
ブロックを使用することです。これは、try
ブロック内にラップされる可能性のあるエラーを引き起こす可能性があるコード実行の中断を防ぐのに役立ちます。
try{ //wrap around possible cause of error or notice
if(!empty($_POST['G'])){
echo $_POST['C'];
}
}catch(Exception $e){
//handle the error message $e->getMessage();
}