Avatar billede hrole Mester
14. april 2011 - 20:31 Der er 6 kommentarer og
1 løsning

Problemer med if og operatorer

Hej,
Jeg har følgende kode:

if (($_POST['hund']) == (1)) {
  include($_SERVER[DOCUMENT_ROOT].'side_a.php');
}

if ($_POST['kat'] == (2 || 3 || 4 || 5)) {
  include($_SERVER[DOCUMENT_ROOT].'/side_a.php');
}

if ($_POST['kat'] == (6 || 7 || 8)) {
  include($_SERVER[DOCUMENT_ROOT].'/side_b.php');
}

Det der undrer mig er at hvis $_post er fx 6, køres både side_a og side_b, men det burde kun være side_b.

Hvad overser jeg og hvor er fejlen?
Avatar billede tjens Nybegynder
14. april 2011 - 21:24 #1
( 3 || 4 || 5) evalueres først til en boolean = true;

og da værdien 6 ikke er false går den ind i if'en.
Avatar billede morten12345678 Nybegynder
14. april 2011 - 21:27 #2
Din if er ikke stillet korrekt op.

Prøv

if ($_POST['hund'] == '1') {
  include($_SERVER[DOCUMENT_ROOT].'side_a.php');
}
if ($_POST['kat']=='2' || $_POST['kat']=='3' || $_POST['kat']=='4' || $_POST['kat']=='5') {
  include($_SERVER[DOCUMENT_ROOT].'/side_a.php');
}
if ($_POST['kat']=='6' || $_POST['kat']=='7' || $_POST['kat']=='8')) {
  include($_SERVER[DOCUMENT_ROOT].'/side_b.php');
}

Alternativt og meget pænere løsning er

switch ($_POST['hund']) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}

switch ($_POST[kat]) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
Avatar billede hrole Mester
14. april 2011 - 21:29 #3
ok, jeg troede if ($_POST['kat'] == (6 || 7 || 8)) {, blve læst som hvis variablen $_POST['kat'] er lig med 6 eller 7 eller 8, så include....

Hvordan får jeg så koden skrevet om så den er identisk med min beskrivelse?
Avatar billede hrole Mester
14. april 2011 - 21:32 #4
morten12345678: ja dit første forslag havde jeg tænkt som mulighed, men troede det andet kunne lade sig gøre. jeg vælger case-switchen som jeg også havde overvejet. Smid svar da din kommentar var svar på mit spørgsmål
Avatar billede morten12345678 Nybegynder
14. april 2011 - 21:34 #5
her :o)
Avatar billede erikjacobsen Ekspert
14. april 2011 - 21:43 #6
En anden løsning er at skrive det med funktionen in_array. Ca.:

if (in_array($_POST['kat'], array('2','3','4','5'))) {
  ....
}
Avatar billede hrole Mester
15. april 2011 - 18:29 #7
erikjacobsen: tak for forslaget, det lyder meget fornuftigt, jeg kikker på det.
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