Mam plik PHP, który próbuje wywołać echo a $_POST
i 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ć?
$Texting[i]
to literówka? Czy nie powinno być$Texting[$i]
zamiast tego?var_dump($Texting)
.Odpowiedzi:
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 robiszecho
, próbujesz wydrukować tablicę, więc wszystko, co robi, to wypisanieArray
i powiadomienie.Aby poprawnie wydrukować tablicę, albo zapętlisz ją i
echo
każ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.źródło
Co oznacza Uwaga PHP i jak ją odtworzyć:
Jeśli wyślesz tablicę PHP do funkcji, która oczekuje łańcucha takiego jak:
echo
lubprint
, interpreter PHP skonwertuje twoją tablicę na ciąg literałuArray
, wyrzuci to powiadomienie i kontynuuj. Na przykład:W tym przypadku funkcja
print
zrzuca ciąg literału:Array
na standardowe wyjście, a następnie rejestruje komunikat na stderr i kontynuuje działanie.Kolejny przykład w skrypcie PHP:
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
Wydruki:
Poprawka 2: użyj kodu json_encode, aby zwinąć tablicę do ciągu json:
Poprawka 3: Łączenie wszystkich komórek w tablicy razem:
Poprawka 4: zlikwiduj powiadomienia:
źródło
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];
źródło
Array to string conversion
w najnowszych wersjach php 7.x jest raczej błędem niż powiadomieniem i zapobiega dalszemu wykonywaniu kodu.Używanie
print
,echo
na 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ącforeach
lubfor
do 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/catch
bloków, co pomaga nam zapobiegać przerwom w wykonywaniu kodu, które mogłyby spowodować ewentualne błędy zawinięte wtry
blok.źródło
jeśli chcesz przechwycić wynik w zmiennej
źródło