Avatar billede clouise Nybegynder
23. august 2003 - 15:24 Der er 11 kommentarer og
1 løsning

form validering

Jeg er igang med at lave en tagwall med asp, og jeg vil gerne lave en validering af de ting brugeren taster ind i min formular...

Jeg tænkte at valideringen skulle kunne
- kontrollere hvor mange tegn brugeren taster ind (len funktion?)
- fjerne et evt. blank tegn før teksten begynder (trim funktion?)
- brugeren har mulighed for at taste adressen ind hvis de har en hjemmeside. Scriptet skulle gerne tjekke, om det er en http, https eller ftp adresse. Og om det i det hele taget er en rigtig url...
- Sørge for at brugeren ikke kan skrive scripts ind.

Er der nogen der har/vil lave et script til mig, som kan det...?
Avatar billede eagleeye Praktikant
23. august 2003 - 15:33 #1
Jeg har en funktion som fjerner HTML kode incl scrips fra en tekst.
Den kan ses her www.eagleeye.dk/asp/removehtml

Derudover skal du havde en funktion som laver link om til klik bare link jeg har brugt denne en gang.:

Function makeLinks(strInput)
Set objRegExpHTTP1 = New RegExp
Set objRegExpHTTP2 = New RegExp
Set objRegExpEMail = New RegExp

objRegExpHTTP1.Pattern = "(http|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)"
objRegExpHTTP2.Pattern = "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[a-z0-9\.\-\/]{0,})"
objRegExpEMail.Pattern = "([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,3}\S*)"

objRegExpHTTP1.Global = True
objRegExpHTTP2.Global = True
objRegExpEMail.Global = True

objRegExpHTTP1.IgnoreCase = True
objRegExpHTTP2.IgnoreCase = True
objRegExpEMail.IgnoreCase = True

strOutput = objRegExpEMail.Replace(strInput, " <a href='mailto:$1'>$1</a> ")
strOutput = objRegExpHTTP1.Replace(strOutput, "<a href='$1$2' target='_blank'>$1$2</a> ")
strOutput = objRegExpHTTP2.Replace(strOutput, " $1<a href='http://$2' target='_blank'>$2</a>")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

makeLinks = strOutput
End Function
Avatar billede clouise Nybegynder
23. august 2003 - 15:40 #2
Det ser godt ud, men da jeg er ultra nybegynder til scripting, har jeg brug for lidt hjælp til at sætte det sammen...
Avatar billede eagleeye Praktikant
23. august 2003 - 15:46 #3
Ok du kan ligge de to funktioner helt nede i bunden af din fil, eks på den fil som gemmer i db'en dog uden database connection.


<%
'...

str = Trim(Request.Form("tagtekst"))
str = RemoveHTML(str)
str = makeLinks(str)
if len(str) > 500 then
  'For lang

end if

str = Replace(str, "'", "''")

SQL = "INSERT INTO tagwall (tekst) VALUES ('" & str & "')"

Conn.Execute(SQL)

' Funtioner her:

Function RemoveHTML( strInputText )

  TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
    "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
    "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
    "FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
    "INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
    "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
    "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
    "TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;" 

  Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
   
  Dim nPos1, nPos2, nPos3
  Dim strResult, strTagName, bRemove, bSearchForBlock
 
  Dim runNo, AttackLimit, strRef
 
  runNo = 1
  AttackLimit = 5
 
  strResult = strInputText
  do
    runNo = runNo + 1
    strRef = strResult
    strText = strRef
    strResult = ""
   
    nPos1 = InStr(strText, "<")
    Do While nPos1 > 0
      nPos2 = InStr(nPos1 + 1, strText, ">")
      If nPos2 > 0 Then
        strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
        strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")
        nPos3 = InStr(strTagName, " ")
        If nPos3 > 0 Then
          strTagName = Left(strTagName, nPos3 - 1)
        End If
        If Left(strTagName, 1) = "/" Then
          strTagName = Mid(strTagName, 2)
          bSearchForBlock = False
        Else
          bSearchForBlock = True
        End If   
        If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
          bRemove = True
          If bSearchForBlock Then
            If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
              nPos2 = Len(strText)
              nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
              If nPos3 > 0 Then
                nPos3 = InStr(nPos3 + 1, strText, ">")
              End If
              If nPos3 > 0 Then
                nPos2 = nPos3
              End If
            End If
          End If
        Else
          bRemove = False
        End If
        If bRemove Then
          strResult = strResult & Left(strText, nPos1 - 1)
          strText = Mid(strText, nPos2 + 1)
        Else
          strResult = strResult & Left(strText, nPos1)
          strText = Mid(strText, nPos1 + 1)
        End If
      Else
        strResult = strResult & strText
        strText = ""
      End If
      nPos1 = InStr(strText, "<")
    Loop
    strResult = strResult & strText
 
  loop until (strRef = strResult) OR (runNo = AttackLimit)
 
  if (runNo >= AttackLimit) then
    strResult = "...text removed..."
  end if
  RemoveHTML = strResult
End Function

Function makeLinks(strInput)
Set objRegExpHTTP1 = New RegExp
Set objRegExpHTTP2 = New RegExp
Set objRegExpEMail = New RegExp

objRegExpHTTP1.Pattern = "(http|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)"
objRegExpHTTP2.Pattern = "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[a-z0-9\.\-\/]{0,})"
objRegExpEMail.Pattern = "([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,3}\S*)"

objRegExpHTTP1.Global = True
objRegExpHTTP2.Global = True
objRegExpEMail.Global = True

objRegExpHTTP1.IgnoreCase = True
objRegExpHTTP2.IgnoreCase = True
objRegExpEMail.IgnoreCase = True

strOutput = objRegExpEMail.Replace(strInput, " <a href='mailto:$1'>$1</a> ")
strOutput = objRegExpHTTP1.Replace(strOutput, "<a href='$1$2' target='_blank'>$1$2</a> ")
strOutput = objRegExpHTTP2.Replace(strOutput, " $1<a href='http://$2' target='_blank'>$2</a>")

Set objRegExpHTTP2 = Nothing
set objRegExpHTTP1 = Nothing
Set objRegExpEMail = Nothing

makeLinks = strOutput
End Function
%>
Avatar billede clouise Nybegynder
23. august 2003 - 15:58 #4
hvis jeg har disse fire variabler:

- navn
- besked
- email
- website

hvordan sørger jeg så for, at de alle sammen bliver "kørt igennem" scriptet? Hvilke variabel navne i scriptet skal jeg skifte ud?
Avatar billede clouise Nybegynder
23. august 2003 - 15:59 #5
noget i stil med tagtekst=RS("Navn")osv.?
Avatar billede eagleeye Praktikant
23. august 2003 - 16:08 #6
Noget i stil med:


<%
'...

navn = Trim(Request.Form("navn"))
navn = RemoveHTML(navn)
navn = makeLinks(navn)
if len(navn) > 500 then
  'For lang, hvad skal der så ske,??
end if

besked= Trim(Request.Form("besked"))
besked= RemoveHTML(besked)
besked= makeLinks(besked)
if len(besked) > 500 then
  'For lang, hvad skal der så ske,??
end if

email= Trim(Request.Form("email"))
email= RemoveHTML(email)

website= Trim(Request.Form("website"))
website= RemoveHTML(website)


navn = Replace(navn, "'", "''")
besked = Replace(besked, "'", "''")
email = Replace(email, "'", "''")
website = Replace(website, "'", "''")

SQL = "INSERT INTO tagwall (navn, besked, email, website) VALUES ("
SQL = SQL "'" & navn & "', "
SQL = SQL "'" & besked & "', "
SQL = SQL "'" & email & "', "
SQL = SQL "'" & website & "' "
SQL = SQL & ")"

Conn.Execute(SQL)
Avatar billede louise_christensen Nybegynder
23. august 2003 - 16:14 #7
ok den er jeg med på...

Dette foregår på serveren, ikke? Kan man så godt lave en

<script type="text/javascript">
alert("Din tekst må højst fylde x antal tegn!")
</script>

eller lignende?
Avatar billede eagleeye Praktikant
23. august 2003 - 16:46 #8
Ja det kan man et eks:


<script language="JavaScript">
<!--
function isValid(theForm) {
if (theForm.navn.length >= 400) {
  alert("max 400 karakter");
  return false;
)
return true;
}
//-->
</script>

<form name="form1" method="post" action="xxx.asp" onSubmit="return isValid(this.form)">
<input type="text" name="navn">
<input type=submit value=Submit>
</form>
Avatar billede louise_christensen Nybegynder
23. august 2003 - 16:47 #9
ok jeg prøver lige...
Avatar billede louise_christensen Nybegynder
23. august 2003 - 17:01 #10
Når jeg kommer til funktionerne, skal jeg så erstatte variablen igen?

eks. Function RemoveHTML(besked)

Det skal jeg vel gøre med alle variablerne, ikke?
Avatar billede eagleeye Praktikant
23. august 2003 - 17:04 #11
De funktioner som laver link og removeHTML skal køre på serveren.
Avatar billede louise_christensen Nybegynder
23. august 2003 - 17:06 #12
jeg får desværre ikke tid til at kigge mere på det lige nu, men jeg vender lige tilbage mandag aften...

tak for hjælpen indtil nu!
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