Question

I'm working in project and I coding it using Codeigniter PHP Framework, what I want to do is that I want to make a dynamic navigation menu, an ordinary menu for guests Home - Register - Login ... and another menu to registered users options menu and so on ...

Here is the code of my header template:

<?php
  if($this->session->userdata('logged_in'))
  {
    $session_data = $this->session->userdata('logged_in');
    $data['username'] = $session_data['username'];
?>
<ul class="nav navbar-nav navbar-right">
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Hey, <?php echo $data['username']; ?></a>
    <ul class="dropdown-menu">
      <a href="<?php echo base_url(); ?>/login/logout">Déconnexion</a>
    </ul>
  </li>
</ul>
<?php }else{ ?>
<ul class="nav navbar-nav navbar-right">
  <li><a href="<?php echo base_url(); ?>User">Inscrivez-vous</a></li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Connectez-vous <b class="caret"></b></a>
    <ul class="dropdown-menu ins">
      <?php echo form_open("verifylogin"); ?>
       <input type="text" style="margin: 5px 0;" id="username" name="username" class="form-control" placeholder="Nom d'utilisateur"/>
       <input type="password" style="margin: 5px 0;" id="password" name="password" class="form-control" placeholder="Mot de passe"/>
       <input type="submit" class="btn btn-primary" value="Connexion" />
      <?php echo form_close(); ?>
      <p><a href="#">Mot de passe oublier?</a></p>
    </ul>
  </li>
</ul>
<?php } ?>

It works like this but another problem has been revealed, The Content and the Footer section are showed in twice in the page, here is picture of the problem :

https://docs.google.com/file/d/0B2keUK5KhVo8bDk1OU1yQ2xfU0k/edit?usp=drivesdk

Here's my home Controller

session_start(); //we need to call PHP's session object to access it through CI
class Pages extends CI_Controller {

public function view($page = 'home')
{
      if($this->session->userdata('logged_in'))
      {
        $session_data = $this->session->userdata('logged_in');
        $data['username'] = $session_data['username'];

        $this->load->view('templates/header');
        $this->load->view('pages/home');
        $this->load->view('templates/footer');
      }/*
      else
      {
        //If no session, redirect to login page
        redirect('login', 'refresh');
      }*/
      $this->load->view('templates/header');
      $this->load->view('pages/home');
      $this->load->view('templates/footer');
    }

    function logout()
    {
      $this->session->unset_userdata('logged_in');
      session_destroy();
      redirect('/', 'refresh');
    }
}
Was it helpful?

Solution

I think you have mistaken the logic in your controller. In case the user is logged in your views are loaded two times. Overwrite your view function with this one:

public function view($page = 'home')
{
    $session_data = $this->session->userdata('logged_in');
    $data['username'] = $session_data['username'];

    $this->load->view('templates/header');
    $this->load->view('pages/home');
    $this->load->view('templates/footer');
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top