Toon posts:

Probleem bitmasken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik de volgende code om te kijken of iemand nieuws mag posten:
PHP:
1
<?if(($member -> user_data('news_rights') | ADD_AUTO) &amp;&amp; ($member -> user_data('news_rights') | ADD_GRANT)){    error('Je hebt geen rechten om nieuws te posten!');}?>

Dit zijn de constants:
PHP:
1
<?define('ADD_AUTO', 1);define('ADD_GRANT', 2);define('EDIT_AUTO', 4);define('EDIT_OWN', 8);define('DELETE_AUTO', 16);define('DELETE_OWN', 32);define('COMMENTS_POST', 64);define('COMMENTS_EDIT_AUTO', 128);define('COMMENTS_EDIT_OWN', 256);define('COMMENTS_DELETE_AUTO', 512);define('COMMENTS_DELETE_OWN', 1024);?>

user_data('news_rights') geeft 399 of 1 terug (kan ik instellen). Maar ik krijg bij beide de foutmelding dat ik geen rechten heb om te posten. Wat doe ik verkeerd?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Om te checken of een bepaald bitje geset is doe je & niet |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
define ( "BIT_01",    1 );
define ( "BIT_02",    1 << 1 );
define ( "BIT_03",    1 << 2 );

$rightsMask = BIT_01 | BIT_03;

if ( $rightsMask & BIT_01 ) {
   echo "bitje 1 is geset\n"
}
if ( $rightsMask & BIT_02 ) {
   echo "bitje 2 is geset\n"
}
if ( $rightsMask & BIT_03 ) {
   echo "bitje 3 is geset\n"
}

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Maar ik wil juist checken of de bit NIET is geset. Dat moest met | dacht ik?

  • paerad
  • Registratie: Juni 2001
  • Laatst online: 04-11-2025
Ben geen php/c programmer, maar je zoekt de NOT, dat was de ! toch?

In delphi programmeer ik vaak zoiets als dit:

if ((rightsmask AND BIT_01)<>0) then // BIT IS GEZET
if ((rightsmask AND BIT_01)=0) then // BIT IS NIET GEZET

Suc6

Verwijderd

Topicstarter
Die ! werkt niet en die OR is in PHP gelijk aan || dus dan kijkt hij of $member -> user_data('news_rights') OF ADD_AUTO true is, en dat is dus altijd het geval.

Verwijderd

Topicstarter
Ik heb het gevonden: Het moest ^ zijn en geen |. In ieder geval bedankt voor de moeite.

  • Sjab-X
  • Registratie: September 2001
  • Laatst online: 06-08 11:45
PHP:
1
<?if !($rechten &amp; $bit_x) { ... }?>

:?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

_J_R_R:
Ik heb het gevonden: Het moest ^ zijn en geen |. In ieder geval bedankt voor de moeite.
Dat lijkt me niet.
code:
1
2
3
4
mask1 = 1101
mask2 = 0010

mask1 ^ mask2 = 1111

Als je wilt checken of een bit niet geset is moet je dus kijken of een bit not ( geset ) is ;)
code:
1
2
3
if ( ! ( $rightsMask & BIT_01 ) ) {
   echo "Bit 1 is niet geset\n";
}

logica is zo moeilijk nog niet ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Sjab-X
  • Registratie: September 2001
  • Laatst online: 06-08 11:45
Ik ben hier gisteren ook mee bezig geweest en werd toen gewezen op Bitwise Operators. Er is nl. een verschil tussen & en AND...
Pagina: 1