2013-01-24 83 views
0

我们一直在开发一个系统,并且我们发现了这种错误并且我们尝试了我们认为逻辑上正确的条件,但我们总是指向其他部分。在我们的系统中,我们已将系统中用户电子邮件日志记录的每个值分配给this->session->userdata('username')。当某个用户使用他自己的电子邮件帐户登录时,$this->session->userdata('username')的值自动为该用户登录的电子邮件。但是,如果我使用其他用户电子邮件更改了url部分中的电子邮件,我将被导向该帐户所以我们在if语句部分中做了什么。这里是代码:

public function get_course() 
{ 

    if($this->session->userdata['username']==$this->uri->segment(3)) { 

     $data=$this->data; 

     $tennant_url_id=$this->uri->segment(3); 

     if(!empty($tennant_url_id)) { 
     $tennant_code=$tennant_url_id; 
     } else { 
     $tennant_code=$this->session->userdata('username'); 
     } 

     $num_row=$this->session->userdata('total_row'); 
     $total_row=$this->course_booking_model->check_tennant($tennant_code); 
     $data['tennant_id'] = $tennant_code; 
     $data['total_row']=$total_row; 
     $data['data']=$this->course_booking_model->get_all_courses($tennant_code); 
     $this->load->view('view_course_admin',$data); 

    } else { 
     $this->session->set_flashdata('Sess_expire', 'Your session has expired! Please Login again.'); 

     redirect("/admin/logout"); 
    } 
} 

它工作正常,当我更改电子邮件中的网址,然后我注销。但是,如果我单击我的页面的任何链接或刷新页面,甚至不更改URL中的电子邮件,那么else部分将始终执行并指向注销页面。有人可以弄清楚这里有什么问题吗?非常感谢

+0

你最好的赌注是你做的任何逻辑之前呼应了这两个变量的值。这样你就可以看到发生了什么,这取决于你的网址等。'echo'user:'。$ this-> session-> userdata ['username']。' | uri:'。 $ this-> uri-> segment(3); die();' – Jeemusu

+0

是的,我已经这样做了。它们具有相同的价值。 – Eli

+0

我有很多实验来揭示这里真正的错误。当我删除if部分中的内容,但如果参数条件相同,只是回显一个单词,然后刷新它,它工作正常,我不再重定向到其他部分。代码看起来是正确的。但是,如果我得到我的原始内容,即使刷新页面,我也会再次得到相同的错误。我不知道这里有什么问题。 – Eli

回答

0

一方面,

if($this->session->userdata['username'] == $this->uri->segment(3)) 

应该是:

//not square brackets but regular brackets 
if($this->session->userdata('username') == $this->uri->segment(3)) 
+0

是的..我已经尝试过,但仍然是相同的结果。 $ this-> session-> userdata ['username']和$ this-> session-> userdata('username')具有相同的值,因为我回应了他们两个。感谢您帮助Mudshark。 – Eli

+0

我有很多实验只是为了揭示这里真正的错误。当我删除if部分中的内容,但如果参数条件相同,只是回显一个单词,然后刷新它,它工作正常,我不再重定向到其他部分。代码看起来是正确的。但是,如果我得到我的原始内容,即使刷新页面,我也会再次得到相同的错误。我不知道这里有什么问题。 – Eli

+0

整个secundary if/else块在你的初始if中是多余的,因为你已经检查过会话用户名等于uri段3.如果你简单地用'$ tennant_code = $ this-> uri- >段(3);'? – Mudshark