Come risolvere l'errore PHP "Avviso: conversione da array a stringa in ..."


116

Ho un file PHP che tenta di echeggiare a $_POSTe ricevo un errore, ecco il codice:

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

Ecco il codice per eseguire l'eco del POST.

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

Ma quando il codice viene eseguito ottengo un errore del tipo:

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

Cosa significa questo errore e come risolverlo?


Qual è la riga 8? È $Texting[i]un errore di battitura? Non dovrebbe essere così $Texting[$i]?
Amal Murali

Per favore mostra var_dump($Texting).
Barmar

1
Ciao ... La riga 8 significa, echo $ _POST ['C']. E var_dump ($ _ POST ['C']) è Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Femmina"}. E var_dump ($ Texting) è array (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Risposte:


110

Quando hai molti input HTML denominati, C[]ciò che ottieni nell'array POST dall'altra parte è un array di questi valori in $_POST['C']. Quindi, quando lo fai echo, stai cercando di stampare un array, quindi tutto ciò che fa è stampare Arraye un avviso.

Per stampare correttamente un array, puoi scorrere lo stesso e echoogni elemento oppure puoi usare print_r.

In alternativa, se non sai se è un array o una stringa o altro, puoi usare var_dump($var)che ti dirà di che tipo è e qual è il suo contenuto. Usalo solo per scopi di debug.


Grazie mille per la tua chiara spiegazione. Stampa quello che hai detto esattamente. Significa che il mio array è già stato inviato al file PHP. Sembra che posso usare senza alcun problema. Grazie ancora.
t4thilina

56

Cosa significa la notifica PHP e come riprodurla:

Se invii un array PHP in una funzione che si aspetta una stringa come: echoo print, l'interprete PHP convertirà il tuo array nella stringa letterale Array, lancia questo avviso e continua. Per esempio:

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

In questo caso, la funzione printscarica la stringa letterale: Arrayin stdout, quindi registra l'avviso in stderr e continua.

Un altro esempio in uno script PHP:

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

Hai 2 opzioni, eseguire il cast del tuo array PHP su String usando un convertitore da array a stringa o sopprimere l'avviso PHP.

Correzione 1: usa la funzione php incorporata print_r o var_dump:

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

stampe:

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

Correzione 2: utilizzare json_encode per comprimere l'array in una stringa json:

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

Correzione 3: unione di tutte le celle dell'array:

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

Correzione 4: sopprimere gli avvisi:

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

Questa dovrebbe essere la risposta accettata. Mi ha aiutato immensamente. Ho anche dovuto usare json_encode con questa risposta. print_r (json_encode ($ AuthData)); Risultato simile a questo: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_bb48-31-48568-31 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew

5

Stai usando <input name='C[]'nel tuo HTML. Questo crea un array in PHP quando il modulo viene inviato.

Stai usando echo $_POST['C'];per echeggiare quell'array - questo non funzionerà, ma invece emetterà quell'avviso e la parola "Array".

A seconda di cosa hai fatto con il resto del codice, dovresti probabilmente usare echo $_POST['C'][0];


3

Array to string conversion nelle ultime versioni di php 7.x è un errore, piuttosto che un avviso, e impedisce l'ulteriore esecuzione del codice.

Utilizzando print, echosu array non è un'opzione più.

Sopprimere errori e avvisi non è una buona pratica, soprattutto quando si è nell'ambiente di sviluppo e si sta ancora eseguendo il debug del codice.

Uso var_dump, print_r, iterate attraverso valore di ingresso usando foreacho fordi dati di input output per i nomi che vengono dichiarati come array di input (' name[]')

La pratica più comune per rilevare gli errori è l'utilizzo di try/catchblocchi, che ci aiutano a prevenire l'interruzione dell'esecuzione del codice che potrebbe causare possibili errori racchiusi nel tryblocco.

  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();
  }

1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

se vuoi catturare il risultato in una variabile

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.