Formularen bliver valideret, men jeg har problemer med felterne: alder og karakter. Disse felter er af typen menu hvor jeg som første valg har indsat teksten "Vælg her...." Dette ønsker jeg ikke overført til databasen.
I databasen har jeg lavet en valideringsregel og en meddelelse som gør at man får dette svar, når man lader teksten "Vælg her..." stå i feltet:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Du skal vælge en karakter - ellers vælg Andet
/asp/modtag.asp, line 25
Jeg synes det ser lidt uproffessionelt ud - det må kunne gøres anderledes.
Mon ikke der er nogen her, der kan give mig en hjælpende hånd?
function MM_validateForm() { //v4.0 var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments; for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]); if (val) { nm=val.name; if ((val=val.value)!="") { if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@'); if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n'; } else if (test!='R') { num = parseFloat(val); if (isNaN(val)) errors+='- '+nm+' must contain a number.\n'; if (test.indexOf('inRange') != -1) { p=test.indexOf(':'); min=test.substring(8,p); max=test.substring(p+1); if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n'; } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; } } if (errors) alert('The following error(s) occurred:\n'+errors); document.MM_returnValue = (errors == ''); } //--> </script>
Det er ikke noget jeg selv har skrevet, men det er en funktion i DW (Dreamweaver) Window/behaviors/validate form hvor jeg får et vindue frem med mulighed for at vælge felter fra min formular og angive hvordan de skal valideres. (Validate Form action) På denne liste kan jeg bare ikke se menu felterne, så derfor ved jeg ikke hvad jeg skal gøre med dem. Hvis du kender DW - kender du sikkert også funktionen
Hmmm. Den kode har jeg lidt svært ved at overskue. Hvis du ikke har noget imod at løse det med ASP, så kan du på den side hvor du forsøger at gemme i databasen, skrive:
If Not isNumeric(Request.Form("alder")) Then Response.Write "Du skal vælge en alder!" If Request.Form("karakter")="Ikke oplyst" Then Response.Write "Du skal vælge en karakter!"
Og så uden om databasekoden:
If isNumeric(Request.Form("alder")) Or Request.Form("karakter")<>"Ikke oplyst" Then ... End If
Jeg vil meget gerne løse problemet med asp - min løsning var bare en nødløsning/hovsaløsning. Det var også derfor jeg skrev spørgsmålet ind her i forum. Jeg kigger på det når jeg har fri fra arbejde og så skriver jeg igen.
Ok. Ellers må du lige poste din ASP-kode her også, altså den, der køres ved submit og behandler indtastede data (sender dem til db), så sætter jeg det gerne sammen for dig, hvis du behøver det. =)
Jeg tror, det må være omtrent således: ------------------------------------------- <%If isNumeric(Request.Form("alder")) Or Request.Form("karakter")<>"Ikke oplyst" Then Set Conn=Server.CreateObject("ADODB.connection") Conn.Open "DBQ="&server.mappath("../db/medlemmer.mdb")&";Driver={Microsoft Access Driver (*.mdb)}"
Nææ det virker ikke. Hvis jeg f.eks. undlader at vælge i begge felter "karakter" og "alder" bliver formen bare ryddet for data og der sker ikke andet. Hvis jeg f.eks. vælger en alder og ikke en karakter (eller omvendt) bliver dataene registreret i databasen uden videre.
Jeg har lavet koden sådan (sådan forstod jeg det på dig)
<%
'validering af felterne karakter og alder If Not isNumeric(Request.Form("alder")) Then Response.Write "Du skal vælge en alder!" If Request.Form("karakter")="Ikke oplyst" Then Response.Write "Du skal vælge en karakter!"
If isNumeric(Request.Form("alder")) Or Request.Form("karakter")<>"Ikke oplyst" Then
' Tilføj data i database strSQL = "Insert into Medlemmer (Navn, Ingame, Karakter, Altkarakter, Adresse, Postnummer, Town, Telefonnummer, Mailadresse, Alder, Password) values('"&Request.Form("navn")&"', '"&Request.Form("ingame")&"', '"&Request.Form("karakter")&"', '"&Request.Form("altkarakter")&"', '"&Request.Form("adresse")&"', '"&Request.Form("postnr")&"', '"&Request.Form("by")&"', '"&Request.Form("telefon")&"','"&Request.Form("mail")&"','"&Request.Form("alder")&"','"&Request.Form("pass")&"')"
' SQL sætning eksekveres Conn.Execute(strSQL)
'Sender en til kvittering response.Redirect("tilmeld_kvittering.htm")
' Luk databaseforbindelse Conn.Close Set Conn = Nothing%> <% End If %>
Det er så heller ikke helt korrekt.
Hvis jeg undlader at vælge både "alder" og "karakter" så får jeg fint denne tilbagemelding på en ny side: Du skal vælge en alder!Du skal vælge en karakter! (der manler så lidt mellemrum eller linieskift, men meldingen er der)
Hvis jeg undlader et af felterne går registreringen igen glat igennem, det skal den ikke så gerne.
Har lige sat noget linieskift ind - det hjalp på udseenet af svaret
<%
'validering af felterne karakter og alder If Not isNumeric(Request.Form("alder")) Then Response.Write "<p>Du skal vælge en alder!</p>" If Request.Form("karakter")="Ikke oplyst" Then Response.Write "<p>Du skal vælge en karakter!</p>"
If isNumeric(Request.Form("alder")) Or Request.Form("karakter")<>"Ikke oplyst" Then
Hov ja. <%If isNumeric(Request.Form("alder")) Or Request.Form("karakter")<>"Ikke oplyst" Then Skal være: <%If isNumeric(Request.Form("alder")) And Request.Form("karakter")<>"Ikke oplyst" Then
WAUW - så virker det bare. Der skulle lige en ekstra %> indimellem også, og det færdige resultat kan du ser herunder. Denne form for validering må jeg også kunne lave på de andre felter, det ser lidt mere smart ud end den fejlmedd. man ellers får som standard.
Den færdige kode (bemærk at jeg også har fået tilføjet et "prøv igen" link:
<% 'validering af felterne karakter og alder If Not isNumeric(Request.Form("alder")) Then Response.Write "<p>Du skal vælge en alder!</p>" If Request.Form("karakter")="Ikke oplyst" Then Response.Write "<p>Du skal vælge en karakter!</p>" Response.Write "<p><a href='spillerliste_tilmeld.htm' class='link'>Prøv igen</a></p>" %>
<% If isNumeric(Request.Form("alder")) And Request.Form("karakter")<>"Ikke oplyst" Then
Lige et lille tillægsspørgsmål - tror jeg nok. Hvis jeg nu vil lave validering på de andre felter også, så kunne jeg forestille mig at jeg blot skal tilføje flere linier i stil med denne:
If Request.Form("karakter")="Ikke oplyst" Then Response.Write "<p>Du skal vælge en karakter!</p>"
Problemet er bare at det jo er meget forskellig tekst der kan blive skrevet ind her. Man må kunne validere på om feltet er tomt eller om der står noget i det. F.eks. feltet navn. Kan det skrives i en enkelt linie hvordan denne så skal se ud? Eller er det mere kompleks?
Hvis du retter: <option value="Ikke oplyst">Vælg her...</option> til: <option value="">Vælg her...</option>
Så bliver den lig med blank/tom, hvis denne option er valgt. Du bruger jo alligevel ikke teksten "Ikke oplyst" til noget. Så det kan du ligeså godt ændre.
Så kan du vist bare teste med:
If Not Request.Form("karakter") Then
Her er det underforstået Not Request.Form("karakter")=true. Og false svarer som bekendt til 0, mens true svarer til 1 (eller alt andet end 0). Så når den er blank, svarer den egentlig til 0, som svarer til false. :) Derfor kan du skyde genvej og skrive det på den måde!
Hejsa - synes da lige at jeg ville fortælle at jeg har fået ændret koden iht. dit forslag - den ser nu således ud - og den virker.
<% 'Validering af felterne alder og karakter 'Hvis feltet alder ikke indeholder et tal 'Hvis felterne navn ingame karakter og password er blanke If Not isNumeric(Request.Form("alder")) Then Response.Write "<p>Du skal vælge en alder!</p>" If Request.Form("navn")="" Then Response.Write "<p>Du skal skrive dit navn!</p>" If Request.Form("ingame")="" Then Response.Write "<p>Du skal skrive dit navn ingame. Hvis du ikke har et skriver du bare: Ingen!</p>" If Request.Form("karakter")="" Then Response.Write "<p>Du skal vælge en karakter. Hvis du ikke har valgt en karakter endnu, skal du vælge: Andet!</p>" If Request.Form("pass")="" Then Response.Write "<p>Du skal skrive et password!</p>" Response.Write "<p><a href='spillerliste_tilmeld.htm' class='link'>Prøv igen</a></p>" %>
<% 'Hvis det indtastede i felterne opfylder kravene så If isNumeric(Request.Form("alder")) And Not Request.Form("karakter")="" And Not Request.Form("navn")="" And Not Request.Form("ingame")="" And Not Request.Form("pass")="" Then
Det ser godt ud. Et forslag: hvis du ændrer følgende Response.Write "<p><a href='spillerliste_tilmeld.htm' class='link'>Prøv igen</a></p>" til Response.Write "<p><a href='java script:history.go(-1)' class='link'>Prøv igen</a></p>"
Så går den tilbage til sidste side og de valgte indstillinger nulstilles vist ikke.
Super - det har du ret i. Det virker. Det eneste der bliver nulstillet ved "history" er password, men det gør ikke noget, det er vist meget normalt. Tak for tippet. Nu skal jeg lige have nogle flere point at dele ud af, og så kommer der nok et nyt spørgsmål, idet jeg har lavet en side til "glemt password" hvor jeg godt kunne tænke mig at teksten i felterne bliver udfyldt med data fra min database. Men som sagt så laver jeg et nyt spørgsmål. Når jeg kommer dertil.
Synes godt om
Ny brugerNybegynder
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.