| 
	
 | 
 Posted by Jeff Gardner on 09/15/06 18:22 
Jerry Stuckle wrote: 
> Jeff Gardner wrote: 
>> Greetings: 
>> 
>>     I am attempting to get conditional output based on POSTed form  
>> data. If the posted value is either the key or value of an array,  
>> $x=key and $q=foo.  elseif it is neither key nor value(I tried || too)  
>> , $q=bar. Even though $x is properly assigned the new value, $q always  
>> ends up being bar.  Abstractions aside, here's the code:  (note ##  
>> comments added to this post) 
>> 
>> <snip> 
>> $search = $_POST[search]; 
>> $sort = $_POST[sortby]; 
>> $states = array( 
>>           "AL" => "Alabama", 
>>           "AK" => "Alaska", 
>>           "AZ" => "Arizona", 
>>           ... 
>>           ); 
>> ##echo $search here outputs the POSTed input 
>> foreach ($states as $key => $value) 
>> 
>> if ($search == $value || $search == $key) { 
>> $search = $key; 
>> ##echo $search here outputs the new value, when applicable 
>> $q = " 
>>     SELECT 
>>     organization.*, contacts.* 
>>     FROM organization 
>>     LEFT JOIN contacts 
>>     ON organization.org_id = contacts.org_id 
>>     OR organization.org_id = 0 
>>     WHERE organization.state 
>>     = '$search' 
>>     OR contacts.state 
>>     = '$search' 
>>     ORDER BY '$sort' ASC"; 
>>     } elseif ($search != $value && $search != $key) { ##I tried ||  
>> here too. 
>> ##echo $search here outputs the new value too, when applicable 
>> $q = " 
>>     SELECT 
>>     CONCAT(contacts.firstname,' ',contacts.lastname) AS fullname, 
>>     organization.*, contacts.* 
>>     FROM organization 
>>     LEFT JOIN contacts 
>>     ON organization.org_id = contacts.org_id 
>>     OR organization.org_id = 0 
>>     WHERE organization.state 
>>     LIKE '%$search%' 
>>     OR organization.orgname 
>>     LIKE '%$search%' 
>>     OR contacts.state 
>>     LIKE '%$search%' 
>>     OR contacts.lastname 
>>     LIKE '%$search%' 
>>     OR contacts.firstname 
>>     LIKE '%$search%' 
>>     ORDER BY '$sort' ASC"; 
>> } 
>> 
>> $result = mysql_query($q) 
>>     or die('Query Failed: ' . mysql_error()); 
>> </snip> 
>> 
>> Where is this evaluation breaking down and why?  Thanks in advance. 
>  
> You're problem is you are setting $q each time through the loop, then  
> using it outside of the loop.  $q will always have the last value set in  
> the loop. 
>  
> If $search matched the last state in your list, you would get the value  
> from your "then" clause.  Any other time you'll get the value from your  
> "then" clause. 
>  
Here's what ended up working: (note the if(){foreach(){if()}} at the  
beginning)  Unfortunately, in_array() and array_key_exists() are case  
sensitive.  I'm trying to figure out a way to get strtoupper and  
ucfirst() to fix any input. 
 
<snip> 
$search = $_POST[search]; 
$sort = $_POST[sortby]; 
$states = array( 
		  "AL" => "Alabama", 
		  "AK" => "Alaska", 
		  "AZ" => "Arizona", 
		  ... 
		  ); 
 
if (in_array($search ,$states) || array_key_exists($search, $states)) { 
	foreach ($states as $key => $value){ if ($search == $value || $search  
== $key){ 
	$search = $key; 
}} 
$q = " 
	SELECT 
	organization.*, contacts.* 
	FROM organization 
	LEFT JOIN contacts 
	ON organization.org_id = contacts.org_id 
	OR contacts.org_id = 0 
	WHERE organization.state 
	LIKE '$search%' 
	OR contacts.state 
	LIKE '%$search%' 
	ORDER BY '$sort' ASC"; 
 
} else { 
$q = " 
	SELECT 
	CONCAT(contacts.firstname,' ',contacts.lastname) AS fullname, 
	organization.*, contacts.* 
	FROM organization 
	LEFT JOIN contacts 
	ON organization.org_id = contacts.org_id 
	OR contacts.org_id = 0 
	WHERE organization.state 
	LIKE '%$search%' 
	OR organization.orgname 
	LIKE '%$search%' 
	OR contacts.state 
	LIKE '%$search%' 
	OR contacts.lastname 
	LIKE '%$search%' 
	OR contacts.firstname 
	LIKE '%$search%' 
	ORDER BY '$sort' ASC"; 
} 
</snip> 
 
 
 
--  
 
Regards, 
 
Jeff Gardner 
___________________________ 
 
"Contrary to popular belief, Unix is user friendly. It just happens 
to be very selective about who its friends are."  --Kyle Hearn
 
  
Navigation:
[Reply to this message] 
 |