user8110171
user8110171

Reputation:

How to redirect from view to controller in codeigniter?

In my header view I wrote this code:

<?php 

    if($this->session->userdata('logged_in')) {
    $query = $this->db->get_where('instructors', array('id' => $this->session->userdata('id'))); 

    $insdatacheck = $query->row_array();

    if($insdatacheck['name'] == '') {
      redirect(base_url().'user/continueregistration');
    } else { ?>
      <script type="text/javascript">alert('test');</script>
      <?php
    }

    }

?>

But it does not redirect to the following page. However, if I write this in the controller, it works properly. I wrote it in header view because I want to check it in every page where enters the user. How can I improve it and write in a proper way? Thanks in advance

Upvotes: 1

Views: 2475

Answers (3)

jvk
jvk

Reputation: 2201

First create session in the controller only,

Then we access session in any page,

$this->load->library('session');
$user=$this->session->userdata('logged_in');

 if (!isset($user)) { 
redirect(base_url().'user/continueregistration');
  } 
 else { 
   <script type="text/javascript">alert('test');</script>
 }

Upvotes: 0

always-a-learner
always-a-learner

Reputation: 3794

Another option is to create a base controller. Place the function in the base controller and then inherit from this.

To achieve this in CodeIgniter, create a file called MY_Controller.php in the libraries folder of your application.

class MY_Controller extends Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function is_logged_in()
    {
        $user = $this->session->userdata('user_data');
        return isset($user);
    }
}

Then make your controller inherit from this base controller.

class X extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function do_something()
    {
        if ($this->is_logged_in())
        {
            // User is logged in.  Do something.
        }
    }
}

Upvotes: 0

Muhammad Usman
Muhammad Usman

Reputation: 1423

I think instead of your header you should put your check inside your controller constructor.

class Test extends CI_Controller {

  function __construct() {
    parent::__construct();

    // if not logged-in redirect to login page
    if ($this->session->userdata('logged_in') == false) {
        redirect('login'); // where you want to redirect
    }
  }
} 

Upvotes: 1

Related Questions