[PHP] Raar(?) PHP probleem

Pagina: 1
Acties:

Onderwerpen


  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 20-10 16:34
Ik probeer met php wat bitjes te checken in verband met userlevels nu heb ik iets waar ik niet uitkom.

De volgende code:

PHP:
1
2
3
4
5
echo "userlevel: ".$userlevel."<br />";
echo "can_view_devices: ".$levels['can_view_devices']."<br />";
echo "userlevel & can_view_devices: ".(($userlevel) & ($levels['can_view_devices']))."<br />";
echo "511 & can_view_devices: ".((511) & ($levels['can_view_devices']))."<br />";
echo "userlevel & 4: ".(($userlevel) & (4))."<br />";


Dit geeft als resultaat:

userlevel: 511
can_view_devices: 4
userlevel & can_view_devices: 4
511 & can_view_devices: 4
userlevel & 4: 4

Dit verwacht ik ook. Het vreemde komt nu met onderstaande:

PHP:
1
2
3
4
5
echo "userlevel: ".$userlevel."<br />";
echo "can_view_tools: ".$levels['can_view_tools']."<br />";
echo "userlevel & can_view_tools: ".(($userlevel) & ($levels['can_view_tools']))."<br />";
echo "511 & can_view_tools: ".((511) & ($levels['can_view_tools']))."<br />";
echo "userlevel & 2: ".(($userlevel) & (2))."<br />";


Het resultaat hiervan is:

userlevel: 511
can_view_tools: 2
userlevel & can_view_tools: 0
511 & can_view_tools: 2
userlevel & 2: 2

Waarom is userlevel & can_view_tools: 0 en geen 2 zoals ik zou verwachten? En waarom gaat dit met 4 wel goed?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
edit:
Epic faal reactie

[ Voor 198% gewijzigd door Voutloos op 10-05-2011 11:14 ]

{signature}


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18:58
Lijkt op een PHP bug. Op PHP 5.3.3 (Debian Squeeze) is alles in orde:

test pagina.

[ Voor 7% gewijzigd door Jaap-Jan op 10-05-2011 11:27 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$userlevel = 511;
$levels['can_view_tools'] = 2;

echo "userlevel: ".$userlevel."<br />";
echo "can_view_tools: ".$levels['can_view_tools']."<br />";
echo "userlevel & can_view_tools: ".(($userlevel) & ($levels['can_view_tools']))."<br />";
echo "511 & can_view_tools: ".((511) & ($levels['can_view_tools']))."<br />";
echo "userlevel & 2: ".(($userlevel) & (2))."<br />";
?>


Geeft in mijn Wamp altijd het verwachtte resultaat.
Verschillende PHP versies getest. 4.4.7 en 5.3.0 bijv.

👑


  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 20-10 16:34
Dankjewel, ben in ieder geval een stap verder alleen snap ik nog steeds niet waar het mis gaat..

Ik wil het zo doen:

PHP:
1
2
3
4
5
6
7
// Define userlevels
$sql = mysql_query("SELECT `website`.`levels`.`right`, `website`.`levels`.`number` FROM `website`.`levels`");

while($row = mysql_fetch_array($sql))
    $levels[$row["right"]] = $row["number"];

print_r($levels);


Resultaat (werkt niet):
Array ( [can_view_reports] => 1 [can_view_tools] => 2 [can_view_devices] => 4 [can_view_admin] => 8 [can_edit_graph] => 16 [can_make_graphitem] => 32 [can_edit_line] => 64 [can_make_line] => 128 )

Als ik het zo doe:
PHP:
1
2
3
$levels = Array ( 'can_view_reports' => 1, 'can_view_tools' => 2, 'can_view_devices' => 4, 'can_view_admin' => 8, 'can_edit_graph' => 16, 'can_make_graphitem' => 32, 'can_edit_line' => 64, 'can_make_line' => 128 );

print_r($levels);


Is het resultaat:
Array ( [can_view_reports] => 1 [can_view_tools] => 2 [can_view_devices] => 4 [can_view_admin] => 8 [can_edit_graph] => 16 [can_make_graphitem] => 32 [can_edit_line] => 64 [can_make_line] => 128 )

Het resultaat van de array is dus identiek, maar de onderste werkt wel en de bovenste niet?

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 20-10 16:34
Heb het opgelost,

PHP:
1
2
3
4
5
// Define userlevels
$sql = mysql_query("SELECT `website`.`levels`.`right`, `website`.`levels`.`number` FROM `website`.`levels`");

while($row = mysql_fetch_array($sql))
    $levels[$row["right"]] = (int)$row["number"];


Het nummer naar een int gecast en het werkt nu wel.
Pagina: 1