On 22 September 2004 18:45, Stuart Felenstein wrote:

> Just to confirm,
> This is what I'm going to start with:

Yeah, I'd say you've pretty much got it, except...
> //base sql statement
> $sql = "select * from jobs where record_deleted = 'NO' ";
> if (isset($_POST['states'])){

Your SQL is going to need some sort of conjunction here, as your WHERE phrase already 
has an initial condition in it.  I'm guessing you'll want an AND, so:

    $sql .= 'AND ';

> //check to see if the states is an array
> // multiple items or just one
> if (is_array($_POST['state']))

You've switched from $_POST['states'] to $_POST['state'] -- fix whichever is wrong ;)

> $sql .= "state='".implode("' OR state='",
> $_POST['state'])."'";

Given the conditions you want your WHERE phrase to test, you're going to need more 
parentheses to force the ORs to be evaluated before the ANDs; this is where the IN 
syntax, IMO, is more readable.  So you want either:

    $sql .= "(state='".implode("' OR state='",$_POST['state'])."')";


    $sql .= "state IN ('".implode("','",$_POST['state'])."')";

>  }else{
> //$_POST['state'] is not an array
>  $sql .= "state = '".$_POST['state']."' ";
> }//end if
>  if (isset($_POST['job'])){
>    if (isset($_POST['state'])){  $sql .= " AND "; }

And throughout this second block you've used a cut'n'paste of the first block without 
altering ['state'] to ['job'] -- just the sort of oversight that can give you the 
raving heebie-jeebies somewhere down the line if you fail to fix it! ;)

> //add in the AND if the state is set
> //check to see if the states is an array
> //multiple items or just one
>     if (is_array($_POST['state']))
>        $sql .= "state='".implode("' OR state='",
> $_POST['state'])."'";
>     $sql .= ")";
>   }else{
> $_POST['job'] is not an array
>      $sql .= "job = '".$_POST['job']."' ";
>  }
> //end if

Given the moderate complexity of this code, I'd strongly recommend echo-ing out $sql 
immediately before it's used whilst you're in testing mode.  When your query fails, 
you'll already be one step ahead in working out what the problem is.



Mike Ford,  Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Headingley Campus, LEEDS,  LS6 3QS,  United Kingdom
Tel: +44 113 283 2600 extn 4730      Fax:  +44 113 283 3211 

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

Reply via email to