Bagaimana mengatasi kesalahan PHP 'Notice: Array to string conversion in…'

116

Saya memiliki file PHP yang mencoba menggemakan $_POSTdan saya mendapatkan kesalahan, berikut kodenya:

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>'

Berikut adalah kode untuk menggemakan POST.

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

Tetapi ketika kode berjalan saya mendapatkan kesalahan seperti:

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

Apa arti kesalahan ini dan bagaimana cara memperbaikinya?

t4thilina.dll
sumber
Yang mana baris 8? Apakah $Texting[i]salah ketik? Bukankah seharusnya begitu $Texting[$i]?
Amal Murali
Tolong tunjukkan var_dump($Texting).
Barmar
1
Hai ... Baris 8 artinya, echo $ _POST ['C']. Dan var_dump ($ _ POST ['C']) adalah Arrayray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Perempuan" }. Dan var_dump ($ Texting) adalah array (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Jawaban:

110

Ketika Anda memiliki banyak input HTML bernama C[]apa yang Anda dapatkan dalam array POST di sisi lain adalah array dari nilai-nilai ini $_POST['C']. Jadi ketika Anda melakukannya echo, Anda mencoba untuk mencetak sebuah array, jadi yang dilakukannya hanyalah mencetak Arraydan pemberitahuan.

Untuk mencetak sebuah array dengan benar, Anda dapat mengulanginya dan echosetiap elemen, atau Anda dapat menggunakan print_r.

Atau, jika Anda tidak tahu apakah itu array atau string atau apa pun, Anda dapat menggunakan var_dump($var)yang akan memberi tahu Anda jenisnya dan apa isinya. Gunakan itu hanya untuk tujuan debugging.

jadkik94
sumber
K terima kasih banyak atas penjelasan Anda yang jelas. Ini mencetak apa yang sebenarnya Anda katakan. Artinya array saya sudah terkirim ke file PHP. Sepertinya saya bisa menggunakan tanpa masalah. Terima kasih lagi.
t4thilina
56

Apa arti Pemberitahuan PHP dan bagaimana mereproduksinya:

Jika Anda mengirim array PHP menjadi fungsi yang mengharapkan string seperti: echoatau print, maka penerjemah PHP akan mengubah array Anda menjadi string literal Array, lemparkan Pemberitahuan ini dan lanjutkan. Sebagai contoh:

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

Dalam kasus ini, fungsi tersebut printmembuang string literal: Arrayke stdout dan kemudian mencatat Pemberitahuan ke stderr dan melanjutkan.

Contoh lain dalam skrip PHP:

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

Anda memiliki 2 opsi, mentransmisikan array PHP Anda ke String menggunakan konverter array ke string atau menekan Pemberitahuan PHP.

Koreksi 1: Gunakan fungsi php bawaan print_r atau var_dump:

http://php.net/manual/en/function.print-r.php atau 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);

Cetakan:

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

Koreksi 2: Gunakan json_encode untuk menciutkan array ke string json:

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

Koreksi 3: Menggabungkan semua sel dalam array:

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

Koreksi 4: tutup Pemberitahuan:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
sumber
Ini harus menjadi jawaban yang diterima. Sangat membantu saya. Saya juga harus menggunakan json_encode dengan jawaban ini. print_r (json_encode ($ AuthData)); Hasil serupa dengan ini: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauthf1-48b-48b-485-485-48b31 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Anda menggunakan <input name='C[]'di HTML Anda. Ini membuat sebuah array di PHP saat formulir dikirim.

Anda menggunakan echo $_POST['C'];untuk menggemakan larik itu - ini tidak akan berhasil, melainkan memancarkan pemberitahuan itu dan kata "Array".

Bergantung pada apa yang Anda lakukan dengan kode lainnya, Anda mungkin harus menggunakan echo $_POST['C'][0];

Sven
sumber
2

Array to string conversion dalam versi terbaru dari php 7.x adalah error, bukan pemberitahuan, dan mencegah eksekusi kode lebih lanjut.

Menggunakan print, echopada array bukan lagi merupakan pilihan.

Menekan kesalahan dan pemberitahuan bukanlah praktik yang baik, terutama saat berada di lingkungan pengembangan dan masih men-debug kode.

Gunakan var_dump,, print_rulangi melalui nilai masukan menggunakan foreachatau foruntuk mengeluarkan data masukan untuk nama yang dideklarasikan sebagai larik masukan (' name[]')

Praktik paling umum untuk menangkap kesalahan adalah menggunakan try/catchblok, yang membantu kami mencegah gangguan eksekusi kode yang mungkin menyebabkan kemungkinan kesalahan yang terbungkus dalam tryblok.

  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();
  }
Nikola Kirincic
sumber
1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

jika Anda ingin menangkap hasil dalam variabel

Andrei Dragomir
sumber