Jump to content
php.lv forumi

mysql enum


Vecteevs

Recommended Posts

Sveicināti, kā jau parasti nomoka problēma un vēršos pēc palīdzības.

Tātad ir lietotāju tabula ar 4 lietotāju grupām

1. user

2. moderator

3. admin

4.owner

 

šie lauki datubāzē ir kā enum.

 

man vajag izdarīt tā lai admins var aplūkot to ko redz moderators un useris, savukārt moderators var darīt tikai to ko useris

mēģināju ar if/else kaut kā nesanāk. varēju tikai konkrētās klases darbības veikt

cerams ka sapratāt manu problēmu

Link to comment
Share on other sites

if($power == 'USER'){
   echo 'useris';
}elseif($power == 'MODERATOR'){
   echo 'moderators';
}elseif($power == 'ADMIN'){
   echo 'admins';
}elseif($power == 'OWNER'){
   echo 'owneris';
}

 

..ja klase ir ADMIN

tad man parāda vienkārši "admins" nevis useris, moderators, admins..

Varbūt jādara kā savādāk?

Link to comment
Share on other sites

Kas liedz?

if($power == 'USER'){
   echo 'useris';
}elseif($power == 'MODERATOR'){
   echo 'moderators';
   echo 'useris';
}elseif($power == 'ADMIN'){
   echo 'admins';
   echo 'moderators';
   echo 'useris';
}elseif($power == 'OWNER'){
   echo 'owneris';
   echo 'admins';
   echo 'moderators';
   echo 'useris';
}

 

:)

Edited by briedis
Link to comment
Share on other sites

To sauc par acl.

 

Bet pavisam vienkāršā gadījumā vari glabāt int vērtību no 1-4, 1.useris - 4.owneris un

 

if ($power>=1) {
 //sho var darīt visi
}
if ($power>=2) {
 //sho var darīt moderātors un krutāki
}
if ($power>=3) {
 //sho var darīt admins un krutāki
}

Edited by codez
Link to comment
Share on other sites

Pareizāka pieeja ir leveli glabāt, kā INT.. ir ērtāk.

 

Bet vienmēr jau vēl ir citi cikli, nevis tikai if:

switch ($x) {
case 'owneris':
   	echo 'owneris';
case 'admins':
   	echo 'admins';
case 'moderators':
   	echo 'moderators';
case 'useris':
   	echo 'useris';
};

Edited by KillerBean
Link to comment
Share on other sites

Bet vienmēr jau vēl ir citi cikli, nevis tikai if:

switch ($x) {
case 'owneris':
   	echo 'owneris';
case 'admins':
   	echo 'admins';
case 'moderators':
   	echo 'moderators';
case 'useris':
   	echo 'useris';
};

šādi darīt būtu pareizāk, nevis N-tie IF/ELSE

tikai jābūt arī defolt varjantam, un pēc katra CASE jābūt break; , savādāk pārbaude turpināsies, kamēr atdursies pret defolto un to arī izpildīs

switch ($x) {
case 'owneris':
   	echo 'owneris';
break;
case 'admins':
   	echo 'admins';
break;
case 'moderators':
   	echo 'moderators';
break;
case 'useris':
   	echo 'useris';
break;
default:

echo 'Errors,  ett.....';

// var arī pielikt exit; lai pturētu tālāko  koda drbību ->shajā gadījumā itkā tas būtu pat pareizi
// vai arī
echo 'useris';
};

Edit: bet vispār skaties kas tev tur jaizvada, ja Includes tad ar case, ja jaizvada kāda forma, tad iespējams ērtāks ir codez dotais varjants

Edited by Grey_Wolf
Link to comment
Share on other sites

Tev vajag četrus līmeņus?

 

Datubāzē glabā tinyint.

  • 200 ir īpašnieks,
  • 150 ir admins,
  • 100 ir moderators,
  • 50 ir lietotājs.

Tāda sistēma Tev ļaus pieveinot līdz pat 49 jauniem līmeņiem pirms vai pēc jebkura.

 

Tad sataisi konstantes visiem...

 

define('GROUP_ADMIN', 150);
define('GROUP_USER', 50);

Link to comment
Share on other sites

vēl vari glabāt bitmaskas.

pieņem ka useris = 1; moderators = 2; admins = 4; owneris = 8;

 

ownerim kurš ir arī useris, moderārtors un adminis bitmaska būs useris | moderators | admins | owneris = 15

un dotais useris var redzēt to, ko var redzēt adminis ja (bitmaska & admins) > 0

Edited by v3rb0
Link to comment
Share on other sites

Kā tad īsti ir ar to bitmask? manuālī īsti nesapratu kā tur domāts

primitiivi apskaidrojot:

1 baits sastav no 8 ' 0' vai ' 1'

attieciigi : vari sagalabat zinamu daudzumu datus piem 10100010 kur katrs vieninieks buus true, savukart 0 false

taa kaa tas ir binars kods tad to var paarverst par skaitli ( saja gadijumaa tas buus 162 )

 

tas taa ljoti primitiivi ..

 

protams bitoperacijas neizmanto visus 8, bet tika dalju ( tiek rezerveta dalja bitu), bet nu tas jau ir cits satasts

Edited by Grey_Wolf
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...