Avatar billede Tony Juniormester
23. juli 2002 - 14:59 Der er 14 kommentarer og
1 løsning

Hjælp til validering af brugerindputs i formular ønskes ...

Jeg har en formular, hvori der bl.a. indgår at bruger skal foretage et valg og angive en prioritering.

http://home1.stofanet.dk/breindal/biler.html

Bruger kan vælge mellem 4 biler.
Bruger kan vælge kun én bil ved at angive hvilken med et kryds eller ved at skrive '1'.
Bruger kan vælge to eller flere biler ved at prioriterer med tallene 1 – 4.

D.v.s. at de individuelle felter kan indeholde et tal mellem 1 – 4 (begge inklusive), et kryds (stort eller lille 'x') eller være tomt.

Kravspec.:
Der må ikke kunne angives samme talværdi i to felter.
Der må ikke kunne angives talværdier over 4.
Hvis bruger angiver med et lille kryds (’x’) skal det automatisk blive lavet om til et stort kryds (’X’).
Bruger skal promptes for div. fejl.

Nogen der kan skrue den sammen ???
Avatar billede jakoba Nybegynder
23. juli 2002 - 16:26 #1
Avatar billede nikolajdu Nybegynder
23. juli 2002 - 16:53 #2
Bedre sent end aldrig. Her er mit bud.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Sommerhus til leje - kontakt udlejer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
biler = new Array ("Audi","BMW","Citroen","Daimler")
function tjeckDu(hvad){
fo = document.bilform


//find formfelter

formElem = new Array()

a = 0
    for (ff=0;ff<fo.length;ff++){
    for (a in biler){
    if (fo.elements[ff].name==biler[a]){
    formElem.push(ff)
            }
        }
    }

// tjeck felter

fejl = 0;

for (ff=0;ff<formElem.length;ff++){
felt = formElem[ff]
vaerdi = fo.elements[felt]
alert(fo.elements[felt].value)
if(vaerdi.value==""||vaerdi.value=="undefined"){
alert("skriv noget")
fejl++;
}else if(vaerdi.length>1){
alert("kun et tegn X/x eller tallene 1-4")
fejl++;
}else if(vaerdi.value=="X"){
alert("X")

}else if(vaerdi.value>=1||vaerdi.value<=4){
alert("1-4")
        }else{alert("Ugyldigt tegn")
        fejl++;
        }
    }
if(fejl!=0){
        return false
        }else{
        alert("oki doki")
        return true
        }
}

</script>

</head>

<body bgcolor="#467C47" leftmargin="0" topmargin="10" marginwidth="0" marginheight="0">

<!-- Formular begynd -->
<form action="" method="post" name="bilform" id="bilform" onSubmit="return tjeckDu(this)">

  <table width="449" border="0" align="center" cellpadding="3" cellspacing="0">
    <tr>
      <td height="35" colspan="4" align="center" valign="middle"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">-
        Bestilling af bil -</font></td>
    </tr>
    <tr>
      <td colspan="4">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="4"><p align="center"><font face="Arial, Helvetica, sans-serif"><strong>Hvilken
          bil &oslash;nskes - angiv prioritet 1-2-3-4, hvis der &oslash;nskes
          valg mellem flere - ellers s&aring; s&aelig;t blot kryds (X) ?</strong></font></p></td>
    </tr>
    <tr>
      <td colspan="4">&nbsp;</td>
    </tr>
    <tr>
      <td width="74"><font face="Arial, Helvetica, sans-serif">Audi:</font></td>
      <td width="97"><font face="Arial, Helvetica, sans-serif">
        <input name="Audi" type="text" id="Audi" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
      <td width="80"><font face="Arial, Helvetica, sans-serif">BMV:</font></td>
      <td width="86"><font face="Arial, Helvetica, sans-serif">
        <input name="BMW" type="text" id="BMW" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
    </tr>
    <tr>
      <td width="74"><font face="Arial, Helvetica, sans-serif">Citro&eacute;n:</font></td>
      <td width="97"><font face="Arial, Helvetica, sans-serif">
        <input name="Citroen" type="text" id="Citroen" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
      <td width="80"><font face="Arial, Helvetica, sans-serif">Daimler:</font></td>
      <td width="86"><font face="Arial, Helvetica, sans-serif">
        <input name="Daimler" type="text" id="Daimler" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
    </tr>
    <tr>
      <td colspan="4" class="bgrows">&nbsp;</td>
    </tr>
    <tr>
      <td height="35" colspan="4"><div align="center">
          <input name="Sendknap" type="submit" class="knap" style="cursor:hand" value="Send henvendelse">
          <img src="spacer.gif" width="60" height="3" border="0">
          <input type="reset" name="Reset" class="knap1" style="cursor:hand" value="Slet alt">
        </div></td>
    </tr>
  </table>
</form>
<a href="#" onclick="tjeckDu()">asddsadsda</a>
<!-- Formular slut -->
</body>
</html>

/Nikolaj
Avatar billede nikolajdu Nybegynder
23. juli 2002 - 16:54 #3
Poster lige uden alle de "fjollede" alerts til min test...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Sommerhus til leje - kontakt udlejer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
biler = new Array ("Audi","BMW","Citroen","Daimler")
function tjeckDu(hvad){
fo = document.bilform


//find formfelter

formElem = new Array()

a = 0
    for (ff=0;ff<fo.length;ff++){
    for (a in biler){
    if (fo.elements[ff].name==biler[a]){
    formElem.push(ff)
            }
        }
    }

// tjeck felter

fejl = 0;

for (ff=0;ff<formElem.length;ff++){
felt = formElem[ff]
vaerdi = fo.elements[felt]
if(vaerdi.value==""||vaerdi.value=="undefined"){
alert("skriv noget")
fejl++;
}else if(vaerdi.length>1){
alert("kun et tegn X/x eller tallene 1-4")
fejl++;
}else if(vaerdi.value=="X"){
alert("X")

}else if(vaerdi.value>=1||vaerdi.value<=4){
alert("1-4")
        }else{alert("Ugyldigt tegn")
        fejl++;
        }
    }
if(fejl!=0){
        return false
        }else{
        return true
        }
}

</script>

</head>

<body bgcolor="#467C47" leftmargin="0" topmargin="10" marginwidth="0" marginheight="0">

<!-- Formular begynd -->
<form action="asda.php" method="post" name="bilform" id="bilform" onSubmit="return tjeckDu(this)">

  <table width="449" border="0" align="center" cellpadding="3" cellspacing="0">
    <tr>
      <td height="35" colspan="4" align="center" valign="middle"><font size="+1" face="Verdana, Arial, Helvetica, sans-serif">-
        Bestilling af bil -</font></td>
    </tr>
    <tr>
      <td colspan="4">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="4"><p align="center"><font face="Arial, Helvetica, sans-serif"><strong>Hvilken
          bil &oslash;nskes - angiv prioritet 1-2-3-4, hvis der &oslash;nskes
          valg mellem flere - ellers s&aring; s&aelig;t blot kryds (X) ?</strong></font></p></td>
    </tr>
    <tr>
      <td colspan="4">&nbsp;</td>
    </tr>
    <tr>
      <td width="74"><font face="Arial, Helvetica, sans-serif">Audi:</font></td>
      <td width="97"><font face="Arial, Helvetica, sans-serif">
        <input name="Audi" type="text" id="Audi" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
      <td width="80"><font face="Arial, Helvetica, sans-serif">BMV:</font></td>
      <td width="86"><font face="Arial, Helvetica, sans-serif">
        <input name="BMW" type="text" id="BMW" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
    </tr>
    <tr>
      <td width="74"><font face="Arial, Helvetica, sans-serif">Citro&eacute;n:</font></td>
      <td width="97"><font face="Arial, Helvetica, sans-serif">
        <input name="Citroen" type="text" id="Citroen" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
      <td width="80"><font face="Arial, Helvetica, sans-serif">Daimler:</font></td>
      <td width="86"><font face="Arial, Helvetica, sans-serif">
        <input name="Daimler" type="text" id="Daimler" size="4" maxlength="1" onkeyup="if(this.value=='x'){this.value='X'}">
        </font></td>
    </tr>
    <tr>
      <td colspan="4" class="bgrows">&nbsp;</td>
    </tr>
    <tr>
      <td height="35" colspan="4"><div align="center">
          <input name="Sendknap" type="submit" class="knap" style="cursor:hand" value="Send henvendelse">
          <img src="spacer.gif" width="60" height="3" border="0">
          <input type="reset" name="Reset" class="knap1" style="cursor:hand" value="Slet alt">
        </div></td>
    </tr>
  </table>
</form>

</body>
</html>

/Nikolaj
Avatar billede Tony Juniormester
23. juli 2002 - 17:05 #4
Uha - det her, det er 'Klodernes Kamp' :)

Indtil nu føre planeten 'JakobA'.
Planeten 'nikolajdu' sender en sværm af alerts, hvis den arme jordbo kun skriver ét tegn i felterne ... :)

Kulstofenheden 'tony_breindal' tester videre, mens himlene oplyses af det blodige slag ...
Avatar billede nikolajdu Nybegynder
23. juli 2002 - 17:07 #5
Jaja jeg er lige ved at rette det til :))

Mangler også at tjekke for om tegnet findes i forvejen...
Avatar billede Tony Juniormester
23. juli 2002 - 19:31 #6
JakobA >>

Jeg har en masse andre felter i formularen. De bliver valideret via et eksternt script (contact.js):
onSubmit="return valider(document.contactform);">

Nu har jeg så prøvet at ligge dit script ind i det eksterne, men det virker ligesom ikke ... Jo d.v.s. den validerer godt nok, men den sender desværre dokumentet, inden den har valideret de andre felter.

Jeg har også prøvet at ligge scriptet i sin egen eksterne fil, men så har jeg problemer med, at jeg har 2 'valider' i min submit og så er der ikke nogen af dem, der virker:
onSubmit="return valider(this),return valider (document.contactform);">

Endelig har jeg prøvet at ligge scriptet ind i <head>, men så har jeg  samme problem med, at den validerer godt nok, men sender inden det eksterne script har været 'in action' ...

Nogen forslag til løsningsmodel ?
Avatar billede jakoba Nybegynder
23. juli 2002 - 21:33 #7
kald funktionen noget andet, det er intet helligt ved ordet 'valider', den kan ligesågodt hedde 'searchAndDestroy'.
Du skal blot huske at ændre navnet både der hvor funktionen kaldes og hvor den bliver defineret.

onSubmit="return ( valider(this) && serachAndDestroy(this) );">

der bliver så kun submitted hvis valideringe består BEGGE valideringsfunktioner.

mvh JakobA
Avatar billede Tony Juniormester
24. juli 2002 - 08:36 #8
Jeg kaster håndklædet i ringen.

Jeg synes, jeg har prøvet alle tænkelige afarter af ovenstående og scriptene fusioneret, enkeltstående, interne / eksterne 'and-U-name-it' men det bliver ved med at falde tilbage på, at den kun effektuerer det ene script (som regel valid.js) og derefter går direkte til bekræftigelsen uden at effektuerer det andet script (validHuse.js - JakobA's)    :(

http://home1.stofanet.dk/breindal/kappel/contact/dacontact.html - scriptene ligger i bunden ...
Avatar billede jakoba Nybegynder
24. juli 2002 - 11:42 #9
dit script nimmer 2 'validHuse.js' er udkommenteret. med <!-- og -->. det betyder at det slet ikke bliver hentet

<script language="JavaScript" src="../scripts/valid.js"></script>
<!--
    <script language="JavaScript" src="../scripts/validHuse.js"></script>
-->

language='javascript' er udgået, brug  type='text/javascript'

jeg vil anbefale:

<script type="text/JavaScript">
var totaltLigegyldigVariabelDuIkkeBruger =
        "denne lille script sektion afværger en fejl olebole fandt der nogen "
        +"gange sker når der inkluderes et stylesheet lige ovenover et script" ;
</script>
<script type="text/JavaScript" src="../scripts/valid.js"></script>
<script type="text/JavaScript" src="../scripts/validHuse.js"></script>

og så ændre din <form kommando til:

<form action="http://scripts.netlag.dk/sendmail.php" method="post"
      name="contactform" id="contactform"
      onSubmit="return ( (validate(),returnVal) && validerHus(this) );">

Men hvorfor ikke lade funktionen validate returnere true eller false?

mvh JakobA
Avatar billede Tony Juniormester
24. juli 2002 - 12:12 #10
Tak for det JakobA - så langt så godt, nu kommer der en prompt fra dit script, hvis man laver fejl; men desværre sender den mailen når man klikker på 'OK' på prompten. D.v.s. man når ikke at rette fejlen ...

"Men hvorfor ikke lade funktionen validate returnere true eller false?" Øhh - forstår desværre ikke spørgsmålet ... :(
Avatar billede Tony Juniormester
24. juli 2002 - 12:18 #11
Ad: "dit script nimmer 2 'validHuse.js' er udkommenteret. med <!-- og -->. det betyder at det slet ikke bliver hentet"

Helt OK - JakobA ... er klar over det ... :)
Avatar billede jakoba Nybegynder
24. juli 2002 - 12:42 #12
formen burde ikke blive sendt, for der bliver altid returneret false i den onsubmit.

men der burde ikke altid blive returneret false. det er en fejl i mit script. hent ny version fra adressen ovenfor, eller lav:

        if ( f[i].value != "" ) {
            if ( f[i].value == "x" ) f[i].value = "X";
            var chr = f[i].value;
            if ( chk["p"+chr] ) {
                antReq = Math.max( antReq, chk["p"+chr][0] );
                antMax = Math.min( antMax, chk["p"+chr][1] );
                chk["p"+chr][2] = true;
                ffnd++;
            } else { // ugyldigt input
                alert( "Vedrørende bestilling af hus:\n\nVenligst benyt kun tallene 1 - 4" );
                f[i].focus();
                return false;
            }
        }

om til

        if ( f[feltNavne[i]].value != "" ) {
            if ( f[feltNavne[i]].value == "x" ) f[feltNavne[i]].value = "X";
            var chr = f[feltNavne[i]].value;
            if ( chk["p"+chr] ) {
                antReq = Math.max( antReq, chk["p"+chr][0] );
                antMax = Math.min( antMax, chk["p"+chr][1] );
                chk["p"+chr][2] = true;
                ffnd++;
            } else { // ugyldigt input
                alert( "Vedrørende bestilling af hus:\n\nVenligst benyt kun tallene 1 - 4" );
                f[feltNavne[i]].focus();
                return false;
            }
        }

mvh JakobA
Avatar billede jakoba Nybegynder
24. juli 2002 - 20:52 #13
Nu ligger filerne til test på:
http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp238658/dacontact.html
og kan hentes på
http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp238658/exp238658.zip

Jeg har udkommenteret dine border-styles fra formelementerne da det bliver mere en almindelig grimt i NS4.

mvh JakobA
Avatar billede Tony Juniormester
24. juli 2002 - 21:33 #14
Tusinde tak for hjælpen JakobA, alt virker nu ! :)

Tak for indsparkene nikolajdu :)
Avatar billede nikolajdu Nybegynder
24. juli 2002 - 21:35 #15
hehe - Jeg gik helt kold og forstår nu også hvorfor ;-)
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