Avatar billede kagge Nybegynder
17. oktober 2003 - 12:57 Der er 9 kommentarer og
1 løsning

Validering af formularfelt - database

Har følgende problemstilling. Når jeg validerer mine formularfelter gør jeg brug af javascript.

Nedenstående formularfelt skal dog sammenlignes med poster nede i min db, da nummeret ikke må eksistere i forvejen. Hvordan validerer jeg det brugeren har skrevet i nedenstående felt med indholdet i databasen. Hvis nummeret eksisterer i forvejen skal der komme en alert.

Jeg har lige klippet noget kode ud af min side så i kan se hvordan valideringen er opbygget. Der hvor jeg har sat en
masse ? kunne jeg forestille mig man skulle sammenligne feltet med indholdet af databasen, men hvordan gør man lige det? Eller skal det laves på en hel anderledes måde?
Tilgangen til databasen skal være med asp

Min søgestreng øverst på siden:

strSQL3 = "SELECT Halnr From Synssted"
set recordSet3 = forbindelse.Execute (strSQL3)

Javascript-delen:

// Undersøger om nummer er optaget!
  function test(nummer) {
  ??????????????????

function validering(frm) {
if(!test(frm.stednr.value)) {alert("nummeret er allerede optaget, vælg et andet...")
      frm.stednr.focus()
      return false
    }

Selve formularen:

<form name="registrering1" onSubmit="return validering(this)" action="synssted_godkend.asp" method="post">

<INPUT TYPE="text" SIZE="5" NAME="stednr" TABINDEX="1" >
Avatar billede roenving Novice
17. oktober 2003 - 13:01 #1
Du er nødt til aktivere dit serverside script til den slags valideringer !-)

Javascriptet kan på ingen måde få fat i noget, som ikke er indenfor siden, så alternativet er, at du medsender en komplet liste over optagne numre ...
Avatar billede mm12010 Nybegynder
17. oktober 2003 - 13:11 #2
// Undersøger om nummer er optaget!
function test(nummer){
  if(nummer=="<%=nummerDB%>"){
    alert("nummer optaget");
    }
  }

ellers hvis der er mange numre:

// Undersøger om nummer er optaget!
nr=new Array();
<%
i=0
while not rs.eof
  response.write("nr[i]="& rs("nummer") &";")
  i=i+1
wend
%>
function test(nummer){
  for(i=0;i<nr.length;i++){
    if(nummer==nr[i]){
      alert("nummer optaget");
      }
    }
  }
Avatar billede kagge Nybegynder
17. oktober 2003 - 13:16 #3
Ok. Kigger lige på det og vender tilbage senere
Avatar billede kagge Nybegynder
17. oktober 2003 - 13:48 #4
Nu fik jeg den til at gå i selvsving (ved ikke om det er noget med en uendelig løkke eller noget i den stil). Det ser ud som følger:

<%
CONST adOpenStatic = 3, adLockReadOnly = 1, adCmdText = &H0001
Dim connectionString, CONN_USER, CONN_PASS
Dim recordSet3
Dim forbindelse
Dim strSQL3

connectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("Stamdata.mdb")

set recordSet3 = server.CreateObject("ADODB.Recordset")
set forbindelse = server.CreateObject("ADODB.Connection")

forbindelse.Open connectionString, CONN_USER, CONN_PASS

strSQL3 = "SELECT Halnr From Synssted"
set recordSet3 = forbindelse.Execute (strSQL3)
%>

<HTML>
<HEAD>
<TITLE> </TITLE>
<META NAME="generator">
<LINK REL="STYLESHEET" HREF="stylesheet.css" TYPE="text/css">
<SCRIPT LANGUAGE=JAVASCRIPT>
<!--

// Undersøger om nummer er optaget!
nr=new Array();
<%
i=0
while not recordSet3.eof
  response.write("nr[i]="& recordSet3("Halnr") &";")
  i=i+1
wend
%>

function test(nummer) {
  for(i=0;i<nr.length;i++) {
    if(nummer==nr[i]) {
      alert("nummer er optaget");
    }
  }
}

// Validering af forms
  function validering(frm) {
    if(!test(frm.stednr.value)) {
      frm.stednr.focus()
      return false
    }

}

-->

<form name="registrering1" onSubmit="return validering(this)" action="synssted_godkend.asp" method="post">

<INPUT TYPE="text" SIZE="5" NAME="stednr" TABINDEX="1" >
Avatar billede mm12010 Nybegynder
18. oktober 2003 - 13:38 #5
response.write("nr["& i &"]="& recordSet3("Halnr") &";")
Avatar billede kagge Nybegynder
20. oktober 2003 - 09:41 #6
Øv. Den driller stadig selv om jeg har ændret ovenstående linje. Når jeg åbner siden så står den bare og arbejder (og jeg må i kælderen for at genstarte serveren) :(
Avatar billede mm12010 Nybegynder
20. oktober 2003 - 11:11 #7
// Undersøger om nummer er optaget!
nr=new Array();
<%
i=0
while not recordSet3.eof
  response.write("nr["& i &"]="& recordSet3("Halnr") &";")
  rs.movenext
  i=i+1
wend
%>
Avatar billede kagge Nybegynder
20. oktober 2003 - 12:16 #8
Så virker det næsten. Eneste problem er at hvis nummeret i databasen starter med 0 (så kommer den ikke med alerten at nummeret er optaget). Ved ikke lige hvorfor den skærer 0 fra). Mange af numrene har et 0 foran (eks. 010, 011, 012 osv.)

Har du et godt fif til dette problem (du skal nok få point selv om du ikke har)?

Under alle omstændigheder kan du lige lave et svar :)
Avatar billede mm12010 Nybegynder
20. oktober 2003 - 12:22 #9
response.write("nr[i]='"& recordSet3("Halnr") &"';")
Avatar billede kagge Nybegynder
20. oktober 2003 - 12:26 #10
selvfølgelig... Tusind takker for hjælpen. Du har snart hjulpet mig med mange ting :)

Jeg undervurderede måske nok spørgsmålet, men du må lige råbe op, hvis du vil have nogle flere point.
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