[PHP] Menulinke durch DB-Daten

unregiert

abgemeldet
22 April 2006
451
26
Ich habe ein Usersystem, mit verschiedenen Rechten. Die Rechte sind in einer Tabelle namens "rights" gespeichert. Nun, im Adminbereich müssen die Daten zur generierung eines Menüs ausgelesen werden - was auch klappt.
Beim ersten Link klappt es schön, aber der zweite wird nicht angezeigt.
PHP:
Tabelle "rights"
----------------------------
--- rid  - gbdel - gbcom ---
--- 1000 - 1     - 1     ---
----------------------------
Alle Werte stimmen, in der Datenbank ist alles korrekt eingestellt.
PHP:
    $select = mysql_query("SELECT * FROM rights WHERE `rid` = '".$admin_rights."';");
    $data_r = mysql_fetch_object($select);
    $menu = "<i>".$data_r->name."</i><br />";
    switch(1)
    {
      case $data_r->gbdel:
        $menu .= "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />";
      break;
      case $data_r->gbcom:
        $menu .= "<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />";
      break;
    }
Weiss jemand, wo der Fehler liegt?
 
Bei mir ist alles erlaubt :ugly: Nein, wird korrigiert.

Zum switch: Wie soll ich es dann machen? :-? switch("1") ?
 
ist das nicht so, das man switch($variable) machen muss?
und mit Case fragst du dann den Wert von $variable ab.
 
Biehler schrieb:
ist das nicht so, das man switch($variable) machen muss?
und mit Case fragst du dann den Wert von $variable ab.
Richtig.

switch(1) is sinnlos, weil 1 wohl immer gleich 1 sein wird :ugly:
 
theHacker schrieb:
Richtig.

switch(1) is sinnlos, weil 1 wohl immer gleich 1 sein wird :ugly:

PHP:
switch(1)
{
case($a==$b):
;
break;
case($c==$d):
;
break;
.
.
.
}
geht auch


Zum Problem:
$data_r->gbdel und $data_r->gbcom müssen antivalent sein, also dürfen sie nicht gleichzeitig beide 0 oder beide 1 sein.

PHP:
    $select = mysql_query("SELECT * FROM rights WHERE `rid` = '".$admin_rights."';");
    $data_r = mysql_fetch_object($select);
    $menu = "<i>".$data_r->name."</i><br />";
    switch(1)
    {
      case ($data_r->gbdel && $data_r->gbcom):
        $menu .= "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />";
        $menu .= "<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />";
      break;
      case $data_r->gbdel:
        $menu .= "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />";
      break;
      case $data_r->gbcom:
        $menu .= "<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />";
      break;
    }
 
Zuletzt bearbeitet:
DocTrax schrieb:
PHP:
switch(1)
{
case($a==$b):
;
break;
case($c==$d):
;
break;
.
.
.
}
geht auch
Nur isses zu 99% sinnlos, weil die kleine aber feine Nebenbedingung ja erfüllt sein muss ;)
PHP:
switch(1)
{
  case 1:
    echo "2";
    break;
  case 1:
    echo "1";
    break;
}
gibt nunmal nur 2 und nicht 21 aus ;)
 
PHP:
$menu .= ($data_r->gbcom) ? "<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />" : "" . ($data_r->gbde) ? "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />" : "";
Gibts was einfacheres als das? :mrgreen:
 
warum nicht einfach so

PHP:
$data_r = mysql_fetch_object(mysql_query("SELECT `gbdel`,`gbcom`,`name` FROM `rights` WHERE `rid` = '".$admin_rights."'")); 

    $menu = "<i>".$data_r->name."</i><br />";
    switch(".$data_r->gbdel."|".$data_r->gbcom.")
    {
      case "1|0":
        $menu .= "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />";
      break;
      case "0|1":
        $menu .= "<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />";
      break;
      case "1|1":
         $menu .= "<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br /><a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />";
      break;
    }

keine haftung das es funktioniert

könnte aber gehen musst mal testen

ansonsten löse es mit if elseif else oder ($bla ==1)?'dein linkcode':''
 
Zuletzt bearbeitet:
theHacker schrieb:
Nur isses zu 99% sinnlos, weil die kleine aber feine Nebenbedingung ja erfüllt sein muss ;)
PHP:
switch(1)
{
  case 1:
    echo "2";
    break;
  case 1:
    echo "1";
    break;
}
gibt nunmal nur 2 und nicht 21 aus ;)


Naja wenn du in dem Fall 21 ausgegeben haben willst mußt du das Break weglassen! oder täusch ich mihc??

ist doch bei
PHP:
switch($variable)
{
  case 1:
    echo "2";
    break;
  case 1:
    echo "1";
    break;
}
das gleiche, bekommst auch nur 2 ausgegeben!!

PHP:
switch($variable)
{
  case 1:
    echo "2";
case 1:
    echo "1";
    break;
}
so bekommst 21 ausgegeben oder!?!?
 
Bububoomt schrieb:
PHP:
switch($variable)
{
  case 1:
    echo "2";
case 1:
    echo "1";
    break;
}
so bekommst 21 ausgegeben oder!?!?
das zweite case wird dann unwirksam (weil ident mit erstem) und kann weggelassen werden:
PHP:
switch($variable)
{
  case 1:
    echo "2";
    echo "1";
    break;
}

https://php.net/switch
 
Zuletzt bearbeitet:
so wenn ich net ganz doof bin oder es noch net zu spät is sollter der syntax stimmen und es so passen

PHP:
$data_r = mysql_fetch_object(mysql_query("SELECT `gbdel`,`gbcom`,`name` FROM `rights` WHERE `rid` = '".$admin_rights."'"));

(($data_r->gbdel == 1)?'<i>".$data_r->name."</i><br />
						<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />':
($data_r->gbcom == 1)?'<i>".$data_r->name."</i><br />
						<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />':
($data_r->gbdel == 1 && $data_r->gbcom == 1)?'<i>".$data_r->name."</i><br />
												<a class=\"menulink\" href=\"gbdel.php\">Gästebucheinträge löschen</a><br />
										  		<a class=\"menulink\" href=\"gbcom.php\">Gästebucheinträge kommentieren</a><br />':'Keine Menürechte');

wobei du dir im klaren sein solltest ne ordentliche if elseif else bedingung is schneller und switch is noch nen tick schneller als if elseif else

also probier erstmal mein switchschnipsel aus ich bin guter dinge das der passt :mrgreen:

so hackerchen nu bist du wieder dran :biggrin:
 
DocTrax schrieb:
das zweite case wird dann unwirksam und kann weggelassen werden:
PHP:
switch($variable)
{
  case 1:
    echo "2";
    echo "1";
    break;
}
https://php.net/switch

Eben nicht, es gibt fälle wo das einen grund hat.

PHP:
switch($variable)
{
  case 1:

if($x==1)
++$variable;
else
echo $x;

case 2;
    echo "1";
    break;
}

PHP:
switch($variable)
 {
   case 1:

if($x==1)
++$variable;
else
echo $x;

case 2;
     echo "1";
     break;
 }


Unterschied ersichtlich? Mir viel gerade nichts sinnvolles ein, aber gibt es schon...
 
Ich meinte nur weil es ident mit dem ersten case ist und kein break mehr da ist.

Aus der Manual https://php.net/switch :
PHP:
switch ($i) {
case 0:
   echo "i ist gleich 0";
case 1:
   echo "i ist gleich 1";
case 2:
   echo "i ist gleich 2";
}

Wenn $i==0 gibt es aus:
i ist gleich 0
i ist gleich 1
i ist gleich 2
Wenn $i==1 gibt es aus:
i ist gleich 1
i ist gleich 2
Wenn $i==2 gibt es aus:
i ist gleich 2

Der Mist passiert eben weil kein break gesetzt ist.

PHP:
switch ($i) {
case 0:
case 1:
case 2:
   echo "i ist grösser gleich 0 und kleiner gleich 2";
}
Das macht Sinn. ;)
 
Zuletzt bearbeitet: