Як вирішити помилку PHP "Примітка: Перетворення масиву на рядок у ..."


116

У мене є PHP-файл, який намагається відзвучити a, $_POSTі я отримую помилку, ось код:

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

Ось код для відлуння пошти.

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

Але коли код запускається, я отримую помилку на зразок:

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

Що означає ця помилка та як її виправити?


Яка лінія 8? Це $Texting[i]друкарська помилка? Чи не повинно бути $Texting[$i]натомість?
Амаль Муралі

Будь ласка, покажіть var_dump($Texting).
Бармар

1
Привіт ... Рядок 8 означає, відлуння $ _POST ['C']. І var_dump ($ _ POST ['C']) - це Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => рядок (6) "Жіночий"}. І var_dump ($ Texting) - це масив (3) {[0] => рядок (1) "A" [1] => рядок (4) "чоловічий" [2] => рядок (6) "жіночий"}. ..
t4thilina

Відповіді:


110

Коли у вас є багато входів HTML, названих C[]тим, що ви отримуєте в масиві POST на іншому кінці, це масив цих значень у $_POST['C']. Тому коли ви echoце намагаєтеся надрукувати масив, тому все, що він робить, - це друк Arrayта повідомлення.

Щоб правильно надрукувати масив, ви або прокручуєте його через echoкожен елемент, або можете використовувати print_r.

Крім того, якщо ви не знаєте, чи це масив, чи рядок чи інше, ви можете скористатися, var_dump($var)який підкаже вам, що це за тип та який його вміст. Використовуйте це лише для налагодження.


K дякую тобі за чітке пояснення. Тут виводиться, що саме ви сказали. Це означає, що мій масив уже надісланий у файл PHP. Здається, я можу користуватися без проблем. Ще раз спасибі.
t4thilina

56

Що означає Повідомлення PHP та як його відтворити:

Якщо ви відправляєте масив PHP у функцію, яка очікує рядок типу: echoабо print, тоді інтерпретатор PHP перетворить ваш масив у буквальний рядок Array, кине це повідомлення та продовжує продовжувати. Наприклад:

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

У цьому випадку функція printскидає буквальний рядок: Arraystdout, а потім записує сповіщення до stderr і продовжує дію.

Ще один приклад сценарію PHP:

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

У вас є 2 варіанти: або передайте масив PHP до String за допомогою перетворювача рядків на рядок, або пригнічіть повідомлення PHP.

Виправлення 1: використовуйте вбудовану функцію php print_r або var_dump:

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

Друкує:

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

Виправлення 2: Використовуйте json_encode для згортання масиву до рядка json:

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

Виправлення 3: Об’єднання всіх комірок у масиві:

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

Виправлення 4: придушити Повідомлення:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.

Це має бути прийнятою відповіддю. Неодмінно допомогли мені. Я також повинен був використовувати json_encode з цією відповіддю. print_r (json_encode ($ AuthData)); Результат, подібний до цього: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth5id": "4868 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Андрій

5

Ви використовуєте <input name='C[]'у своєму HTML. Це створює масив у PHP, коли форма надсилається.

Ви використовуєте echo $_POST['C'];для відлуння цього масиву - це не працюватиме, а натомість випромінює це повідомлення та слово "масив".

Залежно від того, що ви зробили з рештою коду, ви, ймовірно, повинні використовувати echo $_POST['C'][0];


3

Array to string conversion в останніх версіях php 7.x - це помилка, а не повідомлення, і перешкоджає подальшому виконанню коду.

Використання print, echoв масиві не варіант більше.

Придушення помилок та сповіщень не є хорошою практикою, особливо, коли в середовищі розробки та ще налагоджений код.

Використовуйте var_dump, print_r, ітерація через вхідний значення , використовуючи foreachабо forдля виведення вхідних даних для імен, оголошених в якості вхідних масивів ( » name[]«)

Найпоширенішою практикою лову помилок є використання try/catchблоків, що допомагає нам запобігти перериванню виконання коду, що може спричинити можливі помилки, загорнуті в 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();
  }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.