Codeigniter视图意外显示所有数据

时间:2018-08-03 17:40:26

标签: php sql codeigniter

我只想在视图中显示用户数据。在当前情况下,所有数据都显示出来,或者由登录用户1填充,也由登录用户2填充。这是控制器代码行中的问题还是会话问题?问题是任何用户都可以看到其他用户数据。

$sql="SELECT u.*,f.manu_id,m.journal_id,m.title,j.sub_title,f.created_date,f.final_status

这是我的User_controller代码:

public function FinalManuscriptSubmit()
{
    if ($this->Common_model->Is_User_Logged()) 
    {   
        $data=array();
        $joinClause=array();
        $whereClause=array();

        #$session_data = $this->session->userdata('user_logged_in');
        $session_data = $this->session->userdata('user_email');

        $u_id         = $session_data['id'];

        $sql="SELECT u.*,f.manu_id,m.journal_id,m.title,j.sub_title,f.created_date,f.final_status
        FROM user u 
        INNER JOIN final_manuscript f on f.user_id = u.user_id
        INNER JOIN manuscript m on m.manu_id = f.manu_id
        INNER JOIN journal j on j.sub_id = m.journal_id
            ";
        $data['list']=$this->Common_model->get_data_by_query($sql); 
        //print_r($data['list']);exit;
        $this->load->view('user/header');
        $this->load->view('user/showmanu',$data);
        $this->load->view('user/footer');
    }else{
        redirect('user/login');
    }
}

这是我的观点

 <table class="table table-hover">
                  <tr>
                    <th>Manuscript ID</th>
                    <th>Journal</th>
                    <th>Title</th>
                    <th>Date</th>
                    <th>Action</th>
                  </tr>
                  <?php 
                    if(!empty($list)>0)
                      { 
                        foreach ($list as $row) 
                          {
                  ?>
                  <tr>
                    <td><?php echo $row->manu_id;?></td>
                    <td><?php echo $row->sub_title;?></td>
                    <td><?php echo $row->title;?></td>
                    <td><?php echo $row->created_date;?></td>
                    <td>
                      <a href="<?php echo site_url('user/removemanuscript/'.base64_encode($row->manu_id)); ?>" title="Soft Delete">Remove
                        </a>
                        <?php if($row->final_status==1){ ?>
                        <span class="label label-primary">Approved</span>
                      <?php }else if($row->final_status==2){ ?>
                        <span class="label label-danger">Disapproved</span>
                      <?php }else{ ?>
                       <span class="label label-warning">Pending</span>
                      <?php } ?>
                    </td>
                  </tr>
                  <?php
                         } }   
                  ?>
                </table>

1 个答案:

答案 0 :(得分:-1)

问题在于,您永远不会设置查询来获取登录用户。您需要在查询中设置where子句。

$sql="SELECT
    u.*, f.manu_id, m.journal_id,
    m.title, j.sub_title, f.created_date, f.final_status
    FROM user u 
    INNER JOIN final_manuscript f on f.user_id = u.user_id
    INNER JOIN manuscript m on m.manu_id = f.manu_id
    INNER JOIN journal j on j.sub_id = m.journal_id
    WHERE u.user_id = :u_id";

通过这种方式,您只会在会话中获得与您的用户ID匹配的用户。

如您所见,我使用了占位符:u_id$u_id应该绑定到其中,并使用您拥有的任何数据库驱动程序/库。这样可以防止出现SQL注入漏洞。