Re: Select Query with Multiple Optional Values

From: Date: Sun, 22 Mar 2009 01:22:03 +0000
Subject: Re: Select Query with Multiple Optional Values
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-290516@lists.php.net to get a copy of this message
>> Trying to find best way to accomplish following scenario.  Looking to search >> inventory through a POST form, have the following optional fields to search >> by: Product Name, Color, Size, and Status.  Search maybe for the Product >> Name and/or Color or they may search for just the Color or all 4 fields.  I >> am trying to find the most efficient way to do this without having 100 >> different if statements. > > <?php > > $where = array( '1 = 1' ); > > if( !empty( $_POST['name'] ) ) > { >    where[] = 'name = '.$db->quote( $_POST['name'] ); > } > > if( !empty( $_POST['colour'] ) ) > { >    where[] = 'colour = '.$db->quote( $_POST['colour'] ); > } > > if( !empty( $_POST['size'] ) ) > { >    where[] = 'size = '.$db->quote( $_POST['size'] ); > } > > if( !empty( $_POST['status'] ) ) > { >    where[] = 'status = '.$db->quote( $_POST['status'] ); > } > > $query = >    "SELECT " >   ."    * " >   ."FROM " >   ."    inventory " >   ."WHERE " >   ."    (".implode( ") AND (", $where ).")"; > > ?> > > Cheers, > Rob. Yep, that's the way to do it. Or you may do it this way. $fields = array('name','colour','size','status'); foreach ($_POST as $name => $value) { if (empty($value)) continue; if (!in_array($name, $fields, TRUE)) continue; $where[] = $name . '=' . $db->quote($value); } which is more compact and useful when you have 100 different optional fields. Virgil http://www.jampmark.com Free tips, tutorials, innovative tools and techniques useful for building and improving web sites.

« previous php.general (#290516) next »