switch
samteam
- php
0 JL0 samteam
0 Stephan Huber0 samteam0 Stephan Huber0 samteam0 Carsten0 samteam
0 Stephan Huber
0 Carsten
Hallo
ich habe eine IF-Abfrage die ich gerne in switch umwandeln lassen würde mit else habe ich aber Problem kann mir jemand das mal umwandeln
Danke
if ($zeile["menuid"]== "2")
{
$menue_id = "2";
echo "<td><a href="#">".$zeile["menu"]."</a></td>";
} else {
echo "<td><a href="#">".$zeile["menu"]."</a></td>";
Danke
hi,
http://www.php.net/manual/de/control-structures.switch.php
'default:' ist das, was du anstelle von 'else' brauchst.
mfg, JL
'default:' ist das, was du anstelle von 'else' brauchst.
Hallo
ja aber wie setze ich es bei meiner Abfrage ein
switch ($zeile["menuid"])
{
case 1: $menue_id = "2";
break;
case 2: $menue_id = "3";
break;
case 2: $menue_id = "4";
break;
case 2: $menue_id = "5";
break;
default:
???
$menue_id != $zeile["menuid"];
endswitch;
voerher
if ($zeile["menuid"]== "2")
{
$menue_id = "2";
echo "<td><a href="#">".$menue_id."</a></td>";
} else {
echo "<td><a href="#">".$menue_id."</a></td>";
}
Hallo samteam,
ich habe eine IF-Abfrage die ich gerne in switch umwandeln lassen würde mit else habe ich aber Problem kann mir jemand das mal umwandeln
switch($zeile["menuid"])
{
case "2":
$menue_id = "2";
echo "<td><a href="#">".$zeile["menu"]."</a></td>";
break;
default:
echo "<td><a href="#">".$zeile["menu"]."</a></td>";
}
...und was die Probleme mit Else betrifft, wird Dir im Chat sicher gerne geholfen... Laß Dich doch einfach nicht von Frauenproblemen vom Lesen des PHP-Manuals abhalten (*scnr*).
Aber mal im Ernst: was ist Dein Problem, jetzt hast Du das gleiche mit switch, was soll das gegenüber der if/else-Kombi bringen?
Viele Grüße
Stephan
Hallo
danke für die Bemerkung
Aber mal im Ernst: was ist Dein Problem, jetzt hast Du das gleiche mit switch, was soll das gegenüber der if/else-Kombi bringen?
ich habe mehrere CAS mit gleicher Variable
case 1: $menue_id = "2";
break;
case 2: $menue_id = "3";
break;
case 2: $menue_id = "4";
break;
case 2: $menue_id = "5";
muß ich dann bei jedem case dan das echo ausgeben oder kann ich das auch verkürzen wie bei
if
elseif
elseif
else
Hallo samteam,
ich habe mehrere CAS mit gleicher Variable
case 1: $menue_id = "2";
break;
case 2: $menue_id = "3";
break;
case 2: $menue_id = "4";
break;
case 2: $menue_id = "5";
muß ich dann bei jedem case dan das echo ausgeben oder kann ich das auch verkürzen wie bei
Wenn Du den "break" weglässt, dann werden alle nachfolgenden cases ausgeführt, also mit
case 1:
case 2:
case 3:
$menue_id="2";
break;
kriegst Du für Wert 1-3 der geswitchten Variablen $menue_id als "2" gesetzt.
So wie Du es geschrieben hast, macht es wenig Sinn, weil Du die case-statements wiederholst, und Du gibt PHP im Endeffekt für case 2 drei wiedersprüchliche Anweisungen (ich hab's nicht ausprobiert, aber normalerweise sollte bei case 2 $menue_id am Ende dann 5 sein, die beiden anderen cases sind dann völlig überflüssig.)
Vielleicht kannst Du mal schildern, wofür Du das brauchst, im Moment verstehe ich Dein Problem echt nicht. Da der String bei Echo auch keine Variablen enthälten, die im if/else oder switch verändert werden, kannst Du sie auch einfach nachher ausgeben, ohne Bedingung.
Viele Grüße
Stephan
Hallo
ich habe das Problem das wenn ich eine If-Abfrage mache bzw. jetzt mit switch arbeite das ein Wert immer von der ersten Abfrage genommen wird:
<table cellspacing="0" cellpadding="0" border="1">
<tr>
<td class="blank<? echo $menucount;?>"> </td>
<?
$menue_select = mysql_query("select * from wsc_menu
where hnr='19999'
and aktiv='1'
order by menuid");
while($zeile = mysql_fetch_array($menue_select))
{
switch ($zeile["menuid"])
{
case 2: $menue_id = "2";
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
break;
case 3: $menue_id = "3";
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
break;
default:
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
}
}
?>
</tr>
</table>
So das ist mein gekürztes Script, beim ausführen sehe ich dann bei MouseOver das der wert menue_id immer den Wert von case 2: hat aber die anderen werden ignoriert.
Wenn ich nur mit einem Case oder if-Abfrage arbeite klappt alles
ich brauch für jede ausgegeben Variable $zeile["menu"] die dazugehörige Variable menu_id
es sind alle in der DB vorhanden
wie gesagt wenn ich einen fest Wert vorgebe, dann klappt es nur bei einer größeren Abfrage nicht mehr.
Verstanden?
Danke
Hallo samteam!
Ich bin mir nicht ganz sicher ob der Code so laufen soll wie du ihn geschrieben hast, etwas aufgeräumt sieht das nämlich so aus:
while($zeile = mysql_fetch_array($menue_select))
{
switch ($zeile["menuid"])
{
case 2:
$menue_id = "2";
break;
case 3:
$menue_id = "3";
break;
default:
// hier wird $menu_id nicht gesetzt
break;
}
echo "<td><a href="#?menue_id=$menue_id>"",$zeile["menu"],"</a></td>";
}
und das bedeutet, dass die Menü Id nur 2 oder 3 werden kann, bei allen anderen behält sie ihren letzen Wert bei, der kann sogar undefiniert (da macht php dann "" oder 0 von) sein.
Beispiel, falls in der db die Einträge 1,2,4,5 vorkommen:
Menü Id Angezeigt
1 #?menue_id=
2 #?menue_id=2
4 #?menue_id=2
5 #?menue_id=2
soweit so unklar?
Gruss,
Carsten
Hallo,
und das bedeutet, dass die Menü Id nur 2 oder 3 werden kann, ...
ich brauch aber zu jedem Menü ID die dazugehörige Nr
Das heißt wenn ich mit der Maus über den Menülink Menü1 gehe brauche ich hierzu den Menü ID 1 wegen einem Layer/Ebene die dann zu dem passenden Menüpunkt angezeigt wird
bei Menü2 die Menü ID 2
bei Menü3 die Menü ID 3
wenn die Maus den Link verläst ist dann auch der Layer/Ebene nicht mehr sichtbar
deswegen muß ich abfragen
Vileicht gehe ich das ganze auch falsch an
Verstanden?
Danke
Hallo samteam,
while($zeile = mysql_fetch_array($menue_select))
{
switch ($zeile["menuid"])
{
case 2: $menue_id = "2";
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
break;
case 3: $menue_id = "3";
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
break;
default:
echo "<td><a href="#?menue_id=".$menue_id.">
".$zeile["menu"]."</a></td>";
}
}
So das ist mein gekürztes Script, beim ausführen sehe ich dann bei MouseOver das der wert menue_id immer den Wert von case 2: hat aber die anderen werden ignoriert.
Wenn ich nur mit einem Case oder if-Abfrage arbeite klappt alles
ich brauch für jede ausgegeben Variable $zeile["menu"] die dazugehörige Variable menu_id
Verstanden?
Naja, so halb. Dein switch-statement ist syntaktisch ok, daran liegt es also nicht. Ich nehme mal an, daß beim ersten Durchlauf der Schleife case 2 erfüllt ist, dann wird $menue_id auf 2 gesetzt. Bei allen folgenden Durchläufen ist dann wohl kein case erfüllt, PHP landet bei default, und da Du $menue_id nicht bei jedem Durchlauf initialisierst ($menue_id="";), wird wieder 2 ausgegeben.
Probier mal $menue_id=""; vor den switch zu setzen, dann vermeidest Du, daß der vorherige Schleifendurchlauf eine Rolle spielt. Generell ist aber, so wie das Skript ist, der switch überflüssig:
while($zeile = mysql_fetch_array($menue_select))
{
echo "<td><a href="#?menue_id=".$zeile["menuid"].""".$zeile["menu"]."</a></td>";
}
Das würde genauso gut funktionieren.
Viele Grüße
Stephan
Hallo Stephan!
case 1: $menue_id = "2";
break;
case 2: $menue_id = "3";
break;
case 2: $menue_id = "4";
break;
case 2: $menue_id = "5";
So wie Du es geschrieben hast, macht es wenig Sinn, weil Du die case-statements wiederholst, und Du gibt PHP im Endeffekt für case 2 drei wiedersprüchliche Anweisungen
Mein PHP nimmt dann nur den ersten, in C gibt sowas einen Compilerfehler (was IMHO sinnvoller ist).
Gruss,
Carsten