Вопрос по php, mysql –  с участием

46

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

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

Код:

$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 '];
    }
.
.
.
FORM
.
.
.
$wrotesql="UPDATE service_report SET  name ='$name' , $date = '$date',$text = '$text[$nro]', ser_date = '$date2[$nro]' WHERE something = '$something')";

$wroteresult=mysql_query($wrotesql);    

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

Спасибо.

в... ? Не могли бы вы рассказать нам линию? Shoe
Это сработало как шарм, изменили скобки для скобок. Alan Masters

Ваш Ответ

3   ответа
78

о массива в строке.

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

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

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

@JeremyYoung Ваш комментарий помог в моем случае, мой экземпляр Wordpress перестал работать, и когда я переключился с 7.2 на 5.6, он работал. Mihail Minkov
Я обнаружил, что это может быть проблемой, связанной с переходом с php 5 на php 7. php 5 был более терпим к неопределенности в том, является ли переменная массивом или нет, чем php 7. В большинстве случаев решение состоит в том, чтобы объявить массив явно, как объяснено в этом ответе. Jeremy Young
2

Миграция с PHP 7.0.x на PHP 7.1.x /

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

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

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

Вы, наверное, определили$name, $date, $text или же$date2 быть строкой, например:

$name = 'String';

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

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

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

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

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

Я попробовал это решение, но я все еще получаю ту же проблему. Я не знаком с PHP. $ taxquery = array (); <- Я добавил эту строку. $ taxquery = $ q-> get ('tax_query'); $ taxquery [] = array ('taxonomy' => 'product_type', 'field' => 'slug', 'rules' => 'auction', 'operator' => 'NOT IN'); Anders Persson
Или объявить это$name = null Albert Hidalgo

Похожие вопросы