Cómo resolver el error de PHP 'Aviso: conversión de matriz a cadena en ...'

116

Tengo un archivo PHP que intenta hacer eco $_POSTy aparece un error, aquí está el código:

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

Aquí está el código para repetir el POST.

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

Pero cuando se ejecuta el código, aparece un error como:

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

¿Qué significa este error y cómo lo soluciono?

t4thilina
fuente
¿Cuál es la línea 8? ¿Es $Texting[i]un error tipográfico? ¿No debería ser eso en su $Texting[$i]lugar?
Amal Murali
Por favor muestre var_dump($Texting).
Barmar
1
Hola ... La línea 8 significa, echo $ _POST ['C']. Y var_dump ($ _ POST ['C']) es Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Mujer"}. Y var_dump ($ Texting) es array (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Respuestas:

110

Cuando tiene muchas entradas HTML nombradas, C[]lo que obtiene en la matriz POST en el otro extremo es una matriz de estos valores en formato $_POST['C']. Entonces, cuando hace echoeso, está tratando de imprimir una matriz, por lo que todo lo que hace es imprimir Arrayy un aviso.

Para imprimir correctamente una matriz, puede recorrerla y echocada elemento, o puede usar print_r.

Alternativamente, si no sabe si es una matriz o una cadena o lo que sea, puede usar la var_dump($var)que le dirá qué tipo es y cuál es su contenido. Úselo solo para fines de depuración.

jadkik94
fuente
K muchas gracias por tu clara explicación. Imprime exactamente lo que dijo. Significa que mi matriz ya se ha enviado al archivo PHP. Parece que puedo usarlo sin ningún problema. Gracias de nuevo.
t4thilina
56

Qué significa el Aviso de PHP y cómo reproducirlo:

Si envía una matriz de PHP a una función que espera una cadena como: echoo print, entonces el intérprete de PHP convertirá su matriz a la cadena literal Array, lanzará este Aviso y continuará. Por ejemplo:

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

En este caso, la función printvuelca la cadena literal: Arraya stdout y luego registra el Aviso en stderr y continúa.

Otro ejemplo en un script PHP:

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

Tiene 2 opciones, convertir su matriz PHP en String usando un conversor de matriz a cadena o suprimir el Aviso de PHP.

Corrección 1: use la función php incorporada 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);

Huellas dactilares:

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

Corrección 2: use json_encode para contraer la matriz a la cadena json:

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

Corrección 3: Unir todas las celdas de la matriz:

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

Corrección 4: suprima los Avisos:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
fuente
Esta debería ser la respuesta aceptada. Me ayudó inmensamente. También tuve que usar json_encode con esta respuesta. print_r (json_encode ($ AuthData)); Resultado similar a este: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id-481bb31": "ace568-48 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Estás usando <input name='C[]'en tu HTML. Esto crea una matriz en PHP cuando se envía el formulario.

Está utilizando echo $_POST['C'];para hacer eco de esa matriz, esto no funcionará, sino que emite ese aviso y la palabra "Matriz".

Dependiendo de lo que hizo con el resto del código, probablemente debería usar echo $_POST['C'][0];

Sven
fuente
3

Array to string conversion en las últimas versiones de php 7.x es un error, en lugar de un aviso, y evita la ejecución de más código.

Usar print, echoen matriz ya no es una opción.

Suprimir errores y avisos no es una buena práctica, especialmente cuando se encuentra en un entorno de desarrollo y todavía se está depurando código.

Uso var_dump, print_r, iterar a través de valor de entrada usando foreacho fora los datos de entrada de salida para los nombres que se declaran como matrices de entrada (' name[]')

La práctica más común para detectar errores es usar try/catchbloques, que nos ayudan a prevenir la interrupción de la ejecución del código que podría causar posibles errores envueltos dentro del trybloque.

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

si desea capturar el resultado en una variable

Andrei Dragomir
fuente