|
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
[Back to original message]
|