ID:               36799
 Updated by:       [EMAIL PROTECTED]
 Reported By:      cleo at anarki dot dk
 Status:           Bogus
 Bug Type:         *General Issues
 Operating System: WinXP, Mandriva Linux 2006
 PHP Version:      5.1.2
 New Comment:

The whole point of 'and','or' is to be the low-precedence version of
'&&', '||'.  If you want high-precedence, use &&.


Previous Comments:
------------------------------------------------------------------------

[2006-03-20 20:05:03] [EMAIL PROTECTED]

http://www.php.net/manual/en/language.operators.php#language.operators.precedence

------------------------------------------------------------------------

[2006-03-20 19:59:05] cleo at anarki dot dk

All right, 
  ( (p1) and (p2) ) 
evaluates correctly,
but that doesn't change the fact, that 
  (p1) and (p2)
evaluates totally wrongly.
And I don't see the difference.
Neither from a mathematician's nor a computer scientist's point of
view.
Therefore, I still strongly argue, that this is a bug in PHP's way of
evaluating boolean expressions.

Best regards
Claus Holm from Copenhagen

------------------------------------------------------------------------

[2006-03-20 18:09:23] [EMAIL PROTECTED]

$h = 25;
$res = (($h>=0) and ($h<=23));

------------------------------------------------------------------------

[2006-03-20 17:47:15] cleo at anarki dot dk

Description:
------------
Consider the following piece of code:
  $res= ($h>=0) and ($h<=23);
It could be used to determine if a user has submitted an hour between 0
and 23.

However, if the user enters 25, then the function evaluates to
true!!!!

If you reverse the order of the operands like this:
  $res = ($h<=23) and ($h>=0);
...then a $h value of 25 will make the function evaluate to false.

But now -1 will make it evaluate to true!

So clearly, this must be a major bug.
Best regards
Claus Holm, Copenhagen, Denmark

Reproduce code:
---------------
<? if (isset($_POST['test'])) {
    $hours= $_POST['e_hours'];
    $hours= (integer)$hours;
    echo "You entered $hours <br>";
    echo 'Now we test: ($hours>=0) and ($hours<=23)<br>';
    $test1= ($hours>=0) and ($hours<=23);
    echo $test1 ? "ok" : "nope";
    echo "<br>";
    echo 'And now we test: ($hours<=23)and($hours>=0)<br>';
    $test2= ($hours<=23) and ($hours>=0);
    echo $test2 ? "ok" : "nope";
  }
  else {
?>  Input an hour between 0 and 23:<br>
    <FORM action="<?=$_SERVER['PHP_SELF']?>" method="post">
      <INPUT type="text" name="e_hours" value=""><br>
      <INPUT type="submit" name="test" value="Run test">
    </form>
<?}
?>


Expected result:
----------------
If the value 25 is entered, then I should see this:


You entered 25
Now we test: ($hours>=0) and ($hours<=23)
nope
And now we test: ($hours<=23) and ($hours>=0)
nope

Actual result:
--------------
You entered 25
Now we test: ($hours>=0) and ($hours<=23)
ok
And now we test: ($hours<=23) and ($hours>=0)
nope


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36799&edit=1

Reply via email to