webForumDet fria alternativet

En till if-sats fråga

PHP

2 svar · 223 visningar · startad av donkey

Medlem sedan jan. 2004179 inlägg
Frågan#1

På sidan använder jag mej av en if-sats och GET för att visa olika innehåll. Ex. såhär

<? if ($_GET['id'] == "1") { ?>
id1
<? } elseif ($_GET['id'] == "2" | "21") { ?>
id2 eller id21
<? } elseif ($_GET['id'] == "3" | "31") { ?>
id3 eller id31
<? } ?>

Jag tycker det här borde fungera, men det gör det inte. Den första (id1) och den andra (id2 & id21) fungerar, men den tredje fungerar inte, utan då visas bara den andra. Tanken är alltså att ex. ?id=2 eller ?id21 ska visa det andra alternativet.
Någon som kan förklara varför eller ge exempel på hur det annars kan lösas?

Medlem sedan aug. 20039 340 inlägg
#2

Vet inte hur du kom på den syntaxen :) men så här bör det se ut:

<? } elseif ($_GET['id'] == "2" || $_GET['id'] == "21") { ?>

Det som händer nu är att först kollas om id är "1" är det inte det går den vidare. Sen kollar den om antingen $_GET['id'] == "2" är sant eller om "21" är sant, eftersom koden är felskriven. Och eftersom strängen "21" alltid är sann om man säger så, kommer skriptet stanna där.
Ett annat sätt att göra samma sak är:

<? switch ($_GET['id']) { 
case "1":
?>
id1
<? break;
case "2":
case "21": ?>
id2 eller id21
<? break;

case "3":
case "31": ?>
id3 eller id31
<? break;
} ?>

Med denna syntax är det dock viktigt att du inte glömmer break efter varje alternativ, som jag visar ovan.

Medlem sedan jan. 2004179 inlägg
#3

Funkar tack så mycket för hjälpen!

251 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)