Avatar billede tobrukDk Novice
17. juli 2013 - 19:10 Der er 8 kommentarer og
2 løsninger

Fremvise fejl kommer ikke på siden.

Hej

Men jeg sidder i et problem hvor jeg ikke kan få den her til at virker
$godkendteKategorier = array("Frontend", "Backend", "Design");
            $kategorier = explode(",", $_POST["kategori"]);
            foreach($kategorier as $kategori)
            {
                if(!in_array($kategori, $godkendteKategorier))
                {
                    echo "Fejl";
                }
            }



Det som den skal gør det er kategori er der 3 valg mulighed som du kan se, og hvis jeg klik på 2 af dem og den sidste gå jeg ind i value og rette om til f.eks "hahah" eller ligne i den stille så kommer det frem og stå selvom det ikke findes i databasen :(

Problemet er :

den skal komme frem med "fejl" til at start med :)

sådan her er hele koden ud;

<?php
if(isset($_POST["opret"]))
{
if($_POST["title"] == "")
{
    echo "Husk at skrive title!";
}
elseif($_POST["tekst"] == "")
{
    echo "Husk at skrive tekst!";
}
elseif($_POST["kategori"] == "")
{
    echo "Husk at angive kategori!";
}
elseif($_POST["point"] == "")
{
    echo "Husk at angive point!";
}
else
{
    $godkendteKategorier = array("Frontend", "Backend", "Design");
    $kategorier = explode(",", $_POST["kategori"]);
    foreach($kategorier as $kategori)
    {
        if(!in_array($kategori, $godkendteKategorier))
        {
            echo "Fejl";
        }
    }
$arr = array(60, 40, 20, 10);
$point = implode($_POST["point"]);

    if(in_array($point, $arr))
    {
        if ($stmt = $this->mysqli->prepare('UPDATE `bruger` SET `point`= `point` - ? WHERE `id`=?')) {
            $stmt->bind_param('ii', $point, $id);
            $point = implode($_POST["point"]);
            $id = $_SESSION["id"];
            $stmt->execute();
            $stmt->close();
        }
       
        $str = $_POST["title"];
        $from = array("=", "+", "&",'"', "'", " ", "æ", "Æ", "ø", "Ø", "å", "Å");
        $to = array("-", "", "og", "", "", "-", "ae", "Ae", "oe", "Oe", "aa", "Aa");
        $alias = strtolower(str_replace($from, $to, $str));
   
        if ($stmt = $this->mysqli->prepare('INSERT INTO `artikler` (`title`, `tekst`, `kategori`, `url`, `skrevet_af`, `emne`, `dato`) VALUES (?, ?, ?, ?, ?, ?, ?)')) {

            /* Bind parametre */
            $stmt->bind_param('sssssis', $title, $tekst, $kategori, $url, $skrevet_af, $emne, $dato);

            /* Sæt værdier på parametrene */
            $title = $_POST['title'];
            $tekst = $_POST["tekst"];
            $kategori = implode(",",$_POST["kategori"]);
            $url = $alias;
            $skrevet_af = $_SESSION["navn"] . " " . $_SESSION["efternavn"];
            $emne = implode($_POST["point"]);
            $dato = date('Y-m-d H:i:s');

            /* Eksekver forespørgslen */
            $stmt->execute();
           
            echo "godkendt";
           
            $stmt->close();

        } else {
            /* Der er opstået en fejl */
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
        }
    else
    {
        echo "Du skal ikke snyd!";
    }
}
}
?>


Håber virkelig du kan hjælp mig med at løse dette her lille stykke kode, jeg har brugt 3-4 timer på at løse den men har ingen vejen kommet :( håber du kan hjælp mig :)
Avatar billede MadsHaupt Juniormester
17. juli 2013 - 20:03 #1
Du har slemt at connecte til databasen.

Retelse af kode (Det der er understreget er det er ikke virker, og det er er fed er det du skal skrive i stedet):

<?php

$mysqli = new mysqli(host, user, password, database);

if(isset($_POST["opret"]))
{
if($_POST["title"] == "")
{
    echo "Husk at skrive title!";
}
elseif($_POST["tekst"] == "")
{
    echo "Husk at skrive tekst!";
}
elseif($_POST["kategori"] == "")
{
    echo "Husk at angive kategori!";
}
elseif($_POST["point"] == "")
{
    echo "Husk at angive point!";
}
else
{
    $godkendteKategorier = array("Frontend", "Backend", "Design");
    $kategorier = explode(",", $_POST["kategori"]);
    foreach($kategorier as $kategori)
    {
        if(!in_array($kategori, $godkendteKategorier))
        {
            echo "Fejl";
        }
    }
$arr = array(60, 40, 20, 10);
$point = implode($_POST["point"]);

    if(in_array($point, $arr))
    {
        if ($stmt = $this->mysqli->prepare('UPDATE `bruger` SET `point`= `point` - ? WHERE `id`=?')) {
        if ($stmt = $mysqli->prepare('UPDATE `bruger` SET `point`= `point` - ? WHERE `id`=?')) {
            $stmt->bind_param('ii', $point, $id);
            $point = implode($_POST["point"]);
            $id = $_SESSION["id"];
            $stmt->execute();
            $stmt->close();
        }
     
        $str = $_POST["title"];
        $from = array("=", "+", "&",'"', "'", " ", "æ", "Æ", "ø", "Ø", "å", "Å");
        $to = array("-", "", "og", "", "", "-", "ae", "Ae", "oe", "Oe", "aa", "Aa");
        $alias = strtolower(str_replace($from, $to, $str));
 
        if ($stmt = $this->mysqli->prepare('INSERT INTO `artikler` (`title`, `tekst`, `kategori`, `url`, `skrevet_af`, `emne`, `dato`) VALUES (?, ?, ?, ?, ?, ?, ?)')) {
        if ($stmt = $mysqli->prepare('INSERT INTO `artikler` (`title`, `tekst`, `kategori`, `url`, `skrevet_af`, `emne`, `dato`) VALUES (?, ?, ?, ?, ?, ?, ?)')) {

            /* Bind parametre */
            $stmt->bind_param('sssssis', $title, $tekst, $kategori, $url, $skrevet_af, $emne, $dato);

            /* Sæt værdier på parametrene */
            $title = $_POST['title'];
            $tekst = $_POST["tekst"];
            $kategori = implode(",",$_POST["kategori"]);
            $url = $alias;
            $skrevet_af = $_SESSION["navn"] . " " . $_SESSION["efternavn"];
            $emne = implode($_POST["point"]);
            $dato = date('Y-m-d H:i:s');

            /* Eksekver forespørgslen */
            $stmt->execute();
         
            echo "godkendt";
         
            $stmt->close();

        } else {
            /* Der er opstået en fejl */
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
        }
    else
    {
        echo "Du skal ikke snyd!";
    }
}
}
?>
Avatar billede tobrukDk Novice
17. juli 2013 - 20:31 #2
vdr mit spørgsmål er det her som er problemet!


$godkendteKategorier = array("Frontend", "Backend", "Design");
    $kategorier = explode(",", $_POST["kategori"]);
    foreach($kategorier as $kategori)
    {
        if(!in_array($kategori, $godkendteKategorier))
        {
            echo "Fejl";
        }
    }


Jeg har database og jeg køre i function så det er derfor jeg bruger "$this->"
Avatar billede MadsHaupt Juniormester
17. juli 2013 - 21:40 #3
Hej, hvordan laver du den blå kasse.
Jeg har testet den kode du har skrevet, den virker OK, så det må være noget helt 3 der er galt.
Avatar billede arne_v Ekspert
18. juli 2013 - 02:57 #4
Er du helt sikker paa at du bare vil udskrive "Fejl" og saa koere videre?
Avatar billede MadsHaupt Juniormester
18. juli 2013 - 10:10 #5
Jeg tror jeg ved hvad der er galt.

Du har glemt at stoppe handlingen så den opdatere aligevel.

Reteltse af kode:

<?php
if(isset($_POST["opret"]))
{
if($_POST["title"] == "")
{
    echo "Husk at skrive title!";
}
elseif($_POST["tekst"] == "")
{
    echo "Husk at skrive tekst!";
}
elseif($_POST["kategori"] == "")
{
    echo "Husk at angive kategori!";
}
elseif($_POST["point"] == "")
{
    echo "Husk at angive point!";
}
else
{
    $godkendteKategorier = array("Frontend", "Backend", "Design");
    $kategorier = explode(",", $_POST["kategori"]);
    foreach($kategorier as $kategori)
    {
        if(!in_array($kategori, $godkendteKategorier))
        {
            echo "Fejl";
            exit();
        }
    }
$arr = array(60, 40, 20, 10);
$point = implode($_POST["point"]);

    if(in_array($point, $arr))
    {
        if ($stmt = $this->mysqli->prepare('UPDATE `bruger` SET `point`= `point` - ? WHERE `id`=?')) {
            $stmt->bind_param('ii', $point, $id);
            $point = implode($_POST["point"]);
            $id = $_SESSION["id"];
            $stmt->execute();
            $stmt->close();
        }
     
        $str = $_POST["title"];
        $from = array("=", "+", "&",'"', "'", " ", "æ", "Æ", "ø", "Ø", "å", "Å");
        $to = array("-", "", "og", "", "", "-", "ae", "Ae", "oe", "Oe", "aa", "Aa");
        $alias = strtolower(str_replace($from, $to, $str));
 
        if ($stmt = $this->mysqli->prepare('INSERT INTO `artikler` (`title`, `tekst`, `kategori`, `url`, `skrevet_af`, `emne`, `dato`) VALUES (?, ?, ?, ?, ?, ?, ?)')) {

            /* Bind parametre */
            $stmt->bind_param('sssssis', $title, $tekst, $kategori, $url, $skrevet_af, $emne, $dato);

            /* Sæt værdier på parametrene */
            $title = $_POST['title'];
            $tekst = $_POST["tekst"];
            $kategori = implode(",",$_POST["kategori"]);
            $url = $alias;
            $skrevet_af = $_SESSION["navn"] . " " . $_SESSION["efternavn"];
            $emne = implode($_POST["point"]);
            $dato = date('Y-m-d H:i:s');

            /* Eksekver forespørgslen */
            $stmt->execute();
         
            echo "godkendt";
         
            $stmt->close();

        } else {
            /* Der er opstået en fejl */
            echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
        }
        }
    else
    {
        echo "Du skal ikke snyd!";
    }
}
}
?>
18. juli 2013 - 10:16 #6
Jeg kan heller ikke umiddelbart se noget forkert ved det pågældende kodeafsnit.  Så som sagt i #3 ligger problemet måske et andet sted.  Hvad jeg selv gør i sådanne tilfælde (men det har du måske allerede gjort) er en række echo tests.  Såsom

1.
$godkendteKategorier = array("Frontend", "Backend", "Design");
$kategorier = explode(",", $_POST["kategori"]);
echo $kategorier;

2.
$godkendteKategorier = array("Frontend", "Backend", "Design");
$kategorier = explode(",", $_POST["kategori"]);
foreach($kategorier as $kategori)
{
    echo "FEJL <br>";
}

o.s.v.  På et eller andet sted får du så et uventet resultat, og så skal fejlen søges et sted undervejs fra det sidste sucesfulde resultat.

(Og så, som antydet i #4, når du får det kodeafsnit til at fungere efter hensigten, så synes der at være andre ting længere nede i koden der kan forbedres.)
18. juli 2013 - 11:32 #7
Jeg var så længe om at udarbejde mit indlæg #5 at jeg ikke så #6 der kom i mellemtiden.  Det kan da godt være, at #6 er løsningen.
Avatar billede tobrukDk Novice
18. juli 2013 - 18:29 #8
gør sådan her,


if(isset($_POST["opret"]))
        {
        // Valider alt data er korrekt
        if($_POST["title"] == "")
        {
                echo "<div class=\"snyd\">Husk at skrive title!</div>";
                $fejl = 1;
        }
        if($_POST["tekst"] == "")
        {
                echo "<div class=\"snyd\">Husk at skrive tekst!</div>";
                $fejl = 1;
        }

        // Check kategorier
        $godkendteKategorier = array("Frontend", "Backend", "Design");
        $kategorier = explode(",", $_POST["kategori"]);
        foreach($kategorier as $kategori)
        {
            if(!in_array($kategori, $godkendteKategorier))
            {
                echo "<div class=\"snyd\">Der er fejl i den kategori du har valgt</div>";
                $fejl = 1;
            }
        }

        // Check points
        $arr = array(60, 40, 20, 10);
        $point = implode($_POST["point"]);
        if(!in_array($point, $arr))
        {
            echo "<div class=\"snyd\">Du skal ikke snyd!</div>";
            $fejl = 1;
        }
        if($fejl != 1)
        { 
        // Alt data er ok - gør det vi skal
               
                if ($stmt = $this->mysqli->prepare('UPDATE `bruger` SET `point`= `point` - ? WHERE `id`=?'))
                {
                    $stmt->bind_param('ii', $point, $id);
                    $point = implode($_POST["point"]);
                    $id = $_SESSION["id"];
                    $stmt->execute();
                    $stmt->close();
                }


#Christian_Belgien ligge et svar som var med at til at støt lidt til svar som jeg komme frem til :)

#MadsHaupt ligge et svar da du hjælp til omkring exit();
18. juli 2013 - 18:43 #9
OK, svar fra mig.
Avatar billede arne_v Ekspert
22. juli 2013 - 03:16 #10
foreach($kategorier as $kategori)
        {
            if(!in_array($kategori, $godkendteKategorier))
            {
                echo "<div class=\"snyd\">Der er fejl i den kategori du har valgt</div>";
                $fejl = 1;
            }
        }

maa kunne laves som:

if(count(array_diff($kategorier, $godkendteKategorier)) > 0) {
    echo "<div class=\"snyd\">Der er fejl i den kategori du har valgt</div>";
    $fejl = 1;
}
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