Eine Riesen IF Abfrage

dAk0Ta

Mitglied
Hallo Leute.
Ich bin gestern Abend beim Prgorammieren auf eine IF Abfrage gestoßen die wirklich ziehmlich groß ist. Unteranderem ist da auch eine mysql-Abfrage enthalten, nun zu meiner Frage: Ist es möglich diese Abfrage zu verringern?
Der DB Tabellen Inhalt sieht wie folgt aus:
Code:
TABLE `admin` ( 
`id` int(21) NOT NULL auto_increment,
`uid` int(21) NOT NULL default '0',
`news` int(2) NOT NULL default '0',
`forum` int(2) NOT NULL default '0',
`site_einstellungen` int(2) NOT NULL default '0',
`site_projektmitarbeiter` int(2) NOT NULL default '0',
`site_faq` int(2) NOT NULL default '0',
`user_bearbeiten` int(2) NOT NULL default '0',
`user_hinzufuegen` int(2) NOT NULL default '0',
`user_loeschen` int(2) NOT NULL default '0',
`user_mailatuser` int(2) NOT NULL default '0',
`user_mailatall` int(2) NOT NULL default '0',
`user_pmatuser` int(2) NOT NULL default '0',
`user_pmatall` int(2) NOT NULL default '0',
`sb_einstellungen` int(2) NOT NULL default '0',
`sb_bearbeiten` int(2) NOT NULL default '0',
`sb_loeschen` int(2) NOT NULL default '0',
PRIMARY KEY  (`id`)  )
Nun brauche ich eine Abfrage die Kontrolliert ob alle Wert außer id und uid auf 1 stehen. Momentan sieht diese Abfrage bei mir so aus:
Code:
$admini = mysql_query("SELECT * FROM admin WHERE uid='" . $_SESSION['userid'] . "'");
$admino = mysql_fetch_assoc($admini);
if($admino['news'] == "1" && $admino['forum'] == "1" && $admino['site_einstellungen'] == "1" && $admino['site_projektmitarbeiter'] == "1" && $admino['site_faq'] == "1" && $admino['user_bearbeiten'] == "1" && $admino['user_hinzufuegen'] == "1" && $admino['user_loeschen'] == "1" && $admino['user_mailatuser'] == "1" && $admino['user_mailatall'] == "1" && $admino['user_pmatuser'] == "1" && $admino['user_pmatall'] == "1" && $admino['sb_einstellungen'] == "1" && $admino['sb_bearbeiten'] == "1" && $admino['sb_loeschen'] == "1" || $_SESSION['userid'] == "1")
{
  $listuser->assign('adminrights', "");
}
else
{
  $listuser->assign('adminrights', "disabled");
}
Da ich aber in Zukunft neue Werte wie zb: PMAdmin (wo der Wert dann auch auf 1 oder 0 sein kann) hinzufügen werde, dachte ich mir kann man das alles so gestalten das die Abfrage in PHP oder MySQL so aufgebaut ist das ich dort keine zusätzlichen Befehle mehr einbauen muss, also so das ich nur noch meine Werte in die DB schreibe und im PHP oder SQL Abschnitt wird dieses dann auch gleich mit kontrolliert.
Hätte da jemand eine Idee

Vielen Dank für eure Mühe.

mfG
 
Du könntest mit [phpf]array_count_values[/phpf] arbeiten.
Ein Beispiel:
PHP:
//...
$temp=$admino;
unset($temp['id']);
unset($temp['uid']);
//alle weiteren Felder, die Du nicht prüfen willst auch entfernen

$acv=array_count_values($temp);
if ($acv[1]==count($temp)) {
    //do something
}
Allerdings muss man dazu sagen, dass diese Methode durch das ganze automatische Typgecaste von PHP, insbesondere bei Array-Indizes, gerade bei Adminrechten evtl. Sicherheitsrisiken hervorrufen kann.

Du kannst es auch in einer Schleife machen:
PHP:
//...
$temp=$admino;
unset($temp['id']);
unset($temp['uid']);
//alle weiteren Felder, die Du nicht prüfen willst auch entfernen

$allone=true;
foreach($temp as $t) {
    if ($t!==1) {
        $allone=false;
    }
}
if ($allone) {
    //do something
}

Gruß hpvw
 
Super, besten Dank.
Beide Möglichkeiten gefallen mir sehr gut, wobei ich die zweitere Möglickeit sogar in dieser Form gesucht habe...

Vielen Dank. :-)
 
Zurück