Codeigniter: подобный запрос с пустыми данными post

#php #sql #codeigniter #activerecord

#php #sql #codeigniter #activerecord

Вопрос:

я запрашиваю базу данных по опубликованным значениям через форму, используя or_like. Если ни одно из опубликованных полей не является пустым, приведенный ниже код работает

         $tbl_name= 'tbl_member_'.$this->session->userdata('userid');
        $this->db->select('name,email,phone');
        $this->db->from($tbl_name);
        $this->db->group_start();
        $this->db->like('name', $this->input->post('name'));
        $this->db->or_like('phone',$this->input->post('phonenumber'));
        $package= $this->input->post('package');
        $this->db->or_like('body_weight', $this->input->post('body_weight'));
        $this->db->group_end();
        $query = $this->db->get();
        return  $query->result());
  

в противном случае он печатает все записи, пожалуйста, подскажите мне, как я могу исправить мою проблему, что пустое значение игнорируется, я попытался обернуть свой запрос, как показано ниже, в блоки php, но это не сработало

         $tbl_name= 'tbl_member_'.$this->session->userdata('userid');
        $this->db->select('name,email,phone');
        $this->db->from($tbl_name);
        $this->db->group_start();
        if($this->input->post('name') amp;amp; $this->input->post('name')!='' ){
            $this->db->like('name', $this->input->post('name'));
        }
        if($this->input->post('phonenumber') amp;amp; $this->input->post('phonenumber')!='' ){
            $this->db->or_like('phone',$this->input->post('phonenumber'));
        }
        if($this->input->post('package') amp;amp; $this->input->post('package')!='' ){
            $package= $this->input->post('package');
        }
        if($this->input->post('body_weight') amp;amp; $this->input->post('body_weight')!='' ) {
            $this->db->or_like('body_weight', $this->input->post('body_weight'));
        }
        if($this->input->post('blood_group') amp;amp; $this->input->post('blood_group')!='' ){
            $this->db->or_like('blood_group',$this->input->post('blood_group'));

        }
        if($this->input->post('gender') amp;amp; $this->input->post('gender')!='' ){
            $this->db->or_like('gender',$this->input->post('gender'));
        }

        $this->db->group_end();
        $query = $this->db->get();
    
  

Спасибо

Редактировать

Я использовал приведенный ниже код для решения моей проблемы, и он отлично сработал :

          if($this->input->post()){
         $form_values= array(
         'name'         =>  $this->input->post('name'),
            'phone'         =>  $this->input->post('phonenumber'),
            'gender'        =>  $this->input->post('gender'),
            'package'       =>  $this->input->post('package'),
            'body_weight'   =>  $this->input->post('body_weight'),
            'blood_group'   => $this->input->post('blood_group'),
        );
        $data['fields']= $form_values;
        $form_values=array_filter($form_values);
        if (!empty($form_values)){
            $tbl_name= 'tbl_member_'.$this->session->userdata('userid');
            $this->db->select('id,name,phone,blood_group,gender,body_weight,package');
            $this->db->from($tbl_name);
            $this->db->like($form_values);
            $data['members'] = $this->db->get()->result();

        }
  

Комментарии:

1. У вас действительно есть таблица для каждого пользователя?? $tbl_name= 'tbl_member_'.$this->session->userdata('userid'); Это ужасная идея. Что происходит, когда вы получаете 1000 пользователей или 1000000 пользователей. Вы действительно будете запрашивать 1000000 таблиц для поиска, чтобы узнать, существует ли пользователь или его пароль правильный

2. это очень специфический сценарий, поэтому он так и остался, я понимаю ваше беспокойство

Ответ №1:

Можете ли вы попробовать следующее:

 $tbl_name= 'tbl_member_'.$this->session->userdata('userid');
$this->db->select('name,email,phone');
$this->db->from($tbl_name);
$this->db->group_start();
if(!empty($this->input->post('name'))){
    $this->db->or_like('name', $this->input->post('name'));
}
if(!empty($this->input->post('phonenumber'))){
    $this->db->or_like('phone',$this->input->post('phonenumber'));
}
if(!empty($this->input->post('package'))){
    $package= $this->input->post('package');
}
if(!empty($this->input->post('body_weight'))) {
    $this->db->or_like('body_weight', $this->input->post('body_weight'));
}
if(!empty($this->input->post('blood_group'))){
    $this->db->or_like('blood_group',$this->input->post('blood_group'));
}
if(!empty($this->input->post('gender'))){
    $this->db->or_like('gender',$this->input->post('gender'));
}
$this->db->group_end();
$query = $this->db->get();
  

Комментарии:

1. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.