Прохожу курс fructcode. Пишу сайт о фильмах на php через xampp, застрял на CRUD приложении. Уроки делались на версии 7.1 версии php, а у меня стоит 7.4 и при попытке применить функцию редактирования новости выдаёт Notice: Trying to access array offset on value of type null. Я уже полазил на стековерфлоу и на сайте fructcode: на stackoverflow пример не тот, хотя суть ошибки я уловил (переменная не должна быть пустой), а на fructcod'e единственное решение это установить старую версию php. Меня оно не устраивает, т.к. никак не помогает понять как исправить ошибку. Если дописать проверку то вместо notice вылетает она PHP: public function edit($slug = NULL) { $data['title'] = "редактировать новость"; $data['news_item'] = $this->news_model->getNews($slug); //проверка /*if(empty($data['news_item'])) { show_404(); }*/ //на следующих трех строках вылетает notice $data['title_news'] = $data['news_item']['title']; $data['content_news'] = $data['news_item']['text']; $data['slug_news'] = $data['news_item']['slug']; if($this->input->post('slug') && $this->input->post('title') && $this->input->post('text')) { $slug = $this->input->post('slug'); $title = $this->input->post('title'); $text = $this->input->post('text'); if($this->news_model->updateNews($slug, $title, $text)) { echo "Новость успешно отредактирована"; } } $this->load->view('templates/header', $data); $this->load->view('news/edit', $data); $this->load->view('templates/footer'); }
Смотри код этого метода $this->news_model->getNews($slug) на предмет почему в 7.1 он возвращает что-то, а в 7.4 нет. Можешь даже сюда его запостить.
PHP: <?php class News_model extends CI_Model { public function __construct() { $this->load->database(); } public function getNews($slug = FALSE) { if($slug === FALSE) { $query = $this->db->get('news'); return $query->result_array(); } $query = $this->db->get_where('news', array('slug' => $slug)); return $query->row_array(); }
Я правильно понимаю, что в БД новости со slug=$slug все же нет и весь вопрос в "почему на 7.4 кидает notice, а на 7.1 нет"? После getNews() надо проверять что он вернул и на основе этого принимать решение что делать дальше. Если надо всего лишь избавиться от notice -- то писать так: PHP: $data['title_news'] = $data['news_item']['title'] ?? null;