You are here: Re: What's wrong the the logic in this code? « PHP Programming Language « IT news, forums, messages
Re: What's wrong the the logic in this code?

Posted by Jerry Stuckle on 09/15/06 22:31

Jeff Gardner wrote:
> 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>
>
>
>

Hmmm, not easy to make a case insensitive search. The keys are already
upper case; maybe change the values to all lower case then if you find
it use ucwords() to uppercase the first char of each word?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация