04. november 2011 - 11:24Der er
19 kommentarer og 1 løsning
For mange else if -sætninger
Hej Eksperter. Jeg er efterhånden blevet træt af at lave så mange else if sætninger, fordi nogle medlemmer skal have et bestemt skilt. Derfor tænkte jeg på om man kunne skrive flere navne i én else if-sætning?
Du kunne jo lave det op mod en database og så hvis en given bruger har angivet VHT til 1 så bliver her her vist, hvis ikke så gør du standard, på den måde skal du ikke have FTP adgang hver gang du skal tilføje en ny bruger.
Men altså en if (expresion || expression) kan laves på følgende måde:
Bemærk hvordan at || fungere som symbol for ELLER, hvis bare en af sætningerne er sand køres indeholdet. Ligeledes fungere && som symbol for OG, her skal alle være sand for at indeholdet køres.
Heinzdmx; Jeg har faktisk et "admin" felt, hvor 2 = VHT, men jeg kan ikke få den til så at udskrive alle med $admin = 2 med et VHT skilt, ellers ville det jo helt klart være det nemmeste.
Christian_Belgien: Hmm..altså de SKAL jo alle sammen udskrive, jeg kunne bare ikke få min overstående teknik til at virke..I:
Jamen fortæl lidt om hvad du prøver at lave. Er det således at du i variabelen $name har navnet på et medlem, og at for nogle medlemmer skal du som 'skilt' ikke bruge medlemmes eget navn men et specielt skilt? Hvis du har mange sådanne skilte ville det måske være et job for en database tabel såsom:
$result = mysql_query("SELECT skilt FROM skiltetabel WHERE navn = $navn");
$skilt = mysql_result($result, 0);
Men hvis du vil holde det i php og der er et overkommeligt antal specielle skilte, så kunne switch gøre gavn således:
switch($navn) { case 'Zette': case 'Lala': case 'dudu': echo "$name <font style='color: orange;'>VHT</font>"; break; case 'Ilse': case 'Else': case 'Alse': echo "$name <font style='color: orange;'>VHT</font>"; break; default: echo $name; }
Ikke testet, det er nogen tid siden jeg selv har arbejdet med echo, så måske skal syntaksen bearbejdes, men det er princippet i det.
Hvis det er noget helt andet du vil lave, så fortæl det.
Jeg tror i har forstået mig forkert.. Jeg har et admin felt der angiver således ( mit hoved) at hvis $admin = 2 så er brugeren VHT, også skal så have "VHT" stående med orange skrift bag ved sit navn. Hvis $admin = 0 eller 1, så skal brugerens navn bare stå normalt.
- Ved ikke hvorfor, men mit $admin felt er en INT, den INT starter på 0, men så er nogen af dem altså blevet til 1, UDEN jeg har gjort det? :S - Så jeg har måtte rygge de specielle funktioner ét hak op, for at almindelige brugere ikke også har dem til rådighed..
net-freak; Hmm.. men den skulle jo helst udskrive et orange tekststykke, hvor der står "VHT"? :) Desuden synes jeg det er ret svært at putte ind i dette kodestykke;
$sql="SELECT * FROM $tbl_name ORDER BY sticky DESC,last_answer DESC LIMIT $offset, $limit"; // OREDER BY id DESC is order result by descending $result=mysql_query($sql); ?> <table width="100%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#98CCE2"> <tr> <td width="40%" align="center" bgcolor="#98CCE2"><strong>Emne</strong></td> <td width="25%" align="center" bgcolor="#98CCE2"><strong>Oprettet af</strong></td> <td width="10%" align="center" bgcolor="#98CCE2"><strong>Svar</strong></td> <td width="20%" align="center" bgcolor="#98CCE2"><strong>Dato</strong></td> <td width="5%" align="center" bgcolor="#98CCE2"><strong>Låst?</strong></td> </tr>
<?php while($rows=mysql_fetch_array($result)){ // Start looping table row $name = $rows["name"]; $hvem = $rows["name"]; $laast = $rows["laast"]; ?> <tr> <td bgcolor="#D0E8F2"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic'];?></a><BR></td> <td align="center" bgcolor="#D0E8F2"><a href="profil.php?hvem=<? echo "$hvem"; ?>"><? //ADMINISTRATOR if($name=='Admin') { echo "<font style='color: red;'>WEB/$name</font> <font style='color: orange;'>VHT</font>"; } //MODERATORE else if($name=='Cupcake') { echo "<font style='color: #FF0080;'>MOD/$name</font>"; } else if($name=='Adornetto') { echo "<font style='color: #FF9081;'>MOD/$name</font>"; }(der er MANGE flere else-if-sætninger, også er der også masser af kode efter det. :) )
Net-freak, åhw det har jeg glemt og sige. Lige nu arbejder vi i et forum (hvis du ikke har bemærket det), og derfor er vi i tabellen forum_question. Mine $admin værdier lægger i databasen members...:S
Net-Freak: Men kan jeg godt beholde den sql jeg har nu, også lave en sql2, hente $admin derfra, også fortsætte med at udskrive oplysninger fra den første sql?
Både og.. Det kan godt lade sig gøre at flette det sammen med 2 queries, men jeg vil foreslå du Googler LEFT JOIN f.eks, så du kan lave to queries om til én.
Du vil udskrive en liste af forum indlæg med, blandt andet, navnet på den der har oprettet indlægget. Hvis den der har oprettet indlægget har en special status, såsom administrator eller moderator, skal der sættes et skilt ved navnet. En administrator skal have VHT vist i et orange felt, en moderator skal have MOD vist. Har jeg forstået det korrekt?
Du trækker de fleste oplysninger fra tabellen forum_question, men oplysningerne om medlemmerne og deres status har du, korrekt ifølge principperne om relationelle databaser, i en særskilt tabel members. Tabellen members har muligvis, følgende felter:
id navn status adresse o.s.v 1 Zette 2 Brogade1 2 Lala 1 Senvej 8 3 Else 3 Asgården 5 4 Dudu 0 Osmanvej 13
hvor status 0 og 1 er 'almindelige' medlemmer, 2 er admin, 3 er moderator
Jeg foreslår dig at udvide/tilpasse din query således:
$sql = "SELECT f.*, m.status FROM forum_question f JOIN members m ON f.name = m.name ORDER BY ....o.s.v";
(Du lægger mærke til, at jeg giver de to tabeller 'øgenavnene' f og m.)
Så vil din $rows indeholde en $rows['status'] som du kan bruge til at finde det rigtige skilt når du udskriver navnet. Altså, hvis status er 2 definerer du:
Formålet med mit kodeforslag er at vise princippet, ikke at give dig en færdig og testet løsning. Du skal muligvis selv til at bakse syntaksen lidt på plads. Princippet er altså, at i stedet for at lave en lang række 'else if' for de specifikke navne (som du så skal rette til hver gang du skifter moderator eller admin) så joiner du med members tabellen og trækker status derfra.
Jeg har nu valgt at lukke tråden, da jeg nok ikke får mulighed for at afprøve før om et par dage.
Christian: Jeg prøver dit forslag, så snart min side er oppe igen, også må jeg vel enten sende en besked, eller lave et nyt emne.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.