php - Codeigniter omit where clause for empty criterion -


i have page browsing db records. viewer can filter records category, author, , tags. i'm using form instead of url segments filtering records (it feels more secure because can validate inputs.)

for instance, when form inputs populated query looks this:

select * (`posts`) `category` = 'technolgy' , `author` = 'lila' , `tags` = 'ebook' 

however if 1 input or more empty, no results. example:

select * (`posts`) `category` = '' , `author` = 'lila' , `tags` = ''  

i want inputs optional example if author name entered, can return records made author regardless of category , tags. how can omit and where clause if empty?

note: or_where clause not solution because doesn't return precise query if filter inputs filled.

my model

function filter($form_values)     {                                $query = $this->db->get('posts');                    $this->db->where($form_values); //adds clause array items         return $query->result();             } 

the function parameter array input values view. example,

$form_values = array('category' => $category, 'author' => $author, 'tags' => $tags); 

and view

$form_values = array (                                   'category' => $this->input->post('category'),                 'author'   => $this->input->post('author'),                 'tags'     => $this->input->post('tags')             );  $this->records_model->filter($form_values);     

i know in codeigniter if $_post' empty set false. can used achieve i'm trying? i'm not sure if i'm on right track

you correct $this->input->post() return false if $_post value not set. unless want is null part of query (which believe happen passing false param 2 of where(), not 100% sure), filter out empty values:

function filter($form_values) {                   $form_values = array_filter($form_values);      // note:     // where() needs called first, or query won't use clause      // may need make sure there @ least 1 value in $form_values     if ( ! empty($form_values)) // wish check value     {         $this->db->where($form_values); //adds clause array items     }      $query = $this->db->get('posts');                 return $query->result();         } 

http://php.net/manual/en/function.array-filter.php

the important part note on array_filter():

if no callback supplied, entries of input equal false (see converting boolean) removed.


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -