web-dev-qa-db-fra.com

Comment résoudre PHP erreur 'Avis: Conversion de tableau en chaînes dans ...'

J'ai un fichier PHP qui essaie de faire écho à un $_POST et 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 est exécuté, j'obtiens une erreur du type:

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

Que signifie cette erreur et comment puis-je la réparer?

92
t4thilina

Lorsque vous avez plusieurs entrées HTML nommées C[], vous obtenez dans le tableau POST à l'autre extrémité un tableau de ces valeurs dans $_POST['C']. Ainsi, lorsque vous echo cela, vous essayez d’imprimer un tableau. Il ne fait donc qu’afficher Array et un avis.

Pour imprimer correctement un tableau, vous pouvez soit le parcourir en boucle et echo chaque élément, soit utiliser print_r.

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

92
jadkik94

Que signifie PHP Notice et comment le reproduire:

Si vous envoyez un tableau PHP dans une fonction qui attend une chaîne telle que: echo ou print, alors l'interpréteur PHP convertira votre tableau en valeur littérale. string Array, lancez 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 print vide la chaîne littérale: Array sur stdout, puis enregistre la notification dans stderr et continue.

Autre exemple de 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 chaîne à l'aide d'un convertisseur de tableau en chaîne, soit supprimer la remarque 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: Réunir toutes les cellules du tableau:

<?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.
43
Eric Leschinski

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

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

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

5
Sven

Array to string conversion dans les dernières versions de php 7.x est une erreur plutôt qu'une remarque et empêche toute exécution ultérieure du code.

Utiliser print, echo sur un tableau n’est plus une option.

La suppression des erreurs et des avis n'est pas une bonne pratique, en particulier dans les environnements de développement et le débogage du code.

Utilisez var_dump, print_r, parcourez la valeur d'entrée à l'aide de foreach ou for pour générer des données d'entrée pour les noms déclarés en tant que tableaux d'entrée ('name[]')

La pratique la plus courante pour intercepter les erreurs consiste à utiliser les blocs try/catch, ce qui nous aide à éviter toute interruption de l'exécution de code susceptible d'entraîner des erreurs éventuelles encapsulées dans le bloc 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();
  }
0
niklaz