За последние 24 часа нас посетили 22476 программистов и 1152 робота. Сейчас ищет 881 программист ...

Trying to access array offset on value of type null

Тема в разделе "PHP для новичков", создана пользователем ScopePope, 29 окт 2020.

  1. ScopePope

    ScopePope Новичок

    С нами с:
    29 окт 2020
    Сообщения:
    2
    Симпатии:
    0
    Прохожу курс 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:
    1.     public function edit($slug = NULL) {
    2.  
    3.         $data['title'] = "редактировать новость";
    4.         $data['news_item'] = $this->news_model->getNews($slug);
    5.  
    6.         //проверка
    7.         /*if(empty($data['news_item'])) {
    8.             show_404();
    9.         }*/
    10.  
    11. //на следующих трех строках вылетает notice
    12.  
    13.         $data['title_news'] = $data['news_item']['title'];
    14.         $data['content_news'] = $data['news_item']['text'];
    15.         $data['slug_news'] = $data['news_item']['slug'];
    16.  
    17.         if($this->input->post('slug') && $this->input->post('title') && $this->input->post('text')) {
    18.             $slug = $this->input->post('slug');
    19.             $title = $this->input->post('title');
    20.             $text = $this->input->post('text');
    21.  
    22.             if($this->news_model->updateNews($slug, $title, $text)) {
    23.                 echo "Новость успешно отредактирована";
    24.             }
    25.         }
    26.  
    27.         $this->load->view('templates/header', $data);
    28.         $this->load->view('news/edit', $data);
    29.         $this->load->view('templates/footer');
    30.     }  
     

    Вложения:

  2. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Смотри код этого метода $this->news_model->getNews($slug) на предмет почему в 7.1 он возвращает что-то, а в 7.4 нет.
    Можешь даже сюда его запостить.
     
  3. ScopePope

    ScopePope Новичок

    С нами с:
    29 окт 2020
    Сообщения:
    2
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3. class News_model extends CI_Model {
    4.  
    5.     public function __construct() {
    6.         $this->load->database();
    7.     }
    8.  
    9.     public function getNews($slug = FALSE) {
    10.         if($slug === FALSE) {
    11.             $query = $this->db->get('news');
    12.             return $query->result_array();
    13.         }
    14.  
    15.         $query = $this->db->get_where('news', array('slug' => $slug));
    16.         return $query->row_array();
    17.     }
     
  4. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Я правильно понимаю, что в БД новости со slug=$slug все же нет и весь вопрос в "почему на 7.4 кидает notice, а на 7.1 нет"?
    После getNews() надо проверять что он вернул и на основе этого принимать решение что делать дальше. Если надо всего лишь избавиться от notice -- то писать так:
    PHP:
    1. $data['title_news'] = $data['news_item']['title'] ?? null;
     
    #4 brevis, 1 ноя 2020
    Последнее редактирование: 1 ноя 2020