Задание №8 codeigniter a php error was encountered как решить?
После выполнения задания №8 в курсе CodeIgniter+MySQL у меня при редактировании новости вылазят следующие ошибки. При этом редактирование выполняется успешно. В чем может быть проблема?
Ошибки
http://cinemamaster.com/news/edit
A PHP Error was encountered
Severity: Notice
Message: Trying to access array offset on value of type null
Filename: controllers/News.php
Line Number: 61
Backtrace:
File: C:\xampp\htdocs\cinemamaster\application\controllers\News.php
Line: 61
Function: _error_handler
File: C:\xampp\htdocs\cinemamaster\index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Trying to access array offset on value of type null
Filename: controllers/News.php
Line Number: 62
Backtrace:
File: C:\xampp\htdocs\cinemamaster\application\controllers\News.php
Line: 62
Function: _error_handler
File: C:\xampp\htdocs\cinemamaster\index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Trying to access array offset on value of type null
Filename: controllers/News.php
Line Number: 63
Backtrace:
File: C:\xampp\htdocs\cinemamaster\application\controllers\News.php
Line: 63
Function: _error_handler
File: C:\xampp\htdocs\cinemamaster\index.php
Line: 315
Function: require_once
Новость успешно отредактирована!
News.php
<?php
defined('BASEPATH') OR exit('No direct 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);
$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');
}
}
News_model.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();
}
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));
}
}
edit.php
<form method="post" action="/news/edit">
<input type="input" name="slug" value="<?php echo $slug_news; ?>" placeholder="slug"></br>
<input type="input" name="title" value="<?php echo $title_news; ?>" placeholder="Название новости"></br>
<textarea name="text" placeholder="Текст новости"><?php echo $content_news; ?></textarea></br>
<input type="submit" name="submit" value="Редактировать новость"></br>
</form>
routes.php
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['news'] = 'news';
$route['news/create'] = 'news/create';
$route['news/edit'] = 'news/edit';
$route['news/(:any)'] = 'news/view/$1';
6 ответов
Исходный код с аналогичными ошибками. В том то и проблема!
Базу брал из дампа с урока. Версия PHP 7.4.1. Возможно ли, что проблема в новой версии?
Благодарю! Проблема решилась после установки XAMPP версии 7.1.30.
Исходный код скачайте и сравните со своим. У меня нормально, без ошибок.
Какая версия PHP? Базу из дампа исходника делал или сам заполнял?
Написано, что:
В скачиваемом архиве находится исходный код всего проекта КиноМонстер в финальной сборке, протестированный на версии PHP 7.1.10 + SQL дамп базы данных.
Да, скорее всего изменения коснулись "пустых" данных в каком либо массиве, наверное дополнительную проверку нужно поставить на пустое значение. Я загуглиг, заметил, что много из-за этого изменения проблем, начиная от фреймворков, заканчивая всякими wordpress и друпал. Можно php 7.3 поставить или чтобы 100% все работало, как в исходнике.