Avatar billede -veile- Nybegynder
31. august 2008 - 22:28 Der er 17 kommentarer og
1 løsning

Validering af bruger input

Hej

Jeg har siddet lidt nu og spekuleret over hvorfor jeg altid får fejl når jeg laver en input validering

Jeg får en fejl med noget ala. Du skal skrive et kodeord

her er min kode som tjekker om det er udfyldt. og ja jeg har 4 dobbelt tjekket om det os står i formular felterne.

if($_POST['username'] =="")
    {
        $error1 = "Du skal skrive et brugernavn";
    }
    elseif($_POST['password'])
    {
        $error2 = "Du skal skrive et kodeord!";
    }
    elseif(isset($_POST['email_address']))
    {
        $error3 = "Du skal skrive din email";
    }
    elseif(isset($_POST['first_name']))
    {
        $error4 = "Du skal skrive din navn";
    }
    elseif(isset($_POST['last_name']))
    {
        $error5 = "Du skal skrive dit efternavn!";
    }
    else
    {
        if(strlen($_POST['password'] < 8))
        {
            $error6 = "Dit kodeord skal mindst indholde 8 tegn!";
        }
        else
        {

Håber der nogle som gider og hjælpe mig

Vh. Jacob Veile
Avatar billede dkfire Nybegynder
31. august 2008 - 23:04 #1
For det første så bruger du isset() forkert. For det andet så har du givet forkert input til strlen.

isset() giver sandt hvis den givne variabel er sat, dvs. at i dit kode vil du få $error3 til $error5 hvis der bliver skrevet i de forskellige felter.

Ang. strlen() så tror jeg du mener:

if(strlen($_POST['password']) < 8)
Avatar billede jakobdo Ekspert
01. september 2008 - 06:42 #2
som dkfire er inde på, tjekker isset() om en variabel er sat.
Du bør derfor kombinere den med f.eks. strlen() og ctype_VÆLG_EN
Du kan se alle typerne her: http://dk.php.net/ctype
Du kan evt. også bevæge dig ud i noget regexp, men så skal du jo lige have styr på det først. :o)
Avatar billede jakobdo Ekspert
01. september 2008 - 08:01 #3
Og en helt anden ting, du bør sætte dig ned og lave en plan, over hvad de forskellige ting skal tjekkes for.
For er det blot et spørgsmål om data er indtastet eller ej, er isset() nok.
Avatar billede -veile- Nybegynder
01. september 2008 - 11:45 #4
Pt. er det bare et sprørgsmål om data blir indtastet. senere vil der komme en mere effektiv validering af bruger input. men jeg skal jo som du selv skriver lige have det her til at fungere først :)
Avatar billede jakobdo Ekspert
01. september 2008 - 11:53 #5
Hvad med:

if(empty($_POST['username'])){
    $error1 = "Du skal skrive et brugernavn";
}elseif(empty($_POST['password'])){
    $error2 = "Du skal skrive et kodeord!";
}elseif(empty($_POST['email_address'])){
    $error3 = "Du skal skrive din email";
}elseif(empty($_POST['first_name'])){
    $error4 = "Du skal skrive din navn";
}elseif(empty($_POST['last_name'])){
    $error5 = "Du skal skrive dit efternavn!";
}else{
    if(strlen($_POST['password'] < 8)){
        $error6 = "Dit kodeord skal mindst indholde 8 tegn!";
    }else{
Avatar billede dkfire Nybegynder
01. september 2008 - 12:23 #6
jakobdo: for at kunne bruge empty, så skal isset også bruges.
Avatar billede jakobdo Ekspert
01. september 2008 - 12:40 #7
Det er da ikke korrekt.
empty() vil smide en fejl, hvis variablen ikke er sat.

Eller har jeg misforstået noget ?
Avatar billede dkfire Nybegynder
01. september 2008 - 15:29 #8
Ja empty vil smide en warning med en undefinde index.
Avatar billede -veile- Nybegynder
02. september 2008 - 00:12 #9
jakobdo's kode virker meget godt. og har heller ikke nogen bruge empty og isset sammen

jakobdo smid et svar, og mange tak for hjælpen!
Avatar billede jakobdo Ekspert
02. september 2008 - 08:03 #10
Hvis jeg skal forblive gode venner med dkfire, så brug denne kode:

if(!isset($_POST['username']) && empty($_POST['username'])){
    $error1 = "Du skal skrive et brugernavn";
}elseif(!isset($_POST['password']) && empty($_POST['password'])){
    $error2 = "Du skal skrive et kodeord!";
}elseif(!isset($_POST['email_address']) && empty($_POST['email_address'])){
    $error3 = "Du skal skrive din email";
}elseif(!isset($_POST['first_name']) && empty($_POST['first_name'])){
    $error4 = "Du skal skrive din navn";
}elseif(!isset($_POST['last_name']) && empty($_POST['last_name'])){
    $error5 = "Du skal skrive dit efternavn!";
}else{
    if(strlen($_POST['password'] < 8)){
        $error6 = "Dit kodeord skal mindst indholde 8 tegn!";
    }else{

Og du får et svar.
Avatar billede dkfire Nybegynder
02. september 2008 - 12:29 #11
Jakobdo: jeg ville nok bruge || i stedet for &&

!isset($_POST['username']) && empty($_POST['username'] giver sandt kun hvis username ikke er sat og den er tom, men hvis den er sat men er tom vil det give falsk. ;-)
Avatar billede jakobdo Ekspert
02. september 2008 - 12:59 #12
Hvis den er sat og ikke tomt, vil den da give true.
Avatar billede jakobdo Ekspert
02. september 2008 - 13:06 #13
Pis, du har jo ret...
Jeg må sgu nogle gange sove. :o)
Avatar billede dkfire Nybegynder
02. september 2008 - 18:01 #14
Men hvis den er sat og ikke tom skal den jo heller ikke give en fejlbesked vel ;-)
Og vi er kun mennesker, og mennesker fejler nogle gange ;-)
Avatar billede jakobdo Ekspert
02. september 2008 - 21:27 #15
Den skal vel hedde:

if(isset($VAR) && empty($VAR))
//FEJL

Vil det ikke være korrekt ?
Avatar billede jakobdo Ekspert
03. september 2008 - 15:39 #16
Takker for point.
Avatar billede dkfire Nybegynder
03. september 2008 - 16:42 #17
Nej, for den må vel gerne give fejl hvis den ikke er sat ?
Avatar billede jakobdo Ekspert
03. september 2008 - 20:29 #18
True! :o)
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



IT-JOB

MAN Energy Solutions

LTSA 4-Stroke Technical Advisor

Cognizant Technology Solutions Denmark ApS

Test Manager

Netcompany A/S

Test Specialist

Arbejdernes Landsbank

Salesforce Marketing Cloud tech lead