Avatar billede bpedersen Novice
25. februar 2017 - 00:03 Der er 7 kommentarer

Problem med IF, Elseif, Else

Hej Eksperter,

Jeg kan simpelthen ikke ikke finde ud af hvad jeg gør forkert!

status = I gang
Hvis jeg laver en Echo  $row['status'] vises det korrekt (I gang)

Mit problem er at nedenstående viser Denne sag er klarmeldt! og burde skrive Vi er i gang!


<?php
if($row['status']="Klarmeldt"){
    echo "Denne sag er klarmeldt!";
} elseif ($row['status']="I gang") {
    echo "Vi er i gang!";
} else {
    echo "Sagen er lukket!";
}
?>   

Det skal siges jeg er totalt ny i PHP, så I må bære over med mig :o)

Pft.

/brian
Avatar billede Slettet bruger
25. februar 2017 - 00:25 #1
Du skal bruge dobbelt = til sammenligning.

Altså:
if($row['status']=="Klarmeldt")

og så videre de andre steder. Enkelt lighedstegn putter værdien i variablen i stedet for at sammenligne.
Avatar billede bpedersen Novice
25. februar 2017 - 00:29 #2
Hvis jeg  bruger dobbelt = skriver den at Sagen er lukket!

Så jeg må gøre noget andet galt :o)
Avatar billede olsensweb.dk Ekspert
25. februar 2017 - 01:44 #3
som sandbox også skriver

1 ligheds tegn = tildeling
2 ligheds tegn = sammenligning på værdi
3 ligheds tegn = sammenligning på værdi og datatype

$a = 5; // a tildeles værdien 5 (int)
$b="5"; // a tildeles værdien 5 (string)

$a==$b => true, da værdierne er ens
$a===$b => false, da det ikke er sammen datatype (int og string)


dette burde virke

<?php
if($row['status']=="Klarmeldt"){
    echo "Denne sag er klarmeldt!";
}
else{
    if ($row['status']=="I gang") {
        echo "Vi er i gang!";
    }
    else {
        echo "Sagen er lukket!";
    }
}
?>   



men hvorfor ikke bruge en switch ??

switch($row['status']){
    case "Klarmeldt": 
        echo "Denne sag er klarmeldt!";
    break;
    case "I gang":
        echo "Vi er i gang!";
    break;
    default :
        echo "Sagen er lukket!";
    break;
}



prøvede for sjov denne, da jeg havde mistanke om mellemrum i "I gang" kunne drille i switch
du kan sammenligne det 2 resultater

<?php
$row['status'] = "I gang";

if($row['status']=="Klarmeldt"){
    echo "Denne sag er klarmeldt!";
}
else{
    if ($row['status']=="I gang") {
        echo "Vi er i gang!";
    }
    else {
        echo "Sagen er lukket!";
    }
}

switch($row['status']){
    case "Klarmeldt": 
        echo "Denne sag er klarmeldt!";
    break;
    case "I gang":
        echo "Vi er i gang!";
    break;
    default :
        echo "Sagen er lukket!";
    break;
}
?>
Avatar billede arne_v Ekspert
25. februar 2017 - 03:10 #4
Jeg ville bruge konstanter med numerisk vaerdi i.s.f. de tekst strenge. Mindre risiko for utilsigtede manglende matches (antal mellemrum, efterstillede mellemrum, forskel i store smaa bogstaver, problemer med tegnsaet etc.).
Avatar billede bpedersen Novice
25. februar 2017 - 10:25 #5
Mange tak for jeres input. Jeg har nu fået det til at virke. Desværre uden at finde ud af hvad jeg gjorde galt :o(

@Arne_v - Det du mener er at det ville være bedre men tal, ikke?

Eks.:

1 = Modtaget
2 = I gang
osv.?
Avatar billede olsensweb.dk Ekspert
25. februar 2017 - 10:43 #6
>Jeg ville bruge konstanter med numerisk vaerdi i.s.f. de tekst strenge
helt klar nemmere.

>@Arne_v - Det du mener er at det ville være bedre men tal, ikke?
jeg tror godt jeg kan svare på arne_v's vegne: JO, det ville være nemmere

jeg formoder det er et dataudtræk ( på baggrund af $row['status'] ), så kunne man bare ændre dette så det tager status_id istedet for status_teksten
Avatar billede arne_v Ekspert
26. februar 2017 - 18:20 #7
Ja.

Integer i databasen.

Og sammenligning med define (procedural) eller class constant (object oriented) i PHP.

Det undgaar en masse fejlkilder. Eneste ulempe jeg kan se er at debug output kan vaere svaere at laese.
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

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