Jak rozwiązać błąd PHP „Uwaga: konwersja tablicy na ciąg w…”

117

Mam plik PHP, który próbuje wywołać echo a $_POSTi pojawia się błąd, oto kod:

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

Oto kod, który powtarza POST.

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

Ale po uruchomieniu kodu pojawia się błąd:

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

Co oznacza ten błąd i jak go naprawić?

t4thilina
źródło
Która to linia 8? Czy $Texting[i]to literówka? Czy nie powinno być $Texting[$i]zamiast tego?
Amal Murali
Proszę, pokaż var_dump($Texting).
Barmar
1
Cześć ... Linia 8 oznacza, echo $ _POST ['C']. A var_dump ($ _ POST ['C']) to Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Mężczyzna" [2] => string (6) "Płeć żeńska" }. A var_dump ($ Texting) to array (3) {[0] => string (1) "A" [1] => string (4) "Mężczyzna" [2] => string (6) "Kobieta"}. ..
t4thilina

Odpowiedzi:

110

Jeśli masz wiele danych wejściowych HTML o nazwach, C[]to, co otrzymujesz w tablicy POST na drugim końcu, jest tablicą tych wartości w $_POST['C']. Więc kiedy to robisz echo, próbujesz wydrukować tablicę, więc wszystko, co robi, to wypisanie Arrayi powiadomienie.

Aby poprawnie wydrukować tablicę, albo zapętlisz ją i echokażdy element, albo możesz użyć print_r.

Alternatywnie, jeśli nie wiesz, czy jest to tablica, ciąg lub cokolwiek innego, możesz użyć, var_dump($var)który powie ci, jaki to jest typ i jaka jest zawartość. Użyj tego tylko do celów debugowania.

jadkik94
źródło
K bardzo dziękuję za jasne wyjaśnienie. Wyświetla to, co dokładnie powiedziałeś. Oznacza to, że moja tablica została już wysłana do pliku PHP. Wygląda na to, że mogę używać bez problemu. Jeszcze raz dziękuję.
t4thilina
56

Co oznacza Uwaga PHP i jak ją odtworzyć:

Jeśli wyślesz tablicę PHP do funkcji, która oczekuje łańcucha takiego jak: echolub print, interpreter PHP skonwertuje twoją tablicę na ciąg literału Array, wyrzuci to powiadomienie i kontynuuj. Na przykład:

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

W tym przypadku funkcja printzrzuca ciąg literału: Arrayna standardowe wyjście, a następnie rejestruje komunikat na stderr i kontynuuje działanie.

Kolejny przykład w skrypcie PHP:

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

Masz 2 opcje, albo rzutuj swoją tablicę PHP na łańcuch znaków, używając konwertera tablic na ciągi, albo wyłącz powiadomienie PHP.

Poprawka 1: użyj wbudowanej funkcji php print_r lub var_dump:

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

Wydruki:

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

Poprawka 2: użyj kodu json_encode, aby zwinąć tablicę do ciągu json:

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

Poprawka 3: Łączenie wszystkich komórek w tablicy razem:

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

Poprawka 4: zlikwiduj powiadomienia:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
źródło
To powinna być akceptowana odpowiedź. Bardzo mi pomogło. Musiałem również użyć json_encode z tą odpowiedzią. print_r (json_encode ($ AuthData)); Wynik podobny do tego: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id": "-ace681-481 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Używasz <input name='C[]'w swoim HTML. Tworzy to tablicę w PHP, gdy formularz jest wysyłany.

Używasz echo $_POST['C'];do powtórzenia tej tablicy - to nie zadziała, ale zamiast tego wyemituje to powiadomienie i słowo „Array”.

W zależności od tego, co zrobiłeś z resztą kodu, prawdopodobnie powinieneś użyć echo $_POST['C'][0];

Sven
źródło
3

Array to string conversion w najnowszych wersjach php 7.x jest raczej błędem niż powiadomieniem i zapobiega dalszemu wykonywaniu kodu.

Używanie print, echona tablicy nie jest już opcją.

Pomijanie błędów i powiadomień nie jest dobrą praktyką, szczególnie w środowisku programistycznym i nadal debugowaniu kodu.

Zastosowanie var_dump, print_r, iterację wartości wejściowej używając foreachlub fordo wprowadzania danych wyjściowych do nazw, które są zadeklarowane jako tablic wejściowych (” name[]„)

Najczęstszą praktyką wychwytywania błędów jest używanie try/catchbloków, co pomaga nam zapobiegać przerwom w wykonywaniu kodu, które mogłyby spowodować ewentualne błędy zawinięte w tryblok.

  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
źródło
1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

jeśli chcesz przechwycić wynik w zmiennej

Andrei Dragomir
źródło