Avatar billede MSR Juniormester
15. januar 2012 - 15:05 Der er 15 kommentarer og
1 løsning

if && if

hej. kan følgende lade sig gøre?

if($_GET["mode"] == "delete")
        {
        if(isset($_POST["delete"]) && is_array($_POST["delete"])
        {$sql = "DELETE FROM kontaktmails WHERE id IN (".implode(",", $_POST["delete"]).")";
    mysql_query($sql) or die (mysql_error());
    echo "Kontakt slettet!";
} else
    {echo "Du skal udfylde alle felter";};
    }
elseif ($_GET["mode"] == "opret" && isset($_POST["navn"]) && isset($_POST["email"]))
{$result = mysql_query("INSERT INTO kontaktmails (navn, gren, email) VALUES ('$navn', '$gren', '$email')") OR DIE(mysql_error());
echo "Kontakt oprettet!";
};

altså en if (i en if) med en else til sidst? jeg har læst mig til at det burde kunne lade sig gøre men siden fejler når jeg gør som ovenstående. hvad hulen gør jeg forkert?
ps: jeg skal nok svare hurtigt!

Magnus
Avatar billede olebole Juniormester
15. januar 2012 - 15:29 #1
<ole>

Ja, det kan du godt, men det er svært at overskue - både for dig selv og andre - når du kaster koden ned i filen med en skovl  *o)

Skriv koden ordentligt og ryk den ind, så det er til at overskue, hvad det egentlig er, der står. Ellers har du ikke kinamands chance for at vedligeholde/ændre koden om en uge eller to:

if($_GET["mode"] == "delete") {
    if(isset($_POST["delete"]) && is_array($_POST["delete"]) {
        $sql = "DELETE FROM kontaktmails WHERE id IN (".implode(",", $_POST["delete"]).")";
        mysql_query($sql) or die (mysql_error());
        echo "Kontakt slettet!";
    } else {
        echo "Du skal udfylde alle felter";};
    }
else if ($_GET["mode"] == "opret" && isset($_POST["navn"]) && isset($_POST["email"])) {
    $result = mysql_query("INSERT INTO kontaktmails (navn, gren, email) VALUES ('$navn', '$gren', '$email')") OR DIE(mysql_error());
    echo "Kontakt oprettet!";
}

/mvh
</bole>
Avatar billede MSR Juniormester
15. januar 2012 - 15:43 #2
tak. det ville jeg også gerne men jeg kunne ikke lure hvordan?
I min kode ser det rigtigt ud mht indrykning men min copy-paste er helt tosset.
hvad er den snedige måde at overskue if sætninger?
if()
{handling}; ?
Avatar billede olebole Juniormester
15. januar 2012 - 15:59 #3
Det er ikke så svært at stille det overskueligt op:

if (BETINGELSE) {
    // HANDLING
}
else if (BETINGELSE) {
    // HANDLING
} else {
    // HANDLING
}

- men nogen udviklere foretrækker at sætte begyndelsesklammen på 'næste' linje:

if (BETINGELSE)
{
    // HANDLING
}
else if (BETINGELSE)
{
    // HANDLING
}
else
{
    // HANDLING
}[/

Hvad man synes er mest overskueligt er et spørgsmål om personlige præferencer. Jeg foretrækker den første, da jeg oprindelig kommer fra JavaScript, som er et af de få sprog, hvor sidstnævnte syntaks kan få utilsigtede resultater og derfor ikke er best practise  =)
Avatar billede heinzdmx Nybegynder
16. januar 2012 - 20:11 #4
Jeg sniger mig lige ind på sidelinjen:

Eftersom jeg er af den type der foretrækker den sidstenævnte måde at opstille klammer på vil jeg gerne høre hvornår det er det går galt? (en anelse off-topic for php dog) :)
Avatar billede MSR Juniormester
16. januar 2012 - 22:01 #5
Shit jeg kan ikke engang finde ud af at lave de blå firkanter der?
hvordan gør man overhoved det?

hver gang jeg paster noget her der er lange linier, kommer det til at ligne "¤!"¤. til mit forsvar ser koden altså nu pæn ud men det er svært at vise her når man ikke ved hvordan.

og det forklarer jo heller ikke selve problemet. nemlig at siden fejler med ovenstående indsat, men virker fint uden.

Magnus
Avatar billede heinzdmx Nybegynder
17. januar 2012 - 13:06 #6
Der er flere steder hvor det er gået lidt galt, bl.a. med manglende afsluttende parentes. Desuden er det så vidt jeg ved heller ikke god praksis at lave semi-kolon efter "}".
Der er også nogle steder hvor du har sat dine afsluttende parenteser forkert.

Jeg vil tro du mere vil have din kode til at ligne:
<?
    if($_GET["mode"] == "delete")
    {
        if (isset($_POST["delete"]) && is_array($_POST["delete"]))
        {
            $sql = "DELETE FROM kontaktmails WHERE id IN (".implode(",", $_POST["delete"]).")";
            mysql_query($sql) or die (mysql_error());
            echo "Kontakt slettet!";
        }
        else
        {
            echo "Du skal udfylde alle felter";
        }
    }
    elseif ($_GET["mode"] == "opret" && isset($_POST["navn"]) && isset($_POST["email"]))
    {
        $result = mysql_query("INSERT INTO kontaktmails (navn, gren, email) VALUES ('$navn', '$gren', '$email')") OR DIE(mysql_error());
        echo "Kontakt oprettet!";    
    }
?>



Som Ole siger, lav en ordentlig indrykning (om du bruger den første eller den sidste er jo en smagssans.

Og ja, Eksperten er ikke særlig god til kodestykker, da den laver nogle knap så smarte ting, bl.a. link forkortning, der ofte rammer kodestykker.

Kan ikke lige finde artiklen der forklarer om det, men trikket til boksen er

(div)Indhold(/div)


Her skal du så bare ændre ( til [ og ) til ] (altså BB-Code)
Avatar billede olebole Juniormester
17. januar 2012 - 15:09 #7
Hvad angår BB-kode, kan jeg anbefale min lille BB-editor.

Til spørgsmålet om, hvornår det kan gå galt med 'tuborgblokke' i JavaScript, så kan det f.eks. give problemer ved et return statement. Her returnerer en funktion et objekt:

function fooBar() {
    // En masse kode her

    return {
        "foo": "bar",
        "bar": "foo",
        "baz": fooBar
    };
}
var myObj = fooBar();

- og variablen myObj vil derfor indeholde et objekt efter kaldet til fooBar.

Skriver jeg derimod:

function fooBar() {
    // En masse kode her

    return
    {
        "foo": "bar",
        "bar": "foo",
        "baz": fooBar
    };
}
var myObj = fooBar();

- returneres undefined, som derfor vil være myObj's værdi efter kaldet.
Avatar billede olebole Juniormester
17. januar 2012 - 15:10 #8
PS: Og så er det i øvrigt helt korrekt, at der ikke skal semikolon efter en IF-sætning  =)
Avatar billede kjeldsted Novice
17. januar 2012 - 23:13 #9
Undskyld hvis jeg kommer hér lidt offtopic :)

Men jeg kiggede lige tråden igennem og faldt over #3, hvor du skriver at man i JS helst ikke skal benytte:

if (BETINGELSE)
{
    // HANDLING
}
else if (BETINGELSE)
{
    // HANDLING
}


Nu har jeg selv altid benyttet denne opstilling, og har da også primært beskæftiget mig med PHP. Men er på det seneste ved at bruge en del mere til på JS. Skal jeg til at ændre min efterhånden 5 år gamle vane, eller hvor store konsekvenser har det at benytte den opstilling i JS?

Og undskyld hvis det falder lidt uden for kategori :)
Avatar billede olebole Juniormester
17. januar 2012 - 23:27 #10
@kjeldsted: Der er ingen fare ved at bruge den opstilling ved IF-sætninger. Det er specielt ved return af objekter, der kan opstå problemer, men med tanke for Mr. Murphy og hans lov bør man kun have én måde at gøre en ting på ... ellers bliver den forkerte før eller siden valgt  *o)
Avatar billede kjeldsted Novice
17. januar 2012 - 23:33 #11
@Ole: Så jeg skal altså bare gøre som altid og så satse på jeg ikke får problemer ved retun af objekter :)
Og takker for svar...
Avatar billede olebole Juniormester
17. januar 2012 - 23:51 #12
Du kan også prøve noget nyt og dermed slippe for at skulle bruge fire timer på at komme i tanker om denne tråd om tre måneder, når du løber ind i problemet.  Vi ved jo alle tre, det vil ske ... du, jeg og Murphy  *D
Avatar billede MSR Juniormester
18. januar 2012 - 16:22 #13
mange tak for svar alle sammen.
og det glæder mig at andre også kunne bruge tråden.
jeg har nu lært ikke at bruge ; efter IF sætninger. check!
Koden var forresten designet forkert. den skulle selvfølglig IKKE godkende tomme variabler i "opret" men slette i "delete". Den ser nu sådan ud: (håber det er rigtigt lavet?


<?php
    if($_GET["mode"] == "opret")
    {
        if (empty($_POST["spejdernavn"]) OR empty($_POST["email"]))
        {
        echo "Du skal udfylde alle felter";   
        }
        else
        {
        $result = mysql_query("INSERT INTO kontaktmails (spejdernavn, gren, email) VALUES ('$spejdernavn', '$gren', '$email')") OR DIE(mysql_error());
        echo "Kontakt oprettet!";
        }
    }
    elseif ($_GET["mode"] == "delete" && isset($_POST["delete"]) && is_array($_POST["delete"]))
    {
          $sql = "DELETE FROM kontaktmails WHERE id IN (".implode(",", $_POST["delete"]).")";
        mysql_query($sql) or die (mysql_error());
        echo "Kontakt slettet!";
    }
?>


Jeg ved ikke helt hvem jeg skal give point for der var mange der hjalp. tak for det alle sammen!
Avatar billede olebole Juniormester
18. januar 2012 - 16:41 #14
Ellers tak, jeg samler ikke point  =)
Avatar billede heinzdmx Nybegynder
18. januar 2012 - 23:34 #15
Nu kan pointene jo deles i de tilfælde hvor flere har hjulpet :)

Jeg smider et svar her
Avatar billede MSR Juniormester
22. januar 2012 - 15:14 #16
og det var du så den eneste der gjorde. Stadig mange tak til de andre der hjalp.

Magnus
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