#18680 [Fbk->Opn]: Logical OR fails if value is a string
| From: | su-php at bossi dot com | Date: | Thu, 01 Aug 2002 19:22:01 +0000 |
| Subject: | #18680 [Fbk->Opn]: Logical OR fails if value is a string | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-15762@lists.php.net to get a copy of this message | ||
ID: 18680
User updated by: su-php@bossi.com
-Summary: Logical OR fails after value passes through session
Reported By: su-php@bossi.com
-Status: Feedback
+Status: Open
-Bug Type: Session related
+Bug Type: Strings related
Operating System: Win2K
PHP Version: 4.1.2
New Comment:
It is not a session related problem, but a string conversion problem.
Below is a script which shows the problem. When doing test, remember
that the values should be based on a power of two, that is: 0x01, 0x02,
0x04, 0x08, 0x10, 0x20, ...
-------------------------
<html><head></head><body>
<h1>ORing Values</h1>
<?
do_table( 1, '1', 8, '8' );
do_table( 2, '2', 8, '8' );
do_table( 2, '2', 4, '4' );
do_table( 2, '2', 16, '16' );
do_table( 1, '1', 16, '16' );
?>
</body></html>
<?
function do_table( $val_1_num, $val_1_txt, $val_2_num, $val_2_txt )
{
?>
<br>
<table border="1">
<tr>
<th></th>
<th>Value 1</th>
<th>Value 2</th>
<th>Raw OR</th>
<th>strval OR</th>
<th>0+ OR</th>
</tr>
<tr>
<td>Number</td>
<td align="center"><?= $val_1_num ?></td>
<td align="center"><?= $val_2_num ?></td>
<td align="center"><?= $val_1_num | $val_2_num ?></td>
<td align="center"></td>
<td align="center"><?= (0 + $val_1_num) | (0 + $val_2_num) ?></td>
</tr>
<tr>
<td>Text</td>
<td align="center"><?= $val_1_txt ?></td>
<td align="center"><?= $val_2_txt ?></td>
<td align="center"><?= $val_1_txt | $val_2_txt ?></td>
<td align="center"><?= strval($val_1_txt) | strval($val_2_txt)
?></td>
<td align="center"><?= (0 + $val_1_txt) | (0 + $val_2_txt) ?></td>
</tr>
</table>
<?}?>
-------------------------
Previous Comments:
------------------------------------------------------------------------
[2002-07-31 18:57:18] sniper@php.net
Please add a short but COMPLETE example script which clearly
demonstrates the problem.
------------------------------------------------------------------------
[2002-07-31 15:03:38] su-php@bossi.com
I stated that strval() does not work. However a kludge that DOES work
is:
echo "Val : ".((0 + $opt['time']) | (0 + $opt['date']));
------------------------------------------------------------------------
[2002-07-31 14:53:07] su-php@bossi.com
PHP version 4.1.1 (Hey it's an internal test bed, no outside
connection)
I am saving user options in an array. The array is then saved to the
session.
the basic variables are:
$TIME_FORMAT_12 = 0x01;
$TIME_FORMAT_24 = 0x02;
$DATE_FORMAT_YMD = 0x04;
$DATE_FORMAT_MDY = 0x08;
$DATE_FORMAT_DMY = 0x10;
$opt['time'] = $TIME_FORMAT_24;
$opt['date'] = $DATE_FORMAT_DMY;
At this point, the array holds numeric values. Now $opt[] is saved to
the session. When it is read back in, I believe the two values are no
longer numeric.
If you OR the base values:
echo "Val: ".($TIME_FORMAT_24 | $DATE_FORMAT_DMY);
echo "Val: ".($opt['time'] | $opt['date');
you get 18 or 0x12.
However if you OR the $opt values _after_ they have been retrieved from
the session:
echo "Val: ".($opt['time'] | $opt['date');
you get 36.
I have tried (strval($opt['time']) | strval($opt['date'))) but it still
fails.
I am using the composite value to perform a logical AND to obtain the
settings: if ( $format_in & $DATE_FORMAT_DMY ) within a function.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=18680&edit=1