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?
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.
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.
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)
}
$stuff = array(1,2,3);
print json_encode($stuff); //Prints [1,2,3]
<?php
$stuff = array(1,2,3);
print implode(", ", $stuff); //prints 1, 2, 3
print join(',', $stuff); //prints 1, 2, 3
?>
error_reporting(0);
print(array(1,2,3)); //Prints 'Array' without a Notice.
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];
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();
}