|  | Posted by Simon Bridgewater on 07/08/05 21:37 
& is bitwise
 $a= 9;
 $b =9;
 $c = 6;
 
 $a & $b = 9;
 $a & $c = 0;
 
 
 && is a logical and
 
 $a && $b =1
 $a && $c = 0;
 
 
 
 "Tom Thackrey" <use.signature@nospam.com> wrote in message
 news:0czze.3199$6%2.1520@newssvr21.news.prodigy.com...
 >
 > On  8-Jul-2005, "Michael B. Trausch" <fdZEROman+spam@gmail.nospam.com>
 > wrote:
 >
 > > I have a question regarding bitwise operators, I've been trying to
 > > figure this out for about two days now, and I just can't seem to get it.
 > >    What I'm trying to do is use a variable to hold a bitmask of 'flags'
 > > for users on a website.  The function below is supposed to be a search
 > > function for one of those flags in a particular thing.
 > >
 > > The idea is that when something calls userId(), it should get to see
 > > what type of user flags that are supported.  Now I've moved things
 > > around, and it seems like the only if that ever executes is the first
 > > one, the code doesn't ever reach any of the elseif blocks.
 > >
 > > I want the function to search for the first user that it finds has a bit
 > > set in the bitmask and return the userId as supplied by the cookie that
 > > represents that bitmask.
 > >
 > > Optionally, userId() can be called with one of the arguments specifying
 > > a particular usertype to look for that particular usertype.  The user
 > > can be logged into multiple sections of the site at a time, so if
 > > they're entering something where they need the USER_ADMIN privilege, I
 > > should be able to call userId(USER_ADMIN) and get their UID if they're
 > > an admin and E_NOT_LOGGED_IN if they're not logged in as an admin.  Same
 > > goes for any of the options that are defined.  Can anyone else see what
 > > is wrong with this?
 > >
 > > Thanks for the help in advance.
 > >
 > >
 > > Constants defined for USER_*:
 > > =============================
 > >
 > > define('USER_NOBODY',   0x00000000);
 > > define('USER_SEEKER',   0x00000001);
 > > define('USER_MEMPL',    0x00000002);
 > > define('USER_SEMPL',    0x00000004);
 > > define('USER_ADMIN',    0x00000008);
 > > define('USER_ANYBODY',  0xffffffff);
 > >
 > > Code that isn't working:
 > > ========================
 > >
 > > function userId($pref = USER_ANYBODY)
 > > {
 > >     /*
 > >      * If the user is logged in, this will return their user ID.
 > >      * If they are not, then it won't.  If more then one user is
 > >      * logged in, this function will prefer MEMPL and SEMPL types
 > >      * over any other, unless specified by $pref.
 > >      */
 > >
 > >     $uT = userType();
 > >
 > >     if(userAccess($uT, $pref))
 > >     {
 > >         /*
 > >          * The usertype that we're looking for is logged in.
 > >          */
 > >
 > >         if(($pref & USER_SEEKER) > 0)
 > >         {
 > >             $tmpCookie = $_COOKIE['seeker'];
 > >             list($id, $i, $i, $i, $i, $i, $i) = explode(':',
 $tmpCookie);
 > >
 > >             return($id);
 > >         }
 > >
 > >         elseif(($pref & USER_MEMPL) > 0)
 > >         {
 > >             $tmpCookie = $_COOKIE['mEmpl'];
 > >             list($id, $i, $i, $i, $i, $i, $i) = explode(':',
 $tmpCookie);
 > >
 > >             return($id);
 > >         }
 > >
 > >         elseif(($pref & USER_SEMPL) > 0)
 > >         {
 > >             $tmpCookie = $_COOKIE['sEmpl'];
 > >             list($id, $i, $i, $i, $i, $i, $i) = explode(':',
 $tmpCookie);
 > >
 > >             return($id);
 > >         }
 > >
 > >         elseif(($pref & USER_ADMIN) > 0)
 > >         {
 > >             $tmpCookie = $_COOKIE['admin'];
 > >             list($id, $i, $i, $i, $i, $i, $i) = explode(':',
 $tmpCookie);
 > >
 > >             return($id);
 > >         }
 > >     }
 > >
 > >     // Oops.  We don't have anything to do, return E_NOT_LOGGED_IN.
 > >
 > >     return(E_NOT_LOGGED_IN);
 > > }
 >
 > The problem is you aren't using the bitwise operators. & is not bitwise,
 &&
 > is
 >
 > Also, you don't need the >0, if ($pref && USER_ADMIN) will work just fine
 > and won't have a problem if you use the high order bit as a flag.
 >
 > --
 > Tom Thackrey
 > www.creative-light.com
 > tom (at) creative (dash) light (dot) com
 > do NOT send email to jamesbutler@willglen.net (it's reserved for spammers)
  Navigation: [Reply to this message] |