代码之家  ›  专栏  ›  技术社区  ›  Mohsin

ajax codeigniter中未过滤数据

  •  0
  • Mohsin  · 技术社区  · 6 年前

    我想通过下拉列表筛选数据,但它会提供所有数据。。。。

    这是我的带有ajax功能的模型

    public function ajax()
    {
         $query = "SELECT * from info_user Where user_status ='1'"; 
        if(!empty($size)){
            $query  .= " and city in('".$size."')"; 
        }
        if(!empty($sprice) && !empty($eprice)){
            $query  .=  " and charge_per_hour >='".$sprice."' and 
            charge_per_hour <='".$eprice."'"; 
        }
    
        $result = $this->db->query($query);
        return $result->result();   
    }
    

    这是我的控制器

    public function ajax()
    {
    
        $size = $this->input->post('size');
        $sprice = $this->input->post('sprice');
        $eprice = $this->input->post('eprice');
    
        $this->load->model('ajax_model');
        $result = $this->ajax_model->ajax();
    
    
        foreach( $result as $row )
        {   
            echo $row->name.'<br>'; 
            echo $row->charge_per_hour.'<br>'; 
            echo $row->city.'<br>'; 
        }
    }
    

    这是它负责运行代码。。。

    它为我提供所有数据,而不是选定的数据

    https://i.imgur.com/SdwzKJ9.png

    4 回复  |  直到 6 年前
        1
  •  2
  •   Mehta Harshit    6 年前

    因此,要使用下拉菜单筛选数据,您需要 传递值 下拉到控制器,即城市名称,并将其包含到您的查询和呼叫中 ajax() onChange() 针对COD点火器

        2
  •  1
  •   Virb    6 年前

    在这里,您必须将要发送的变量传递给 模型 。 您没有将变量传递给模型中没有包含在模型函数中的模型。

    请在下面选中此选项,这可能会有所帮助。

    控制器

    public function ajax()
    {
    
        $size = $this->input->post('size');
        $sprice = $this->input->post('sprice');
        $eprice = $this->input->post('eprice');
    
        $this->load->model('ajax_model');
        $result = $this->ajax_model->ajax($size,$sprice,$eprice);
    
    
        foreach( $result as $row )
        {   
            echo $row->name.'<br>'; 
            echo $row->charge_per_hour.'<br>'; 
            echo $row->city.'<br>'; 
        }
    }
    

    模型

    public function ajax($size = '',$sprice = '',$eprice = '')
    {
         $query = "SELECT * from info_user Where user_status ='1'"; 
        if($size != '')){
            $query  .= " and city in('".$size."')"; 
        }
        if(($sprice != '') && ($eprice != '')){
            $query  .=  " and charge_per_hour >='".$sprice."' and 
            charge_per_hour <='".$eprice."'"; 
        }
    
        $result = $this->db->query($query);
        return $result->result();   
    }
    
        3
  •  1
  •   Varuna    6 年前

    看起来您并没有将过滤参数传递给ajax模型。运行脚本时,它只执行 $query = "SELECT * from info_user Where user_status ='1'"; 部分在这种情况下,输出将为 user\u status=1的所有数据。

    if(!empty($size)) and if(!empty($sprice) && !empty($eprice)) conditions are always false.
    

    所以,尝试将过滤五分之一注入ajax模型。

        4
  •  1
  •   MERT DOĞAN    6 年前

    您构建的模型和控制器在sql查询方面存在很大的安全问题。

    始终尝试使用查询生成器生成SQL查询,以实现更安全的查询。

    我纠正了您的模型和控制器结构,必须如下所示:

    控制器

    public function ajax(){
    
        $size = $this->input->post('size');
        $sprice = $this->input->post('sprice');
        $eprice = $this->input->post('eprice');
    
        $this->load->model('ajax_model');
    
        $result = $this->ajax_model->ajax( $size , $sprice , $eprice );
    
        foreach( $result as $row ) {   
            echo '<p>';
    
                echo $row['name'].'<br/>';
                echo $row['charge_per_hour'].'<br/>';
                echo $row['city'].'<br/>';
    
            echo '</p><hl>';//split between rows
        }
    
    }
    

    模型

    public function ajax( $size = null , $sprice = null , $eprice = null ){
    
        $this->load->database();//if not loaded automatically.
    
        $this->db->select('*')->from('info_user')->where('user_status',1);
    
        if($size){
            $size=explode(',',$size);//i think your post value for $size delimited with comma (,).
            $this->db->where_in('city',$size);
        }
    
        if($sprice){//$this->input->post('sprice') returns false when it is not provided. You may control it is false or not. 
            $this->db->where('charge_per_hour>=',$sprice);
        }
    
        if($eprice){
             $this->db->where('charge_per_hour<=',$eprice);
        }
    
        $result = $this->db->get();
    
        return $result->result_array();//using array needs a little lower system resuorces then objects.
    
    }