Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 11:24 Der 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?

De ser pt. sådan ud;

else
if($name=='Zette')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}

Synes bare det er irriterende at hele tiden skulle have så mange sætninger, derfor ville jeg skrive noget lin:

else
if($name=='Zette','Lala','dudu')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}

Men det vil den altså ikke.. :)
Avatar billede heinzdmx Nybegynder
04. november 2011 - 11:32 #1
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:


else
if($name=='Zette' || $name=='Lala' || $name=='dudu')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}


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.
Avatar billede niklask Nybegynder
04. november 2011 - 11:32 #2
else
if($name=='Zette' || $name=='Lala' || $name=='dudu')
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
04. november 2011 - 11:46 #3
Har du tænkt på at anvende funktionen switch?  Den er netop beregnet til at undgå en masse else if'er.  Her er et link:

http://www.w3schools.com/php/php_switch.asp
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 11:52 #4
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:
04. november 2011 - 12:17 #5
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.
Avatar billede majbom Novice
04. november 2011 - 12:22 #6
eller mere dynamisk:

$navne = array('Zette','Lala','dudu');
$navn = 'Zette';

if(in_array($navn, $navne))
{
  echo "$name <font style='color: orange;'>VHT</font>";
}
Avatar billede majbom Novice
04. november 2011 - 12:22 #7
med dynamisk menes selvfølgelig at arrayet skulle generes på bagrund af data fra en tabel eller lign.
Avatar billede net-freak Nybegynder
04. november 2011 - 12:28 #8
Du kan jo bare loope brugerne igennem, og alle dem med et bestemt felt der har en bestemt value får udprintet hvad du vil have udprintet.

Altså

$query = mysql_query("SELECT * FROM TABLE")
while($data = mysql_fetch_assoc($query)) {
  if($data['admin'] == 'din_admin_value') {
    echo 'Besked til admins';
  } else {
    echo 'Besked til non admins';
  }
}
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 12:32 #9
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..
Avatar billede net-freak Nybegynder
04. november 2011 - 12:52 #10
Javel, så gør du som jeg skrev før, således:

$query = mysql_query("SELECT * FROM TABLE")
while($data = mysql_fetch_assoc($query)) {
    if($data['admin'] != 2) {
        echo 'Almindelig bruger '.$data['brugernavn_felt'];
    } else {
        echo 'VHT/ADMIN '.$data['brugernavn_felt'];
    }
}
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 12:55 #11
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. :) )
Avatar billede net-freak Nybegynder
04. november 2011 - 13:41 #12
Baseret på din kode, og hvad jeg tror du gerne vil have, så prøv det her:


<?php
$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($admin==2) {
        echo "<font style='color: red;'>WEB/$name</font> <font style='color: orange;'>VHT</font>";
    } else {
        echo "<font style='color: #FF0080;'>MOD/$name</font>";
    }
}

?>
</td>
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 13:47 #13
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
Avatar billede net-freak Nybegynder
04. november 2011 - 13:59 #14
Jeg svarer kun på baggrund af de informationer jeg har fået til rådighed :)
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 14:01 #15
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?
Avatar billede net-freak Nybegynder
04. november 2011 - 14:11 #16
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.
Avatar billede Milla-Tigerdyr Praktikant
04. november 2011 - 14:14 #17
Har lige googlet den.. forstår den slet ikke../:
- Hvordan ville det andet kunne lade sig gøre?
06. november 2011 - 08:25 #18
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:

$statusnavn = "<font style='color: red;'>WEB/$name</font> <font style='color: orange;'>VHT</font>";

Hvis status er 3 definerer du:

$statusnavn = "<font style='color: #FF0080;'>MOD/$name</font>";

og hvis status hverken er 2 eller 3 definerer du

$statusnavn = "<font style='color: blue;'>$name</font>"; (eller hvordan du vil have almindelige navne til at se ud.)

Så bliver din WHILE løkke noget i denne retning:

<?php
WHILE($rows=mysql_fetch_array($result)
{
  $name = $rows["name"];
  $hvem = $rows["name"];
  $laast = $rows["laast"];
  $status = $rows['status'];

  if($status == 2) $statusnavn = "<font style='color: red;'>WEB/$name</font> <font style='color: orange;'>VHT</font>";
  else if($status == 3) $statusnavn = "<font style='color: #FF0080;'>MOD/$name</font>";
  else $statusnavn = "<font style='color: blue;'>$name</font>";
?>

<tr>
<td .... echo $rows['topic']...</td>

<td align="center" bgcolor="#D0E8F2">
<a href="profil.php?hvem=<?php echo "$hvem"; ?>">
<?php echo $statusnavn ?>
</a>
<br>
</td>
}

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.
16. november 2011 - 05:23 #19
Milla-Tigerdyr, tabte du pusten?  Kom ind og fortæl hvordan det går.
Avatar billede Milla-Tigerdyr Praktikant
16. november 2011 - 15:45 #20
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester