Получение предупреждения: array_push() ожидает, что параметр 1 будет массивом, строка задана /function.php

#php #arrays #wordpress #session

Вопрос:

Я не настолько дружелюбен к кодированию, потратил почти 5 дней на поиск решения. Недавно сменил хостинг, а потом это начало происходить. В то же время также получил другие предупреждения, такие как

«Предупреждение: Не удается изменить информацию о заголовке — заголовки уже отправлены (вывод запущен в /var/www/u1524808/genericpanda.com/wp-содержимое/темы/pillshope/функции.php:278) в /var/www/u1524808/genericpanda.com/wp-login.php на линии 400»

и из-за этого я не могу войти в панель управления WordPress. Действительно переживаю трудные времена. Вот функция, в которой я получаю ошибку. Действительно нужна помощь, заранее спасибо!!!

 function register_my_session() {  if (!session_id()) {  session_start();  }  $_SESSION['cart']='';  if ($_SERVER["REQUEST_METHOD"] == "POST") {  array_push($_SESSION['cart'], $_POST);  } } add_action('init', 'register_my_session');  

Комментарии:

1. themes/pillshope/functions.php:278 уже отправил вывод, поэтому session_start() не может работать. Возможно, было бы хорошей идеей опубликовать соответствующую часть этого файла

Ответ №1:

Две вещи

  1. вывод уже отправлен, поэтому не используйте session_start (), однако, если вы хотите добавить и передать предупреждение, напишите это так

    @session_start()

  2. array_push($_SESSION[‘корзина’], $_POST);

$_SESSION может быть массивом, $_SESSION[‘корзина’] имеет пустую строку, как вы назначили ее с пустыми кавычками («)

 $_SESSION['cart'] = ''  

поэтому, когда вы пытаетесь вставить данные в $_SESSION[‘корзина’], это предупреждает вас

Вы можете либо написать $_SESSION[‘корзина’] = [], и тогда ваш код будет работать, либо

 array_push($_SESSION['cart'], $_POST);   

может быть

 array_push($_SESSION, $_POST);   

но более поздняя часть может стереть все остальные данные SESSON, поэтому я предлагаю вам выбрать первую альтернативную замену

 $_SESSION['cart'] = ''   

с

 $_SESSION['cart'] = []   

и попробуй.

Комментарии:

1. @Роберт, если это сработало, давайте отметим, что ответ принят, чтобы кто-то другой мог учиться или проводить исследования. Спасибо!

Ответ №2:

Вы используете array_push, но ваш $_SESSION [«корзина»] является строкой, потому что вы инициализируете ее как»», но вместо этого вы должны сделать $_SESSION [«корзина»] = массив()