So lösen Sie den PHP-Fehler 'Hinweis: Konvertierung von Array in String in ...'

116

Ich habe eine PHP-Datei, die versucht, eine zu wiederholen, $_POSTund ich erhalte eine Fehlermeldung. Hier ist der 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>'

Hier ist der Code zum Echo des POST.

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

Aber wenn der Code läuft, bekomme ich eine Fehlermeldung wie:

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

Was bedeutet dieser Fehler und wie behebe ich ihn?

t4thilina
quelle
Welches ist Zeile 8? Ist $Texting[i]ein Tippfehler? Sollte das nicht $Texting[$i]stattdessen sein?
Amal Murali
Bitte zeigen var_dump($Texting).
Barmar
1
Hi ... Zeile 8 bedeutet, $ _POST ['C'] wiedergeben. Und var_dump ($ _ POST ['C']) ist Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Weiblich"}. Und var_dump ($ Texting) ist Array (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Antworten:

110

Wenn Sie viele HTML-Eingaben mit dem Namen haben, erhalten C[]Sie im POST-Array am anderen Ende ein Array dieser Werte in $_POST['C']. Wenn Sie echodas tun, versuchen Sie, ein Array zu drucken. Alles, was es tut, ist Drucken Arrayund ein Hinweis.

Um ein Array richtig zu drucken, durchlaufen Sie es entweder und echojedes Element oder können es verwenden print_r.

Wenn Sie nicht wissen, ob es sich um ein Array oder eine Zeichenfolge oder was auch immer handelt, können Sie alternativ verwenden, um zu erfahren, var_dump($var)um welchen Typ es sich handelt und welchen Inhalt es hat. Verwenden Sie dies nur zum Debuggen.

jadkik94
quelle
K Vielen Dank für Ihre klare Erklärung. Es druckt aus, was genau Sie gesagt haben. Dies bedeutet, dass mein Array bereits an die PHP-Datei gesendet wurde. Scheint ich kann ohne Probleme verwenden. Nochmals vielen Dank.
t4thilina
56

Was der PHP-Hinweis bedeutet und wie er reproduziert werden kann:

Wenn Sie ein PHP-Array an eine Funktion senden, die eine Zeichenfolge wie: echooder erwartet print, konvertiert der PHP-Interpreter Ihr Array in die Literalzeichenfolge Array, werfen Sie diesen Hinweis und fahren Sie fort. Beispielsweise:

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 diesem Fall gibt die Funktion printdie Literalzeichenfolge: Arrayto stdout aus und protokolliert dann die Benachrichtigung an stderr und fährt fort.

Ein weiteres Beispiel in einem PHP-Skript:

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

Sie haben zwei Möglichkeiten: entweder wandeln Sie Ihr PHP-Array mit einem Array-zu-String-Konverter in String um oder unterdrücken den PHP-Hinweis.

Korrektur 1: Verwenden Sie die eingebaute PHP-Funktion print_r oder var_dump:

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

Drucke:

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

Korrektur 2: Verwenden Sie json_encode, um das Array auf json string zu reduzieren:

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

Korrektur 3: Zusammenfügen aller Zellen im Array:

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

Korrektur 4: Unterdrücke die Hinweise:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
quelle
Dies sollte die akzeptierte Antwort sein. Hat mir sehr geholfen. Ich musste bei dieser Antwort auch json_encode verwenden. print_r (json_encode ($ AuthData)); Ergebnis ähnlich wie folgt: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id": "ace1 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Sie verwenden <input name='C[]'in Ihrem HTML. Dadurch wird beim Senden des Formulars ein Array in PHP erstellt.

Sie verwenden echo $_POST['C'];, um dieses Array wiederzugeben - dies funktioniert nicht, sondern gibt stattdessen diesen Hinweis und das Wort "Array" aus.

Abhängig davon, was Sie mit dem Rest des Codes gemacht haben, sollten Sie wahrscheinlich verwenden echo $_POST['C'][0];

Sven
quelle
2

Array to string conversion In den neuesten Versionen von PHP 7.x ist dies eher ein Fehler als ein Hinweis und verhindert die weitere Codeausführung.

Verwenden print, echoauf Array ist keine Option mehr.

Das Unterdrücken von Fehlern und Hinweisen ist keine gute Vorgehensweise, insbesondere in Entwicklungsumgebungen und beim Debuggen von Code.

Verwendung var_dump, print_riterieren durch Werteingabe mit foreachoder forzur Ausgabe von Eingangsdaten für die Namen , die als Eingabe - Arrays deklariert werden (‘ name[]‚)

Die häufigste Vorgehensweise zum Abfangen von Fehlern ist die Verwendung von try/catchBlöcken. Dies verhindert, dass die Codeausführung unterbrochen wird, was zu möglichen Fehlern im tryBlock führen kann.

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

Wenn Sie das Ergebnis in einer Variablen erfassen möchten

Andrei Dragomir
quelle