У меня вопрос по 8 уроку курса codeigniter?

0

Вот мой код:

<?php

defined('BASEPATH') OR exit('No direc script access allowed');

class News extends CI_Controller {
    
    public function __construct(){
        parent::__construct();
        $this->load->model('news_model');
    }

    public function index() {
        $data['title'] = 'Все новости';
        $data['news'] = $this->news_model->getNews();

        $this->load->view('templates/header', $data);
        $this->load->view('news/index', $data);
        $this->load->view('templates/footer');
    }

    public function view($slug = NULL) {
        $data['news_item'] = $this->news_model->getNews($slug);

        if (empty($data['news_item'])) {
            show_404();
        }

        $data['title'] = $data['news_item']['title'];
        $data['content'] = $data['news_item']['text'];

        $this->load->view('templates/header', $data);
        $this->load->view('news/view', $data);
        $this->load->view('templates/footer');
    }

    public function create() {
        $data['title'] = "Добавить новость";

        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->setNews($slug, $title, $text)) {
                $this->load->view('templates/header', $data);
                $this->load->view('news/success', $data);
                $this->load->view('templates/footer');
            } else {
                $this->load->view('templates/header', $data);
                $this->load->view('news/create', $data);
                $this->load->view('templates/footer');
            }
        }


    }

    public function edit($slug = NULL) {
        $data['title'] = "редактировать новость";
        $data['news_item'] = $this->news_model->getNews($slug);

/*      if(empty($data['news_item'])) {
            show_404();
        }*/

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

    }
}

И у меня вот такие ошибки выходят:

A PHP Error was encountered
Severity: Warning

Message: Trying to access array offset on value of type null

Filename: controllers/News.php

Line Number: 67

Backtrace:

File: C:\xampp\htdocs\kinomonster\application\controllers\News.php
Line: 67
Function: _error_handler

File: C:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once










A PHP Error was encountered
Severity: Warning

Message: Trying to access array offset on value of type null

Filename: controllers/News.php

Line Number: 68

Backtrace:

File: C:\xampp\htdocs\kinomonster\application\controllers\News.php
Line: 68
Function: _error_handler

File: C:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once










A PHP Error was encountered
Severity: Warning

Message: Trying to access array offset on value of type null

Filename: controllers/News.php

Line Number: 69

Backtrace:

File: C:\xampp\htdocs\kinomonster\application\controllers\News.php
Line: 69
Function: _error_handler

File: C:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once

Подскажите пожалуйста что мне делать.

codeigniter

3 ответов

0

Ошибка говорит о том, что при обращению к массиву, там ничего нет. Нужно посмотреть, что приходит от модели с новостями. Через var_dump функцию это можно сделать.

вот тут пример есть как пользоваться этой функцией: 

https://www.php.net/manual/en/function.var-dump.php

или можно исходный код киномонстр скачать и сравнить со своим кодом

0

Я правильно понимаю, что ошибка возникает на этой странице?

public function edit($slug = NULL) {

Если да, покажи вывод var_dump примерно так:

public function edit($slug = NULL) {
 $data['title'] = "редактировать новость";
 $data['news_item'] = $this->news_model->getNews($slug);

 echo "<pre>";
     var_dump($this->data['news_item']);
 echo "</pre>";
 die();

Ошибка говорит, что в массиве $data['news_item']['slug'] нет slug ключа, вот в этой строчке:

$data['slug_news'] = $data['news_item']['slug'];

Возможно забыл добавить slug в базу данных.

0
<?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();
		}

		public function setNews($slug, $title, $text) {
			$data = array (
				'title' => $title,
				'slug' => $slug,
				'text' => $text
			);

			return $this->db->insert('news', $data);
		}		

	public function updateNews($slug, $title, $text) {

		$data = array(
			'title' => $title,
			'slug' => $slug, 
			'text' => $text
		);

		return $this->db->update('news', $data, array('slug' => $slug));

	}

	}
 ?>

Вот мой код модели.

Sign up or Log in to write an answer