Avatar billede glass Nybegynder
08. maj 2005 - 22:09 Der er 39 kommentarer og
1 løsning

if elseif else koder

Her er 2 koder.
Kode 1 virker ikke, hvorfor?
Og hvilken af disse 2 koder er den bedste/mest sikker at bruge?

<?PHP
//kode 1
if(isset($_GET["side"])=="hej") {
echo "Dette er side 1";
}elseif(isset($_GET["side"])=="do") {
echo "Dette er side 2";
}else {
echo "Dette er forsiden";
}
?>


<?php
//kode 2
if ($_GET['side'] == '1') {
echo "Dette er side 1";
}elseif ($_GET['side'] == '2') {
echo "Dette er side 2";
}else {
echo "Dette er forsiden";
}
?>
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:11 #1
//kode 3
if (isset($_GET["side"]) && $_GET['side'] == '1') {
  // noget
}
Avatar billede barklund Nybegynder
08. maj 2005 - 22:12 #2
//kode 4
if(isset($_GET["side"]) && $_GET['side'] == "hej") {
  echo "Dette er side 1";
}
Avatar billede barklund Nybegynder
08. maj 2005 - 22:12 #3
(jeg har flere koder oppe i ærmet)
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:13 #4
I PHP5 vil der kræves at du benytter isset, udover din select. Det er også den bedste måde.

Du bør gøre det sådan her:

<?php

if(isset($_GET["side"]) && $_GET["side"] == "hej")
{
  echo "Dette er side 1";
}
elseif(isset($_GET["side"]) && $_GET["side"] == "do")
{
  echo "Dette er side 2";
}
else
{
  echo "Dette er forsiden";
}

?>

Men en switch er ligeså god

<?php
if(isset($_GET['side']))
{
  $side = $_GET['side'];
  switch($side)
  {
    case "hej":
    echo "Dette er side 1";
    break;

    case "do":
    echo "Dette er side 2";
    break;
  }
}
else
{
  echo "Dette er forsiden";
}
?>
Avatar billede Slettet bruger
08. maj 2005 - 22:18 #5
claus_joergensen, din switch kan laves smartere:

<?php
switch($_GET['side'])
      {
    case 'hej':
    echo 'Dette er side 1';
    break;

      case 'do':
      echo 'Dette er side 2';
      break;
       
    default:
    echo 'Dette er forsiden';       
    }
?>
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:19 #6
wicez

Der skal alligevel en isset uden om, + at så vil "Dette er forsiden" ikke komme medmindre ?side faktisk ER sat :)
Avatar billede Slettet bruger
08. maj 2005 - 22:19 #7
Her er den kommenteret:

<?php
switch($_GET['side'])
    {
    //i stedet for if($_GET['side'] == 'hej')
    case 'hej':
    echo 'Dette er side 1';
    break;
    //I stedet for elseif($_GET['side'] == 'do')
    case 'do':
    echo 'Dette er side 2';
    break;
    //I stedet for else       
    default:
    echo 'Dette er forsiden';       
    }
?>
Avatar billede Slettet bruger
08. maj 2005 - 22:20 #8
Hvis side ikke er sat, eller er lig andet end "hej" og "do", vil "Dette er forsiden" blive udskrevet, hvilket vel også er hensigten.
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:22 #9
Hvis vi skal være "smarte", så kan vi jo godt:

<?php
$side=isset($_GET['side'])?$_GET['side']:"";
switch($side) {
    case 'hej':
      echo 'Dette er side 1';
      break;

    case 'do':
      echo 'Dette er side 2';
      break;
     
    default:
      echo 'Dette er forsiden';     
    }
?>
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:22 #10
wizez: du kommer ikke udenom at teste med isset
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:22 #11
hmm, ja det kan du godt have ret i.

PHP er også underligt at det kan køre switch på Strings, Java kan kun på Integers.
Avatar billede Slettet bruger
08. maj 2005 - 22:25 #12
1. Jeg tror snart jeg skifter brugernavn, da ingen staver det rigtigt ;'(

2. erikjacobsen er du sikker på at den ikke vil tage "Default", hvis $_GET['side'] ikke er sat?
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:26 #13
2. Det er inderligt ligegyldigt. Du skal teste med isset, da du ellers vil få en advarsel fra PHP, hvis den ellers er konfigureret som den bør.
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:29 #14
Det skulle måske nævnes at $side=isset($_GET['side'])?$_GET['side']:""; er ternary operatoren, som jeg aldrig kan huske syntaksen til :D

http://se.php.net/manual/en/language.operators.php
Avatar billede Slettet bruger
08. maj 2005 - 22:30 #15
oki. Så tror jeg, at jeg vil holde min mund i resten af denne diskussion :o)
Avatar billede olebole Juniormester
08. maj 2005 - 22:35 #17
<ole>

erikjacobsen >> Kunne du ikke beskrive din special-opsætning af PHP? Den fejl har jeg endnu til gode - og jeg kan ikke fremprovokere den i min opsætning af min lokale Apache/PHP med denne kode:

#$bla = "gylp";
switch ($bla) {
    case "gylp":
        print "Bræk";
    break;
   
    default:
        print "Nøh ...";
}

/mvh
</bole>
Avatar billede Slettet bruger
08. maj 2005 - 22:35 #18
claus_joergensen: Det kan jeg heller ikke, derfor holder jeg mig fra dem.
Måske var det på tide at få sat sig ind i disse :o)
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:37 #19
olebole

Der menes at et switch direkte på $_GET['side'] vil retunere i en fejl ("Undefined index  'side' in filnavn.php") , og der derfor skal testes med isset først.

PHP4 giver sjældent denne fejl, hvor PHP5 er mere striks.
Avatar billede Slettet bruger
08. maj 2005 - 22:38 #20
Så er det derfor jeg ikke helt kunne forstå det. Jeg kører med PHP4 :o)
Avatar billede olebole Juniormester
08. maj 2005 - 22:39 #21
- klart ... min lokale er også en 4'er  ;o)
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:42 #22
Det er ikke en specialopsætning. Det er den rigtige opsætning. Det er nu rart at
få at vide, når der er noget galt. Visse mennesker, vi nævner ingen navne, vel Ole,
vil hellere gemme hovedet under busken, end at få at vide de har lavet en fejl. ik' ;)

Får man fejlrapporter som i "rigtige" sprog som Java, C# etc, så kan man altså
nemmere lave korrekte programmer.

Tror du på autoriterne, Ole, så prøv med en
    error_reporting(E_ALL);
øverst i dit script. Er du en kylling så
    error_reporting(0);
Avatar billede olebole Juniormester
08. maj 2005 - 22:42 #23
Ikke, at jeg er i tvivl om, man altid bør checke, om variabler eksisterer - og at de indeholder noget forventet - før man bruger dem.
Jeg har bare aldrig set en fejl af lige den årsag ... og kunne af gode grunde ikke fremkalde den, da jeg testede  :)
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:43 #24
Og autoriteterne kan ikke engang stave til "autoriteterne".... suk
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:43 #25
Skal vi være hel hip, så kunne vi jo smide empty() www.php.net/empty på istedet for isset()

Den fungere på sammen måde, men checker også om ?side=  er blank, eller indeholder en værdi. Det kan tit spare en for et ekstra check.
Avatar billede olebole Juniormester
08. maj 2005 - 22:44 #26
Er error_reporting sat til 'E_ALL' i default-opsætningen af PHP?
Avatar billede Slettet bruger
08. maj 2005 - 22:45 #27
jeg kunne ikke være mere enig claus_joergensen. Jeg har aldrig været ude for, at man ikke har kunnet bruge isset i stedet for empty, mens jeg ofte er ude for det modsatte.
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:46 #28
Det er ikke nær det samme at bruge empty i stedet for isset. Pas på med det. empty er et misfoster, der stort set aldrig har en korrekt anvendelse.
Avatar billede barklund Nybegynder
08. maj 2005 - 22:49 #29
Men hvorfor bruge en midlertidig variabel? Hvorfor ikke bare:

<?php
switch(isset($_GET['side']) ? $_GET['side'] : "") {
    case 'hej':
      echo 'Dette er side 1';
      break;

    case 'do':
      echo 'Dette er side 2';
      break;
   
    default:
      echo 'Dette er forsiden';   
    }
?>

Ingen grund til at lave flere variabler end højst nødvendigt. :)

--
Morten Barklund - der også stemmer for error_reporting(E_ALL)
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:50 #30
Avatar billede claus_joergensen Nybegynder
08. maj 2005 - 22:51 #31
barklund

Pænere kode ?-)
Og hvis man , som jeg i nogle tilfælde, skal bruge værdien af variablen længere nede i scriptet :)

Ellers har du skam ret.
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 22:51 #32
default-opsætning? Tjah, hvem ved. Men det er igen ligegyldigt. Vil du lave PHP-scripts, der skal kunne køre på flere installationer skal du regne med den er sat "hårdest muligt".

Men hvis man bare leger med lidt scripting er alt det vi diskuterer bare pjat. Så skal man have det sjovt og nemt. Spørgeren ville blot have den bedste måde....
Avatar billede olebole Juniormester
08. maj 2005 - 22:56 #33
Jeg tror, du har kikket for dybt i hvidvinen - og blander spørgsmålet sammen med noget, du tror, du har læst. Spørgeren spurgte om brugen af isset. Det er der vist ingen tvivl om. Jeg spurgte om noget helt andet  :)
Avatar billede erikjacobsen Ekspert
08. maj 2005 - 23:03 #34
Og jeg svarer bare som vinden blæser ;) Jeg har nu aldrig forstået hvorfor man skulle kikke på hvidvin?
Avatar billede glass Nybegynder
08. maj 2005 - 23:40 #35
Nå.
claus_joergensen fik svaret på fejlen i kode 1.
Men hvilken en af de 2 jeg skrev er den bedste / mest sikker at bruge?
Avatar billede barklund Nybegynder
08. maj 2005 - 23:46 #36
Altså, om det er mest sikkert at bruge tal eller navne til at identificere siderne? Det er fuldstændig ligegyldigt. Med mindre du selvfølgelig ikke ønsker, at man skal kunne gætte sig til andre sidenavne - for så er tal nemmere at gætte på end længere strenge.
Avatar billede glass Nybegynder
09. maj 2005 - 00:16 #37
Det var ikke det jeg tænkte på.
Men dette:
//kode1
if(isset($_GET["side"]) && $_GET["side"] == "1") {
echo "Dette er side 1";
//kode2
if ($_GET['side'] == '1') {
echo "Dette er side 1";
Avatar billede barklund Nybegynder
09. maj 2005 - 00:32 #38
Om du bruger isset eller ej? Det har intet med sikkerhed at gøre, blot "kode-renlighed". At bruge isset er det rigtigste, og gør man ikke, vil man med strikse indstillinger få en fejl - men det er nok ikke tilfældet for dig.

Jeg vil råde dig til at bruge isset, det vil i hvert fald ikke give problemer på nogen måde - det er blot pænere og rigtigere end at udelade det.
Avatar billede glass Nybegynder
09. maj 2005 - 02:12 #39
claus_joergensen vil du osse ha din del af points?
Avatar billede barklund Nybegynder
09. maj 2005 - 10:42 #40
Tark for points...
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