Avatar billede krischjo Nybegynder
10. juli 2011 - 03:11 Der er 6 kommentarer og
1 løsning

Error-checking

Hvordan ville det være smartest at gribe et error-check system an?

Jeg har leget lidt med noget ala det her:

<?php

    if(isset($_POST["submit"]) && strlen($_POST["navn"] > 1)){
        $error = 1;
        $message = "Du glemte at skrive et navn, prøv igen";
    }
    if(isset($_POST["submit"]) && strlen($_POST["text"] < 1)){
        $error = 1;
        $message .= "Du glemte at skrive noget text, prøv igen";
    }
?>

<?php

if(!isset($_POST["submit"])){
    $error = 0;
    echo "<form method=post action=>";
    echo "<input type=text name=navn><br>";
    echo "<input type=text name=text><br>";
    echo "<input name=submit type=submit value=Login>";
    echo "</form>";
} elseif(isset($_POST["submit"]) && ($error == 0)) {
    echo "Hello " . $_POST["navn"] . "<br>" . $_POST["text"] . "";
} else {
    echo $message . "<br>";
    echo "<form method=post action=>";
    echo "<input type=text name=navn><br>";
    echo "<input type=text name=text><br>";
    echo "<input name=submit type=submit value=Login>";
    echo "</form>";
}

-----

Hvilket er pisse elendigt, jeg ville gerne prøve at lave det selv - men tror jeg lige mangler at blive sporet ind på hvordan man helt præcist skal gøre det.

Mvh
Kristoffer S.
Avatar billede danco Nybegynder
10. juli 2011 - 13:51 #1
Jeg synes du bør overveje at lave det primære check i javascript og dernæst ligeledes tjekke i PHP.
Formålet med at tjekke gennem javascript vil være at formularen ikke bliver sendt hvis der er en fejl i indtastningerne.

Derudover kan man sige at hvis man deler det op på en sådan måde giver det bedre overholdelse af MVC (Model - view - Control).

Jeg smider dig et lille hurtigt eksempel på hvordan opgaven kunne løses i java script:

function validate(){
            var count = 0;
            var name = document.forms['contactForm']['senderName'].value;
            var mail = document.forms['contactForm']['senderMail'].value;
            var subject = document.forms['contactForm']['subject'].value;
            var msg = document.forms['contactForm']['msg'].value;
            var cap = document.forms['contactForm']['cap'].value;
                if(name==null||name=="") {  $("#name").css ('border','2px solid #FF0000'); count++;} else { $("#name").css ('border','1px solid #000000');  }
                if(!isValidEmail(mail) || mail==null||mail=="") { $("#mailadr").css ('border','2px solid #FF0000'); count++;} else { $("#mailadr").css ('border','1px solid #000000'); }
                if(subject==null||subject=="") { $("#subject").css ('border','2px solid #FF0000'); count++; } else { $("#subject").css ('border','1px solid #000000'); }
                if(msg==null||msg=="") { $("#msg").css ('border','2px solid #FF0000'); count++; } else { $("#msg").css ('border','1px solid #000000'); }
                if(cap==null||cap=="") { $("#cap").css ('border','2px solid #FF0000'); count++;} else { $("#cap").css ('border','1px solid #000000'); }           
            if(count>0) {
                            return false;
                        } else {
                            return true;
                        }
    }

Og du gør så brug af den på følgende måde:

<form action="targetDocument.php" name="contactForm" onsubmit="return validate()" method="post">

Nogle personer vil mene at ovenstående ikke er særlig pænt udformet men principperne er gode og det er så op til den enkelte at vælge i hvilket omfang man ønsker javascript.
Avatar billede olsensweb.dk Ekspert
10. juli 2011 - 14:20 #2
som danco skriver, bør du lave første check clientside (JS), men du skal, holde fast i serverside validering også, for af fange dem der har slået JS fra, eller hvis der er fejl i JS, der bevirker at valideringen ikke foretages JS.
jeg kna se danco også anvender jquery, hvilke måske er lidt overkill med mindre du anvender jquery i forvejen.

jeg har løsligt omskrevet din test
if(isset($_POST["submit"])){
    $message = "";
    $error = 0;   
    if( strlen($_POST["navn"]) < 1){
        $error = 1;
        $message .= "Du glemte at skrive et navn, prøv igen";
    }
    if( strlen($_POST["text"]) < 1){
        $error = 1;
        $message .= "Du glemte at skrive noget text, prøv igen";
    }
}   
?>

<?php
if(isset($_POST["submit"]) && ($error == 0)) {
    echo "Hello " . $_POST["navn"] . "<br>" . $_POST["text"] . "";
}
else{
    if($error) echo $message . "<br>";   
    echo "<form method='post' action='$_SERVER[PHP_SELF]'>";
    echo "<input type='text' name='navn'><br>";
    echo "<input type='text' name='text'><br>";
    echo "<input name='submit' type='submit' value='Login'>";
    echo "</form>";
}   
?>
Avatar billede danco Nybegynder
10. juli 2011 - 14:54 #3
Ronols har naturligvis ret, du behøver IKKE lave det gennem jquery, det var blot et udsnit jeg tog fra min egen hjemmeside hvor jeg i forvejen bruger store dele jquery.
Avatar billede olsensweb.dk Ekspert
10. juli 2011 - 15:33 #4
jeg tror jeg ville lave siden sådan, med js og php validering:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>942709</title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    // http://www.w3schools.com/js/js_form_validation.asp
    function validate(){       
        var error = 0;
       
        if (document.testfrm.navn.value == ""  || document.testfrm.navn.value == NULL) {
            document.testfrm.navn.style.background = "yellow";
            alert("Du glemte at skrive et navn, prøv igen");
            error = 1;
        }
        else{
            document.testfrm.navn.style.background = "white";
        }
       
        if (document.testfrm.text.value == ""  || document.testfrm.text.value == NULL) {
            document.testfrm.text.style.background = "yellow";
            alert("Du glemte at skrive noget text, prøv igen");
            error = 1;
        }
        else{
            document.testfrm.text.style.background = "white";
        }
       
        //if(error) return false;
        //return true;
       
        return (error)? false : true;
    }   
    </script>
</head>
<body>
<?php
if(isset($_POST["submit"])){
    $message = "";
    $error = 0;   
    if( strlen($_POST["navn"]) < 1){
        $error = 1;
        $message .= "Du glemte at skrive et navn, prøv igen";
    }
    if( strlen($_POST["text"]) < 1){
        $error = 1;
        $message .= "Du glemte at skrive noget text, prøv igen";
    }
}   
?>

<?php
if(isset($_POST["submit"]) && ($error == 0)) {
    echo "Hello " . $_POST["navn"] . "<br>" . $_POST["text"] . "";
}
else{
    if($error) echo $message . "<br>";   
    echo "<form name='testfrm' method='post' action='$_SERVER[PHP_SELF]' onsubmit='return validate()' >";
    echo "<input type='text' name='navn'><br>";
    echo "<input type='text' name='text'><br>";
    echo "<input name='submit' type='submit' value='Login'>";
    echo "</form>";
}   
?>   
</body>
</html>
Avatar billede krischjo Nybegynder
12. juli 2011 - 04:29 #5
Tak for forsøget danco, men da jeg ikke har noget kendskab til javascript overhovedet, vil jeg følge ronols sidste svar (% javascriptet) - så ronols hvis du vil lægge et svar
Avatar billede olsensweb.dk Ekspert
12. juli 2011 - 12:06 #6
du får så et svar her, men du bør med tiden også kigge på js validering, da der ikke er nogle grund til at sende en form, man på forhånd ved ikke er korrekt udfyldt
Avatar billede krischjo Nybegynder
12. juli 2011 - 19:36 #7
Tjah, det vil jeg også. Men synes js lige pt er lidt en for stor mundfuld, er ved at finpudse php, css og html. Er ikke særlig god endnu. Og 4 sprog på en gang lyder som en for stor mundfuld for mig lige nu.
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