Avatar billede aerobee Nybegynder
29. august 2005 - 10:19 Der er 15 kommentarer og
2 løsninger

Invalid procedure call or argument: 'left'

Hejsa.
Jeg har en validator der skal validere et input felt i en form hvor en email adresse skal indtastes.
Jeg vil validere om der er noget foran @ og hvis ikke skal brugeren præcenteres for en brugervenlig fejl.

Bruger følgende script:

if Len(Left(email,InStr(email,"@")-1))=0 then
    intetforansnabelfejl = 1
    showform = 1
end if

Men jeg får følgende fejl når jeg tester:

Microsoft VBScript runtime error '800a0005'
Invalid procedure call or argument: 'left'
line 190

Skal lige siges at 'email' er min variabel der indeholder det der er indtastet i feltet email i min form.
Avatar billede softspot Forsker
29. august 2005 - 10:24 #1
Givetvis fordi

InStr(email,"@")

ikke returnerer en værdi større end nul, så vil left nemlig fejle...
Avatar billede softspot Forsker
29. august 2005 - 10:26 #2
Du skal nok validere således:

if InStr(email,"@") = 0 then
  intetforansnabelfejl = 1
  showform = 1
end if
Avatar billede aerobee Nybegynder
29. august 2005 - 10:29 #3
okay, men det forslag du giver der tjekker den ikke kun efter om der eksisterer et @ ??
Det har jeg allerede, vil gerne validere om der er noget foran et @.

Som det er nu tjekker jeg først på om feltet er tom med:

if email = "" then
    tomemailfejl = 1
    showform = 1
end if

også burde den stoppe der når email feltet jo er tom, men alligevel kører den videre og jeg får ovenstående fejl.
Hvorimod hvis der ER indtastet noget i email feltet validerer den helt fint, får altså kun ovenstående fejl hvis email feltet er tomt
Avatar billede softspot Forsker
29. august 2005 - 10:35 #4
Ja, den stopper forudsat du gør noget mere en det du viser her, ellers sætter dne vel bare et statusflag.

Anyways! Så kan du bare check om instr(email, "@") > 1 for så er det noget foran snabela...
Avatar billede aerobee Nybegynder
29. august 2005 - 10:44 #5
Hvis jeg skriver sådan her:

if InStr(email,"@") > 1 then
  intetforansnabelfejl = 1
  showform = 1
end if

checkker den stadig ikke om der er noget foran @
Avatar billede aerobee Nybegynder
29. august 2005 - 10:45 #6
Vil du se hele mit script der har med spørgsmålet her at gøre ?
Avatar billede aerobee Nybegynder
29. august 2005 - 10:45 #7
hele mit validerings script that is
Avatar billede softspot Forsker
29. august 2005 - 10:51 #8
Ja, det kunne være der ligger noget "skjult" som kunne være interessant at få kendskab til... :)
Avatar billede aerobee Nybegynder
29. august 2005 - 10:54 #9
Her er hele scriptet som validerer min form - er ikke helt færdigt endnu, mangler stadig lidt.

<%
                        brugernavn = request.Form("brugernavn")
                        kodeord = request.Form("kodeord")
                        gentagkodeord = request.Form("gentagkodeord")
                        alder = request.Form("alder")
                        navn = request.Form("navn")
                        email = request.Form("email")
                        beskrivelse = request.Form("beskrivelse")
                       
                        sqlMID = "SELECT MemberID FROM Members ORDER BY MemberID DESC LIMIT 1"
                        set rsMID = Conn.Execute(sqlMID)
                                               
                        oldID = rsMID("MemberID")
                        if oldID = "" then
                            newID = 1
                        else
                            newID = oldID + 1
                        end if
                       
                        sql = "select * from Members where Brugernavn='"&brugernavn&"'"
                        set rs = conn.execute(sql)
                       
                        if not (rs.bof or rs.eof) then
                            brugernavnfejl = 1
                            showform = 1
                        end if
                       
                        if brugernavn = "" then
                            brugerfejl=1
                            showform=1
                        end if
                       
                        if kodeord = "" then
                            kodefejl = 1
                            showform = 1
                        end if
                       
                        if gentagkodeord = "" then
                            gentagkodefejl = 1
                            showform = 1
                        end if
                       
                        if kodeord <> gentagkodeord then
                            matchfejl = 1
                            showform = 1
                        end if

                        Dim regEx1
                        Set regEx1 = New RegExp
                        regEx1.Pattern = "^\d+$"
                       
                        If regEx1.Test(alder) Then
                            alder = CInt(alder)
                       
                        If alder < 15 Then
                            showform = 1
                            minalderfejl = 1
                        End If
                       
                        Else
                            showform = 1
                            alderfejl = 1
                        End If
                       
                        if navn = "" then
                            navnefejl = 1
                            showform = 1
                        end if

                        if email = "" then
                            tomemailfejl = 1
                            showform = 1
                        end if
                       
                        If InStr(email,"@") = 0 Then
                            ingensnabelfejl = 1
                            showform = 1
                        End If
                       
                        If InStr(email,".") = 0 Then
                            manglerpunktumfejl = 1
                            showform = 1
                        End If
                       
                        If ((InStr(email,"@.") <> 0) OR (InStr(email,".@") <> 0)) Then
                            punktumfejl = 1
                            showform = 1
                        End If
                       
                        If InStr(email,"..") <> 0 Then
                            formangepunktumitrakfejl = 1
                            showform = 1
                        End If
                       
                        If Len(email) < 5 Then
                            kortemailfejl = 1
                            showform = 1
                        End If
                       
                        If (Len(email) - InStrRev(email,".") < 2) Then
                            mintoefterpunktumfejl = 1
                            showform = 1
                        End If                       
                       
                        If (Len(email) - InStrRev(email,".") > 4) Then
                            forkertendelseeftersnabelfejl = 1
                            showform = 1
                        End If
                       
                        if Len(Left(email,InStr(email,"@")-1))=0 then
                            intetforsnabelfejl = 1
                            showform = 1
                        End If
                       
                        if beskrivelse = "" then
                            beskrivelsefejl = 1
                            showform = 1
                        end if
                       
                        If Len(beskrivelse) < 100 Then
                            kortbeskrivelsefejl = 1
                            showform = 1
                        End If
                       
                        if showform then                       
                        %>
                       
                        <table border="0" id="main">
                        <tr><td colspan="2"><b>Her kan du oprette dig en gratis profil på onDate.dk.</b><br>Alle felter skal udfyldes.</td></tr>
                        <tr><td colspan="2"><br></td></tr>
                        <form method="post" action="create.asp?id=1" name="opret">
                        <tr><td>Brugernavn:&nbsp;</td><td><input type="text" name="brugernavn" value="<%=brugernavn%>"></td></tr>
                        <tr><td></td><td valign="top"><%if brugernavnfejl then%><font size="-2" color="#A70000"><b>[Brugernavnet eksisterer allerede]</b></font><%else if brugerfejl then%><font size="-2" color="#A70000"><b>[Brugernavn skal udfyldes]</b></font><%end if end if%></td></tr>
                        <tr><td>Kodeord:&nbsp;</td><td><input type="password" name="kodeord" value="<%=kodeord%>"></td></tr>
                        <tr><td></td><td valign="top"><%if kodefejl then%><font size="-2" color="#A70000"><b>[Kodeord skal udfyldes]</b></font><%else if matchfejl then%><font size="-2" color="#A70000"><b>[Kodeord er ikke ens]</b></font><%end if end if%></td></tr>
                        <tr><td>Gentag Kodeord:&nbsp;</td><td><input type="password" name="gentagkodeord" value="<%=gentagkodeord%>"></td></tr>
                        <tr><td></td><td><%if gentagkodefejl then%><font size="-2" color="#A70000"><b>[Du skal gentage dit kodeord]</b></font><%else if matchfejl then%><font size="-2" color="#A70000"><b>[Kodeord er ikke ens]</b></font><%end if end if%></td></tr>
                        <tr><td style="visibility:hidden; font:Arial; font-size:8px;">For at udvide</td></tr>
                        <tr><td>Alder:&nbsp;</td><td><input type="text" name="alder" style="width:35px;" value="<%=alder%>"></td></tr>
                        <tr><td></td><td><%if minalderfejl then%><font size="-2" color="#A70000"><b>[Du skal være minimum 15 år gammel]</b></font><%else if alderfejl then%><font size="-2" color="#A70000"><b>[Alder skal udfyldes]</b></font><%else%><font size="-3"><b>[Du skal være minimum 15 år gammel]</b></font><%end if end if%></td></tr>
                        <!--<tr><td>&nbsp;</td><td valign="top"><font size="-3"><b>[Du skal være minimum 15 år gammel]</b></font></td></tr>-->
                        <tr><td style="visibility:hidden; font:Arial; font-size:2px;">&nbsp;</td></tr>
                        <tr><td>Navn:&nbsp;</td><td><input type="text" name="navn" value="<%=navn%>"></td></tr>
                        <tr><td></td><td><%if navnefejl then%><font size="-2" color="#A70000"><b>[Navn skal udfyldes]</b></font><%end if%></td></tr>
                        <tr><td>&nbsp;</td><td valign="top"><font size="-2"><b>[Bliver ikke vist til andre brugere]</b></font></td></tr>
                        <tr><td style="visibility:hidden; font:Arial; font-size:2px;">For at udvide</td></tr>
                        <tr><td>Email:&nbsp;</td><td><input type="text" name="email" value="<%=email%>"></td></tr>
                        <tr><td></td><td><%if tomemailfejl then%><font size="-2" color="#A70000"><b>[Email skal udfyldes]</b></font><%else if kortemailfejl then%><font size="-2" color="#A70000"><b>[Email adressen er for kort]</b></font><%else if ingensnabelfejl then%><font size="-2" color="#A70000"><b>[Der skal være et @ i en email adresse]</b></font><%else if punktumfejl then%><font size="-2" color="#A70000"><b>[Der kan ikke være et . (punktum) lige før eller lige efter et @]</b></font><%else if forkertendelseeftersnabelfejl then%><font size="-2" color="#A70000"><b>[Slut endelsen efter . (punktum) i en email kan maks være 4 bokstaver]</b></font><%else if manglerpunktumfejl then%><font size="-2" color="#A70000"><b>[Der skal være mindst et . (punktum) i en email adresse]</b></font><%else if formangepunktumitrakfejl then%><font size="-2" color="#A70000"><b>[Der må ikke være 2 .. (punktum) i træk i en email adresse]</b></font><%else if mintoefterpunktumfejl then%><font size="-2" color="#A70000"><b>[Slut endelsen efter . (punktum) i en email skal være minimum 2 tegn]</b></font><%else if intetforsnabelfejl then%><font size="-2" color="#A70000"><b>[Der mangler noget før @]</b></font><%end if end if end if end if end if end if end if end if end if%></td></tr>
                        <tr><td>&nbsp;</td><td valign="top"><font size="-2"><b>[Bliver ikke vist til andre brugere]</b></font></td></tr>
                        <tr><td colspan="2"><br><br></td></tr>
                        <tr><td colspan="2">Beskriv dig selv:&nbsp;&nbsp;<%if beskrivelsefejl then%><font size="-2" color="#A70000"><b>[Beskrivelse skal udfyldes]</b></font><%else if kortbeskrivelsefejl then%><font size="-2" color="#A70000"><b>[Beskrivelsen er for kort. Minimum 100 tegn.]</b></font><%end if end if%></td></tr><tr><td colspan="2"><textarea name="beskrivelse" class="txtbox" rows="15" cols="63"><%=beskrivelse%></textarea></td></tr>
                        <tr><td colspan="2"><input type="image" src="../images/knapper/opret.jpg" style="width:100px; height:22pz;"></td></tr>
                        </form>
                        </table>
                       
                        <%else
                       
                        sql = "INSERT INTO Members (MemberID,brugernavn,nickname,kodeord,alder,navn,email,beskrivelse,Last_Seen)"
                        sql = sql & " VALUES ("&""&newID&",'"&brugernavn&"','"&brugernavn&"','"&kodeord&"',"&alder&",'"&navn&"','"&email&"','"&beskrivelse&"','"&Now()&"')"
                        conn.execute(sql)
                        sqlPic = "INSERT INTO Billeder (BEID) VALUES ("&""&newID&")"
                        conn.execute(sqlPic)
                        response.Redirect("create.asp?id=2")
                        end if%>
Avatar billede aerobee Nybegynder
29. august 2005 - 10:55 #10
Kæft det står noget rodet her.. Men håber da du kan finde hovede og hale i det ;)
Avatar billede aerobee Nybegynder
29. august 2005 - 11:04 #11
Her er hvad jeg har fundet frem til.

Hvis variablen email indeholder et @ virker

if Len(Left(email,InStr(email,"@")-1))=0 then
    intetforsnabelfejl = 1
    showform = 1
End If

helt fint. Problemet kommer hvis variablen email ikke indeholder et @ for så kan scriptet jo ikke finde et @ og tjekke om der står noget inden.
Så det jeg skal er vel at få den til at lade være med at kører ovenstående script hvis variablen email ikke indeholder et @. Har også lavet et check (som du kan se) på om variablen email indeholder et @ inden ovenstående script eksekveres, og så mener jeg jo at den burde stoppe valideringen der og melde fejl, men alligevel fortsætter valideringen...
Avatar billede aerobee Nybegynder
29. august 2005 - 11:09 #12
Okay, problemet er løst..

Bryggede det sammen på denne måde:

If InStr(email,"@") = 0 Then
    ingensnabelfejl = 1
    showform = 1
else If Len(Left(email,InStr(email,"@")-1))=0 then
    intetforsnabelfejl = 1
    showform = 1
End If End if
Avatar billede aerobee Nybegynder
29. august 2005 - 11:10 #13
Smider du ikke lige et svar softspot, du skal da have lidt fordi du tog tiden til at hjælpe lidt :)
Avatar billede aerobee Nybegynder
29. august 2005 - 11:11 #14
Du får 15 jeg snupper 15 :D
Det må da være fair?
Avatar billede softspot Forsker
29. august 2005 - 11:15 #15
Ok :)

Glad for at jeg kunne inspirere dig ;)
Avatar billede softspot Forsker
29. august 2005 - 11:22 #16
Tak for point :)
Avatar billede aerobee Nybegynder
29. august 2005 - 11:27 #17
anytime
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
Kurser inden for grundlæggende programmering

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