TalkPHP
 
 
Account Login
Latest Articles
» The basic usage of PHPTAL, a XML/XHTML template library for PHP
» Vulnerable methods and the areas they are commonly trusted in.
» Simple way to protect a form from bot
» The Basics On: How Session Stealing Works
» How to keep your forms from double posting data
IRC Channel
IRC Speech Bubble Join the friendly bunch on IRC...
(#TalkPHP on Freenode)

...Also available via a web interface.

See this thread for information on the TalkPHP Free Hugs Initiative™. Subject to availability.
Associates
Associates
CSS Tutorials
Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old 08-17-2008, 02:17 AM   #1 (permalink)
is cute and cuddly
 
delayedinsanity's Avatar
 
Join Date: Mar 2008
Location: Vegas, Baby
Posts: 963
Thanks: 31
delayedinsanity is on a distinguished road
Default Conditional doesn't trigger error, but doesn't work?

So in my effort to reduce using functions such as preg_match, I tried this little bit of code in a method today:

PHP Code:
        if ($list_type != ('categories' || 'versions'))
        {
            
trigger_error('Invalid list type'E_USER_NOTICE);
            return;
        } 
This doesn't produce any errors or notices, but neither does it work as I hoped it would. How come? I'm using the following instead...

PHP Code:
        if (! in_array($list_type, array('categories''versions')))
        {
            
trigger_error('Invalid list type'E_USER_NOTICE);
            return;
        } 
...but you would think if PHP accepted the original as valid code, it would produce some kind of result.
-m
delayedinsanity is offline  
Reply With Quote
Old 08-17-2008, 02:34 AM   #2 (permalink)
The Wanderer
 
Join Date: Aug 2008
Posts: 11
Thanks: 4
Theo is on a distinguished road
Default

Its the brackets. ( 'categories' || 'versions' ) would evaluate to TRUE on its own - so the comparison you're actually doing is:

PHP Code:
if( $list_type != true ){...} 
It looks like what you actually want is:

PHP Code:
if ($list_type != 'categories' 
      
&& $list_type != 'versions'))
        {
            
trigger_error('Invalid list type'E_USER_NOTICE);
            return;
        } 
Which should work as you expect.
Theo is offline  
Reply With Quote
Old 08-17-2008, 02:57 AM   #3 (permalink)
is cute and cuddly
 
delayedinsanity's Avatar
 
Join Date: Mar 2008
Location: Vegas, Baby
Posts: 963
Thanks: 31
delayedinsanity is on a distinguished road
Default

Yeah I had it working that way originally, then I decided to see if I could find crafty new ways of doing it, just to see what was possible.

I guess while I know it doesn't work, it doesn't fully make sense to me the reasoning why. In english, I would read that as ( IF variable NOT EQUAL TO (string OR string) ), not ( IF variable NOT EQUAL TO true ). See what I mean?
-m
delayedinsanity is offline  
Reply With Quote
Old 08-17-2008, 03:31 AM   #4 (permalink)
The Wanderer
 
Join Date: Aug 2008
Posts: 11
Thanks: 4
Theo is on a distinguished road
Default

Think of it like maths - everything in brackets gets evaluated first i.e.

PHP Code:
10
* (4) = 14 
In the same way the expression in brackets gets evaluated before being compared to $list_type. Since neither 'category' or 'versions' evaluate to false, the result of ('categories' || 'versions') is true. This is what then gets compared to $list_type.

Edit:

I would read it as:

IF variable NOT EQUAL TO (string OR string)

in the same way as you, but I would see that:

(string OR string) == true

since everything in brackets gets evaluated first.

Last edited by Theo : 08-17-2008 at 04:38 AM. Reason: Clarification
Theo is offline  
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


All times are GMT. The time now is 08:44 PM.

 
     

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0
Inactive Reminders By Icora Web Design