Re: Select Query with Multiple Optional Values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> 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.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux