как добавить проверку на существование переменной

Serebos

Новичок
Всем привет.

Есть рабочая форма редактирования новости (которая работает по ссылке, например /news/edit/news-2/), я добавил туда проверку существования n-нной новости (то есть, если новости не существует, например news-33, то по ссылке /news/edit/news-33/ выводится сообщение об отсутствии такой страницы). Но код начал выдавать также ошибку 404 после внесения изменений в существующую новость (ошибка возникает в тот момент, когда должна выводиться информация об успешном редактировании новости).

Код:
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'] = (isset($data['news_item']['title'])) ? $data['news_item']['title'] : "";
        $data['content_news'] = (isset($data['news_item']['text'])) ? $data['news_item']['text'] : "";
        $data['slug_news'] = (isset($data['news_item']['slug'])) ? $data['news_item']['slug'] : "";

        if($this->input->post('slug') && $this->input->post('title') && $this->input->post('text')) {

        $slug = htmlspecialchars($this->input->post('slug'), ENT_QUOTES, 'UTF-8');
            $title = htmlspecialchars($this->input->post('title'), ENT_QUOTES, 'UTF-8');
            $text = htmlspecialchars($this->input->post('text'), ENT_QUOTES, 'UTF-8');


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

Каким образом можно задать проверку, такую, например?


Код:
if(!empty($data['news_item']))  {

                       не пойму, что здесь указать, если вообще этот вариант подходит здесь

} else {
 show_404();
}
Также думаю, что isset можно реализовать здесь. Самостоятельно не разобрался с этим также.

Как быть в этом случае?

Заранее, СПАСИБО!
 

WMix

герр M:)ller
Партнер клуба
я не знаю что вернет
$this->news_model->getNews($slug);

варианты
Код:
if($data['news_item'] !== null)
Код:
try{
  $data['news_item'] = $this->news_model->getNews($slug);
}
catch(...){}
 

Serebos

Новичок
я не знаю что вернет
$this->news_model->getNews($slug);
метод возвращает
Код:
   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();
  }
поэтому такую вот проверку задал, но код отказывается работать

Код:
if(!empty($data['news_item']))  {
    $query = $this->db->get_where('news', array('slug'=>$slug));
    return $query->row_array();
  } else {
show_404();
}
 

fixxxer

К.О.
Партнер клуба
Код исправляется не пристальным взглядом, а отладкой. Со времен перфокарт человечество немного продвинулось в удобстве разработки, изобретены отладчики.

Берешь, настраиваешь xdebug в своей IDE (настоятельно рекомендую PHPStorm), ставишь breakpoint в нужном месте, смотришь, какое получается значение переменной, жмешь кнопочку step и видишь прямо построчно, как твой код исполняется на реальном запросе, с которым получается не то, что ты ожидаешь. После этого сразу становится очевидно, что и как надо исправить, причем в куда более сложных случаях чем твой.
С настройкой надо немного повозиться, но эти пара часов, инвестированных в настройку, сэкономят тебе сотни часов в будущем.

Заниматься интерпретацией кода в своей голове вместо того, чтобы воспользоваться реальным интерпретатором PHP и посмотреть, что получается - занятие, может, и полезное для мозгов, но крайней непродуктивное. Мне вот лень, я даже пытаться не стану. Именно поэтому такие вопросы на форуме задавать контрпродуктивно - у меня нет полного кода, который можно запустить под отладчиком, и ни у кого тут нет, а у тебя есть.

Вот если посмотрел отладчиком и все равно непонятно, почему PHP таким образом себя ведет - вот тогда уже можно спрашивать на форуме, указав, в каком конкретном месте ожидания расходятся с вывяленной отладчиком реальностью.
 
Последнее редактирование:
Сверху