Подтвердить что ты не робот

Проблема с: Неустранимая ошибка: оператор [] не поддерживается для строк в

Я получаю информацию из базы данных, сохраняю ее в массив и отображаю в форме со структурой цикла, и у меня возникают проблемы при попытке сохранить измененную информацию в базу данных.

Я получаю эту ошибку:

Неустранимая ошибка: оператор [] не поддерживается для строк в....

Код:

    $namesql1 = "SELECT name,date,text,date2 FROM table WHERE something= '$something'";
    $nameresult1 = mysql_query($namesql1);
    $countrows = mysql_num_rows($nameresult1);
    while ($row = mysql_fetch_array($nameresult1, MYSQL_ASSOC)) {
        $name[] = $row['name'];
        $date[] = $row['date'];
        $text[] = $row['text'];
        $date2[] = $row['date2 '];
    }

/** SOME CODE HERE **/

    $wrotesql = "UPDATE service_report SET  name ='$name' , $date = '$date',$text = '$text[$nro]', ser_date = '$date2[$nro]' WHERE something = '$something')";

    $wroteresult = mysql_query($wrotesql);

Может, кто-нибудь подскажет, что я делаю не так?

Спасибо.

4b9b3361

Ответ 1

Эта ошибка появляется при попытке использовать синтаксис push короткого массива в строке.

Например, это

$foo = 'foo';
$foo[] = 'bar'; // ERROR!

Я бы рискнул предположить, что одна или несколько переменных $name, $date, $text или $date2 были инициализированы в виде строки.

Изменить: Снова глядя на ваш вопрос, похоже, что вы на самом деле не хотите использовать их в качестве массивов, поскольку вы рассматриваете их как строки ниже.

Если так, измените свои назначения на

$name = $row['name'];
$date = $row['date'];
$text = $row['text'];
$date2 = $row['date2'];

Кажется, есть некоторые проблемы с PHP 7 и кодом, использующим синтаксис push массива пустого индекса.

Чтобы было понятно, они отлично работают в PHP 7+

$previouslyUndeclaredVariableName[] = 'value'; // creates an array and adds one entry

$emptyArray = []; // creates an array
$emptyArray[] = 'value'; // pushes in an entry

Что не работает, так это попытка использовать пустое индексное нажатие для любой переменной, объявленной как строка, число, объект и т.д., Т.е.

$declaredAsString = '';
$declaredAsString[] = 'value';

$declaredAsNumber = 1;
$declaredAsNumber[] = 'value';

$declaredAsObject = new stdclass();
$declaredAsObject[] = 'value';

Все это приводит к фатальной ошибке.

Ответ 2

Вы, вероятно, определили $name, $date, $text или $date2 как строку, например:

$name = 'String';

Затем, если вы относитесь к нему как к массиву, это приведет к фатальной ошибке:

$name[] = 'new value'; // fatal error

Чтобы решить вашу проблему, просто добавьте следующий код в начале цикла:

$name = array();
$date = array();
$text = array();
$date2 = array();

Это будет reset их значение для массива, а затем вы сможете использовать их как массивы.

Ответ 3

Такое поведение описано в разделе Миграция с PHP 7.0.x на PHP 7.1.x/

Оператор пустого индекса больше не поддерживается для строк. Применение оператора пустого индекса к строке (например, $ str [] = $ x) приводит к фатальной ошибке, а не к автоматическому преобразованию в массив.

В моем случае это была простая инициализация. Я исправил это, заменив $foo='' на $foo=[].

$foo='';
$foo[]='test';
print_r($foo);

Ответ 4

это было доступно в php 5.6 в php 7+ вы должны сначала объявить массив

$users = array(); // not $users = ";
$users[] = "762";