Comment résoudre l'erreur PHP 'Remarque: conversion de tableau en chaîne en…'

116

J'ai un fichier PHP qui essaie de faire écho a $_POSTet j'obtiens une erreur, voici le code:

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

Voici le code pour faire écho au POST.

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

Mais lorsque le code s'exécute, j'obtiens une erreur comme:

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

Que signifie cette erreur et comment y remédier?

t4thilina
la source
Laquelle est la ligne 8? Une $Texting[i]faute de frappe? Cela ne devrait-il pas être $Texting[$i]plutôt?
Amal Murali
Veuillez montrer var_dump($Texting).
Barmar
1
Salut ... La ligne 8 signifie, echo $ _POST ['C']. Et var_dump ($ _ POST ['C']) est Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Femelle" }. Et var_dump ($ Texting) est array (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Réponses:

110

Lorsque vous avez de nombreuses entrées HTML nommées, C[]ce que vous obtenez dans le tableau POST à ​​l'autre extrémité est un tableau de ces valeurs dans $_POST['C']. Donc, lorsque vous faites echocela, vous essayez d'imprimer un tableau, donc tout ce qu'il fait, c'est imprimer Arrayet un avis.

Pour imprimer correctement un tableau, vous pouvez soit le parcourir et echochaque élément, soit utiliser print_r.

Alternativement, si vous ne savez pas s'il s'agit d'un tableau ou d'une chaîne ou autre, vous pouvez utiliser var_dump($var)qui vous dira de quel type il s'agit et quel est son contenu. Utilisez-le uniquement à des fins de débogage.

jadkik94
la source
Merci beaucoup pour votre explication claire. Il imprime exactement ce que vous avez dit. Cela signifie que mon tableau a déjà été envoyé dans le fichier PHP. Semble que je peux utiliser sans aucun problème. Merci encore.
t4thilina
56

Qu'est-ce que l'avis PHP et comment le reproduire:

Si vous envoyez un tableau PHP dans une fonction qui attend une chaîne comme: echoou print, alors l'interpréteur PHP convertira votre tableau en chaîne littérale Array, lèvera cet avis et continuez. Par exemple:

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

Dans ce cas, la fonction printvide la chaîne littérale:Array vers stdout, puis enregistre l'avis dans stderr et continue.

Un autre exemple dans un script PHP:

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

Vous avez 2 options, soit convertir votre tableau PHP en String à l'aide d'un convertisseur tableau en chaîne, soit supprimer la notice PHP.

Correction 1: utilisez la fonction php intégrée print_r ou var_dump:

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

Impressions:

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

Correction 2: utilisez json_encode pour réduire le tableau en chaîne json:

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

Correction 3: Rejoindre toutes les cellules du tableau ensemble:

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

Correction 4: supprimer les avis:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
la source
Cela devrait être la réponse acceptée. M'a énormément aidé. J'ai également dû utiliser json_encode avec cette réponse. print_r (json_encode ($ AuthData)); Résultat similaire à celui-ci: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id5-48b": "ace68b a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Vous utilisez <input name='C[]'dans votre HTML. Cela crée un tableau en PHP lorsque le formulaire est envoyé.

Vous utilisez echo $_POST['C'];pour faire écho à ce tableau - cela ne fonctionnera pas, mais émettra plutôt cet avis et le mot «Array».

En fonction de ce que vous avez fait avec le reste du code, vous devriez probablement utiliser echo $_POST['C'][0];

Sven
la source
3

Array to string conversion dans les dernières versions de php 7.x est une erreur, plutôt qu'un avertissement, et empêche la poursuite de l'exécution du code.

Utiliser print, echoon array n'est plus une option.

La suppression des erreurs et des avis n'est pas une bonne pratique, en particulier dans un environnement de développement et toujours en train de déboguer du code.

Utilisation var_dump, print_r, itérer à travers la valeur d'entrée à l' aide foreachou forà des données d'entrée de sortie pour les noms qui sont déclarés comme des tableaux d'entrée ( » name[]« )

La pratique la plus courante pour détecter les erreurs consiste à utiliser des try/catchblocs, ce qui nous aide à empêcher l'interruption de l'exécution du code qui pourrait provoquer des erreurs encapsulées dans un trybloc.

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

si vous souhaitez capturer le résultat dans une variable

Andrei Dragomir
la source