Avatar billede svjensen Nybegynder
12. november 2003 - 08:18 Der er 17 kommentarer og
1 løsning

Kontrol af om indtastet værdi indgår i array.

Jeg har brug for en funktion der tester, hvorvidt en indtastet værdi findes i et array.

På en .asp side starter jeg med at hente en række værdier ind i et array, som der efter fx ser således ud:
strArr = "1, 2, 3, 4, 6"

Brugeren kan derefter indtaste en værdi i formen:

<form name=minform action="" onsubmit="return ValiderInput(this);" method=post>
<input type=text name=txtnummer>
<input type=submit value=Udfør>
</form>

Dette skulle så gerne valideres i:
<script language=javascript>
function ValiderInput(){
  if(indholdet af txtnummer er indeholdt i array){
    alert("Du skal vælge et nummer der ikke er brugt");
    return false;
  }
  else{
    return true;
  }
}
</script>

Mit første problem består i, at jeg ikke kan få 'overført' mit array til mit javascript-script, og derfor heller ikke kan teste mod det.
Avatar billede hf Nybegynder
12. november 2003 - 10:34 #1
Du kan gøre sådan:

<script language=javascript>
function ValiderInput(formInput){
    var aryNumbers=new Array();
<%
dim strArr (4)
strArr(0) = "1"
strArr(1) = "2"
strArr(2) = "3"
strArr(3) = "4"
strArr(4) = "6"
For row = 0 To uBound(strArr)
    Response.Write "aryNumbers[" & row & "]='" & strArr(row) & "';" & vbcrlf
Next
%>
    for (i in aryNumbers) {
        if (formInput == aryNumbers[i]) {
      alert("Du skal vælge et nummer der ikke er brugt");
        return false;
        }
  }
    return true;
}
</script>
Avatar billede svjensen Nybegynder
12. november 2003 - 11:13 #2
OK, så langt så godt.
Som du måske har gættet så skal mit array fyldes med indholdet af en database, hvilket jeg fint kan få til at fungere. Der er bare lige det prblem, at jeg ikke kan få defineret størrelsen af strArr til antallet af records.
Ved du hvordan?
Avatar billede svjensen Nybegynder
12. november 2003 - 11:15 #3
Jeg ved godt at vi er ovre i asp, men når vi nu er igang ;-)
Avatar billede hf Nybegynder
12. november 2003 - 11:19 #4
Du behøver i princippet ikke at dim'e arrayet - det er bare god skik.
Hvis du vil dim'e, kan du få antal records fra dit recordset. Måden afhænger af hvordan du laver recordset'et
Avatar billede svjensen Nybegynder
12. november 2003 - 11:30 #5
Min fil ser p.t. således ud:

**** START ****
<!--#include file="include/connection.asp"-->
<html>
<head>
</head>
<script language=javascript>
function ValiderInput(formInput){
    var aryNumbers=new Array();
<%
    strSQL = "SELECT * FROM tbltest"
    set rs = conn.execute(strSQL)
   
'    Dim strArr(4)
    For i = 0 To 4
        strArr(i) = rs("uid")
        rs.movenext
    Next
    For row = 0 To uBound(strArr)
        Response.Write "aryNumbers[" & row & "]='" & strArr(row) & "';" & vbcrlf
    Next
%>
    for (i in aryNumbers) {
        if (window.document.minform.txtnummer.value == aryNumbers[i]) {
            alert("Du skal vælge et nummer der ikke er brugt");
            return false;
        }
    }
        return true;
}
</script><body>
<center>
<br><br><br>
<form action="test.asp?action=do" name=minform method=post onsubmit="return ValiderInput(this);">
    <input type=text name=txtnummer size=4>
    <input type=submit value='Do'>
    <input type=submit value='Slet' onclick="return confirm('Er du sikker på at du vil slette?');">

</form>
</body>
</html>
<!--#include file="include/close.asp"-->
**** SLUT ****

Hvis jeg fjerner 'Dim strArr(4)' så loader den ikke hele siden. (min form vises ikke).
Hvis jeg prøver med:
strAntal = "SELECT COUNT(*) AS antal FROM tbltest"
set rAntal = conn.execute(strSQLAntal)

dim strArr (rsAntal("antal"))

så får jeg en fejl, der indikerer at browseren forventede en int. konstant
Avatar billede svjensen Nybegynder
12. november 2003 - 11:32 #6
Jeg har alene brug for at hente en kolonne fra min database.
Eksemplet ovenfor er kun det; et eksempel.
Til det egentlige brug vil mit SQL kald være:
"select medlemsnr from medlemmer order by medlemsnr"
medlemsnr er et tre-cifret tal.
Avatar billede svjensen Nybegynder
12. november 2003 - 12:20 #7
Jeg har nørklet lidt videre med det:

<!--#include file="include/connection.asp"-->
<html>
<head>
</head>
<script language=javascript>
function ValiderInput(){
    var aryNumbers=new Array();
<%
    strSQL = "SELECT medlemsnr FROM medlemmer order by medlemsnr"
    set rs = conn.execute(strSQL)
   
    strArr = rs.GetRows()
    For row = 0 To uBound(strArr)
        Response.Write "aryNumbers[" & row & "]='" & strArr(row) & "';" & vbcrlf
    Next
%>
    for (i in aryNumbers) {
        if (window.document.minform.txtnummer.value == aryNumbers[i]) {
            alert("Du skal vælge et nummer der ikke er brugt");
            return false;
        }
    }
        return true;
}
</script><body>
<center>
<br><br><br>
<form action="test.asp?action=do" name=minform method=post onsubmit="return ValiderInput(this);">
    <input type=text name=txtnummer size=4>
    <input type=submit value='Do'>
</form>
</body>
</html>
<!--#include file="include/close.asp"-->

Men med samme problem; hvis jeg ikke definerer strArr, så loades siden ikke.
Avatar billede hf Nybegynder
12. november 2003 - 12:22 #8
Du kan evt. bruge getRows metode til automatisk at omdanne dit recordset til et array:

        If Not rs.EOF Then
            aryRecordset = rs.getrows()
            If isarray(aryRecordset) Then
                For intCount = 0 to ubound(aryRecordset,2)
                    Response.Write "aryNumbers[" & row & "]='" & aryRecordset(row) & "';" & vbcrlf
                Next
            End If
        End If
Avatar billede hf Nybegynder
12. november 2003 - 12:24 #9
Ups der var en lille fejl

        If Not rs.EOF Then
            aryRecordset = rs.getrows()
            If isarray(aryRecordset) Then
                For row = 0 to ubound(aryRecordset,2)
                    Response.Write "aryNumbers[" & row & "]='" & aryRecordset(0,row) & "';" & vbcrlf
                Next
            End If
        End If
Avatar billede svjensen Nybegynder
12. november 2003 - 12:26 #10
Det giver samme resultat; siden loader ikke
Avatar billede svjensen Nybegynder
12. november 2003 - 12:27 #11
Der kommer til gengæld heller ikke fejlmeddelelse, hvilket undrer mig.
Avatar billede hf Nybegynder
12. november 2003 - 12:33 #12
Her er en køreklar kode (du skal blot rette databasesti, tabel og feltnavn)

<html>
<head>
<script language=javascript>
function ValiderInput(formInput){
    var aryNumbers=new Array();
<%
Set Conn = Server.Createobject("ADODB.Connection")
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Documents and Settings\Administrator\Skrivebord\login\users.mdb; Persist Security Info=False"
Conn.Open strConnection
    strSQL = "SELECT * FROM admin"
    set rs = conn.execute(strSQL)
        If Not rs.EOF Then
            aryRecordset = rs.getrows()
            If isarray(aryRecordset) Then
                For row = 0 to ubound(aryRecordset,2)
                    Response.Write "aryNumbers[" & row & "]='" & aryRecordset(0,row) & "';" & vbcrlf
                Next
            End If
        End If
Set rs = Nothing
Conn.close
Set Conn = Nothing
%>
    for (i in aryNumbers) {
        if (formInput == aryNumbers[i]) {
      alert("Du skal vælge et nummer der ikke er brugt");
        return false;
        }
  }
        alert("OK");
    return true;
}
</script>
</head>
<body>
<form name="minform" action="" onsubmit="return ValiderInput(this.txtnummer.value);" method=post>
<input type="text" name="txtnummer">
<input type=submit value=Udfør>
</form>
</body>
</html>
Avatar billede svjensen Nybegynder
12. november 2003 - 12:48 #13
Thank you, så var den der.

Et opfølgende spørgsmål (hvis du orker):
Hvis jeg definerer en variable uden for en function, kan jeg så ikke bruge den inde i? Jeg har gentagne gange oplevet at jeg var nødt til at definere den flere gange. Fx en upload sti.
Avatar billede hf Nybegynder
12. november 2003 - 12:59 #14
Jeg mener ikke du kan genbruge variabler fra funktioner i kode udenfor. Men en funktion kan som bekendt returnere en variabel.
Avatar billede svjensen Nybegynder
12. november 2003 - 13:07 #15
Det var egentlig også den anden vej jeg tænkte på. At bruge en variabel i en funktion, men som tidligere er defineret udenfor.
Avatar billede svjensen Nybegynder
12. november 2003 - 13:08 #16
Du får pointene, jeg finder ud af det andet et andet sted.
Avatar billede hf Nybegynder
12. november 2003 - 13:13 #17
java script:
document.myVar = "test";
Avatar billede roenving Novice
12. november 2003 - 15:50 #18
Og en simplere metode:

  var aryNumbers=[
<%
Set Conn = Server.Createobject("ADODB.Connection")
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Documents and Settings\Administrator\Skrivebord\login\users.mdb; Persist Security Info=False"
Conn.Open strConnection
    strSQL = "SELECT * FROM admin"
    set rs = conn.execute(strSQL)
        If Not rs.EOF Then
            aryRecordset = rs.getrows()
            If isarray(aryRecordset) Then
                For row = 0 to ubound(aryRecordset,2)
                    Response.Write aryRecordset(0,row) & "," & vbcrlf
                Next
            End If
        End If
Set rs = Nothing
Conn.close
Set Conn = Nothing
%>
]

Hvis det bare er et array af tal !-)

Dvs. at din løsning, som du havde i spørgsmålet, kun havde een fejl, nemlig at du havde brugt "" ...

Hvis du havde brugt [] havde det virket !-)
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