Toon posts:

[PHP] Raar(?) PHP probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 09-08-2022
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?

Acties:
  • 0Henk 'm!

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

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

{signature}


Acties:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 02:24

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 00:07

Jaap-Jan

Geen IPv6- ready check meer :(

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


Acties:
  • 0Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 17-03 17:44
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.

👑


Acties:
  • 0Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 09-08-2022
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?

Acties:
  • 0Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 09-08-2022
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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee