Daniel Omara Daniel Omara - 5 months ago 23
PHP Question

404 Page not showing in codeigniter

I have a page to be accessible by id e.g

http:/localhost/v2/indicator/details/directives/4


however when I remove the
id
e.g
http:/localhost/v2/indicator/details/directives
or
http:/localhost/v2/indicator/details/directives/mail.html
it still tries to access the page and gives me errors. I want it to give me a 404 not found page which i have.

Error

Message: Missing argument 2 for Indicator::details()

Filename: controllers/Indicator.php

Line Number: 140

Backtrace:

File: C:\wamp\www\v2\application\controllers\Indicator.php Line: 140
Function: _error_handler

File: C:\wamp\www\v2\index.php Line: 315 Function: require_once
Severity: Notice

Message: Undefined variable: id

Filename: controllers/Indicator.php

Line Number: 154

Backtrace:

File: C:\wamp\www\v2\application\controllers\Indicator.php Line: 154
Function: _error_handler

File: C:\wamp\www\v2\index.php Line: 315 Function: require_once


Controller section for details

public function details($directive, $id) {

$this->data['current_user_menu'] = '';
if($this->ion_auth->in_group('admin'))
{


$data['user'] = $this->ion_auth->user()->row();
$data['indicators'] = $this->core->getIndicators();
// load views and send data
$this->data['current_user_menu'] = $this->load->view('header', $data);
$this->data['current_user_menu'] = $this->load->view('templates/view_indicator', $data);
$this->data['current_user_menu'] = $this->load->view('footer_main');
}
else
{
//If no session, redirect to login page
redirect('auth/login');
}
}


the view has

<?php $in_id = $this->uri->segment(4);?>


Custom 404 Controller

class My404 extends CI_Controller
{
public function __construct()
{
parent::__construct();
}

public function index()
{
$this->layout->set_body_attr(array('class' => 'gray-bg'));

$this->layout->add_css_files(array('bootstrap.min.css'), base_url().'assets/css/');
$this->layout->add_css_files(array('font-awesome.css'), base_url().'assets/font-awesome/css/');
$this->layout->add_css_files(array('animate.css','style.css'), base_url().'assets/css/');
$this->output->set_status_header('404');
$this->load->view('404');//loading in my template
}
}

Answer

Try like this

Functions

  1. is_int in php.net
  2. empty in php.net
  3. show_404 in codeigniter.com

In indicator Controller

public function details($directive, $id) {

    if (!is_int($id) || empty($id)) 
    {
        show_404();
    } 
    else {
        $this->data['current_user_menu'] = '';
        if($this->ion_auth->in_group('admin'))
        {
            $data['user'] = $this->ion_auth->user()->row();
            $data['indicators']  = $this->core->getIndicators(); 
            // load views and send data
            $this->data['current_user_menu'] = $this->load->view('header', $data);
            $this->data['current_user_menu'] = $this->load->view('templates/view_indicator', $data);
            $this->data['current_user_menu'] = $this->load->view('footer_main');
        }
        else
        {
            //If no session, redirect to login page
            redirect('auth/login');
        }
    }
}