Avatar billede KHHP Juniormester
16. april 2012 - 11:51 Der er 13 kommentarer og
1 løsning

Check om felter er udfyldt

Hej
Jeg er igang med at genopbygge mit bookingsystem, eftersom jeg var så genial at slette det på mit webhotel, uden at tage backup først.
I systemet havde jeg fået bakset mig noget javascript sammen, som skulle tjekke at diverse felter var udfyldt. Det script lå imidlertid i samme fil som formularen og er derved også forsvundet. Dog var der et problem med det script, som gjorde at hvis jeg tilføjede iChars validering, således at man ikke kan hedde spørgsmålstegn, og også tilføjede en linje som tjekkede at man ikke kun x@x.x i mailadresse, således at man er nødt til at skrive en mailadresse af "normal" længde, for at det godkendes. Problemet var at alle felterne i den udsendte mail var blanke.
Min nye formular ligger her: http://pastebin.com/2Feib949
Jeg har fået hjælp til at lave det php-script der indsamler, gemmer og sender informationerne fra formularen.
Scriptet ligger her: http://pastebin.com/xJkCG54E
Som nævnt var der problemer med iChars valideringen samt det med antal tegn, og derfor vil jeg forhøre mig om der er nogen der kunne give mig lidt hjælp til at lave et javascript der forhindrer specialtegn i alle felter undtagen e-mailadressen, samt at der kun kan indtastes tal i tlf, mailadressen skal være på mindst 8 tegn og sidst, men dog noget af det vigtigste, så skal folk sætte hak i en checkbox, hvor de tilkendegiver at de har læst de betingelser der linkes til.
Hvis nogen kender et færdigt script der kan det jeg godt kunne tænke mig, så ville det også være fint.
Avatar billede olebole Juniormester
16. april 2012 - 12:35 #1
<ole>

Hvad er det for specialtegn, du ikke ønsker - og hvorfor ikke?

Du må endelig ikke tro, der er nogen somhelst sikkerhed i et JavaScript. Man validerer med både JS og PHP - med JS for at hjælpe brugeren og med PHP for at sikre sin applikation og data.

Udover validering med PHP, sørger du for sikkerhed med prepared statements (MySQLI), når du kommunikerer med databasen. Dette er meget vigtigt. Læs f.eks. denne guide om emnet.

/mvh
</bole>
Avatar billede olebole Juniormester
16. april 2012 - 12:37 #2
- og så kan en e-mail-adresse sagtens bestå af 6 tegn. F.eks. hedder Berlinske Tidenes domæne b.dk
Avatar billede KHHP Juniormester
16. april 2012 - 12:58 #3
Jo, ved skam godt at det ikke giver nogen som helst form for ekstra sikkerhed. Jeg kunne dog godt tænke mig at lave en form for validering med javascript, fordi det netop er nemmere at fortælle brugeren at der er noget galt, via. f.eks. en alert pop-up-boks.
De specialtegn jeg gerne vil slippe af med sådan noget som ?,!,%,¤,$,£,#,½,§,<,>,\ osv. Det er sådan nogle specialtegn, som man normalt ikke ser andre steder end mailadresser, da jeg på et andet site har oplevet at modtage mails hvor der ingen form for validering, eller tjek af de indtastede oplysninger.
Et eksempel kunne f.eks. være dette:

Navn: ?
E-mail: ?
Besked: bosfmopmvosfaældaas120)/)/#&"!

Det at man ikke skriver en korrekt mailadresse er nu det der er mest irriterende, fordi man ikke kan komme i kontakt med folk. Jeg mener personligt at en validering, der fortæller at der er noget galt, giver de besøgende et indtryk af at det er proffesionelt og at folkene bag tager alle henvendelser seriøst.
Avatar billede olsensweb.dk Ekspert
16. april 2012 - 14:03 #4
her er lavet starten på det,
email validering, du fanger aldrig 100% af fejlene men du kan fjerne 80-90 % fejlene
tlf validering, må der værer seperatore i nummeret feks mellemrum ??, må det starte med +45 ??


<!-- http://phpjs.org/functions/implode:430 -->
<script type="text/javascript" src="implode.js"></script>
<script type="text/javascript">
    function ValidateForm(frm){
        var ErrorMsg = Array();       
        var ErrorCount=0;
        var formnavn = frm.name;       
        // if(document.booking.krav.checked == false){
        if(document[formnavn].krav.checked == false){
            ErrorMsg.push("de her ikke accepteret betingelserne");       
            ErrorCount++;       
        }       
        // http://ntt.cc/2008/05/10/over-10-useful-javascript-regular-expression-functions-to-improve-your-web-applications-efficiency.html
        // tester om tlf består af præsis 8 tal, der må ikke være andre karakterer
        var pattern = /^\d{8}$/;
        if(! pattern.test(document[formnavn].tlf.value) ){
            ErrorMsg.push("de kan kun indtaste 8 tal");       
            ErrorCount++;       
        }       
        if (document[formnavn].email.value=="") {
            ErrorMsg.push("de har ikke indtasted noget i email feltet");       
            ErrorCount++;       
        }
        // checks that an input string looks like a valid email address.
        pattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
        if (!pattern.test(document[formnavn].email.value) ) {
            ErrorMsg.push("de har ikke indtasted en valid email addresse");       
            ErrorCount++;       
        }       
        if(ErrorCount>0){           
            // samling af fejl string                
            var str = ""+implode("\n", ErrorMsg)+"";   
            alert(str);
        }       
        return (ErrorCount>0)? false : true;               
    }
</script>




<form name="booking" action="verify.php" method="post" onsubmit="return ValidateForm(this)">


men husk som ole også skriver, det skal følges op med servervalidring af felterne
Avatar billede KHHP Juniormester
16. april 2012 - 14:20 #5
Jeg ville foretrække at man skriver med mellemrum mellem hver 2 cifre, så det er meget muligt at det skal udvides en smule, men det er jo bare at ændre dette:
var pattern = /^\d{8}$/;

til
var pattern = /^\d{12}$/;

hvis jeg har forstået dit script rigtigt.
Jeg forestiller mig at når testing er færdig, af hele sitet, så laver jeg eksempel tekst i hver af felterne, hvor man kunne være i tvivl omkring hvordan det skal udfyldes.
Så ville jeg jo kunne skrive 00 12 34 56 i tlf, så ved folk hvordan det skal skrives.
Avatar billede olebole Juniormester
16. april 2012 - 15:07 #6
#3: Det vil jo blot resultere i en mail i stil med:

Navn: asdf
E-mail: asd
Besked: dsa@awd@as

- men hvis det er bedre, så ingen alarm  =)

#5: RegExp'en:

var pattern = /^\d{12}$/;

- forventer 12 tal, og det er ikke, hvad du ønsker. Telefonnumre er altid et rod at validere på, fordi der er så mange måder at skrive dem på. F.eks. prefixer mange telefonnummeret med (+45) - med eller uden parenteser. Mellemrum bruger nogle mennesker tre af, mens andre bruger ét - og andre igen slet ingen. Og så er der jo muligheden for, at bookeren bor i Malmø - arbejder i Danmark - men har et svensk telefonnummer(?)
Avatar billede KHHP Juniormester
16. april 2012 - 15:28 #7
#6 du har ret i at det jo udelukker personer som bor i f.eks. Sverige, men så må man jo håbe at du vil skrive deres rigtige mailadresse og så foregår kommunikation den vej. Man kunne også indstille validering af tlf til at der kun måtte være tal.
Hvad angår validering af mailadressen, så kunne man sætte et kriterie der hedder at den skal være f.eks. min. 6 tegn og indeholde mindst 1 @ for at systemet ville godkende det. Det er jo mest for at folk skal finde ud af at det ikke kan betale sig at snyde, fordi den tjekker de fleste af felterne. Ok jeg ville dog stadig kunne skrive en fiktiv mailadresse, som f.eks. vpc_lagekage@detdummesite.feddør. Det er bare for at det fremstår som om at folkene bagved har tænkt over at fange snydere.
Avatar billede olsensweb.dk Ekspert
16. april 2012 - 17:21 #8
istedet for den externe function implode kan du bruge en for løkke.
if(ErrorCount>0){            
    // samling af fejl string            
    var str="";
    for(var j=0; j<ErrorCount; j++){
        str +=ErrorMsg[j]+"\n";
    }
    alert(str);
}

hvis du syntes det er pænere.

ja tlf nummerer er en opgave derfor det uddybende spm :)
hvis det kun var mellemrum ville det være nemt at fjerne dem med replace(), så kan folk selv vælge om de vil bruge mellemrum eller ej

pattern = /^\d{8}$/;
if(! pattern.test(document[formnavn].tlf.value.replace(/ /g, '')) ){
    ErrorMsg.push("De må kun indtaste 8 tal, mellemrum må gerne bruges mellem tallene");       
    ErrorCount++;       
}


men der er stadig et problem med +45 / (+45)


tilfældige link om validering her på E
http://www.eksperten.dk/spm/854978 #1
http://www.eksperten.dk/spm/954559
http://www.eksperten.dk/guide/58
Avatar billede KHHP Juniormester
17. april 2012 - 15:12 #9
Ville det nemmeste ikke være at fjerne mellemrum og så i en evt. fejlbesked skrive at der er skrevet for mange tegn og at det kan løses ved at fjerne +45 i starten af nummeret.
En anden løsning kunne måske være at jeg sætter en begrænsning på hvor mange tegn man kan skrive i tlf-feltet, på den måde får jeg folk til at skrive nummeret som jeg gerne vil have det skal stå.
Avatar billede olebole Juniormester
17. april 2012 - 16:23 #10
Du skal ikke tænke på, hvad der er nemmest for dig. Du er ikke bruger, så begrebet 'brugervenlighed' dækker ikke dit arbejde  *o)

En løsning kunne være:

var s = "(+45) 12 34 56 78";
if (/^(\(\+\d{2}\))?\d{8}$/.test(s.replace(/ /g, ""))) {
    alert("Valid");
}
Avatar billede KHHP Juniormester
19. april 2012 - 17:24 #11
ronols, det script du foreslog i #4 virker rigtig fint :)
olebole, du har ret i at brugervenlighed ikke er noget der dækker over mit arbejde, men det dækker så til gengæld over resultatet af mit arbejde, så brugervenlighed er noget jeg har fokus på når jeg laver hjemmesider. Men hvordan med den kode du foreslog til tlf i #10, skal jeg så "bare" udskifte dette:
[divvar pattern = /^\d{8}$/;][/div]
med det du foreslog eller hvordan?
Avatar billede olsensweb.dk Ekspert
19. april 2012 - 18:07 #12
#11>skal jeg så "bare" udskifte dette:
ja, du skal dog lige huske at sætte en invert foran, da ole udskriver beskeden ved OK
et "samlet" script kunne se sådan ud (kan optimeres)


<script type="text/javascript">   
    function ValidateForm(frm){   
        var ErrorMsg = new Array();       
        var ErrorCount=0;
        var pattern = "";
        var formnavn = frm.name;
        var str="";

        if(document[formnavn].krav.checked == false){
            ErrorMsg.push("de her ikke accepteret betingelserne");       
            ErrorCount++;       
        }       

        if (document[formnavn].email.value=="") {
            ErrorMsg.push("de har ikke indtasted noget i email feltet");       
            ErrorCount++;       
        }       
        else{ // der er ikke nogle grund til at teste mais addressen når jeg ved den er tom           
            // checks that an input string looks like a valid email address.
            pattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
            if (!pattern.test(document[formnavn].email.value) ) {
                ErrorMsg.push("de har ikke indtasted en valid email addresse");       
                ErrorCount++;       
            }
        }       

        // bør nok også teste for om tlf feltet er tom her inden jeg tester for om data overholder mønsteret
        // ligesom jeg gør på email feltet
       
        str = document[formnavn].tlf.value.replace(/ /g, ''); // fjerner alle mellemrum           
        // pattern = /^\d{8}$/;                // godkender dette mønster  "12345678"
        pattern = /^(\(\+\d{2}\))?\d{8}$/;    // godkender disse 2 mønstre "(+45)12345678", "12345678"
        if(!pattern.test(str) ){       
        // if(! /^(\(\+\d{2}\))?\d{8}$/.test(document[formnavn].tlf.value.replace(/ /g, '')) ){       
            ErrorMsg.push("De må kun indtaste 8 tal, samt evt (+45) foran, mellemrum må gerne bruges mellem tallene");
            ErrorCount++;       
        }

        if(ErrorCount>0){           
            // samling af fejl string            
            str="";
            for(var j=0; j<ErrorCount; j++){
                str +=ErrorMsg[j]+"\n";
            }
            alert(str);
        }       
        return (ErrorCount>0)? false : true;       
    }
</script>
Avatar billede KHHP Juniormester
19. april 2012 - 19:18 #13
Super tak :)
Smider I lige svar
Avatar billede olsensweb.dk Ekspert
19. april 2012 - 19:51 #14
får du her
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