16. april 2004 - 20:38Der er
34 kommentarer og 1 løsning
Søge efter DB-objekt i et textarea
Nogen der kan hjælpe mig med at tilpasse nedenstående så det virker mest optimalt... Projektet det er forbundet med, er endnu kun på det teoretiske plan, da det skal undersøges om scriptet faktisk kan komme til at virke...
Her er det så:
<!-- Minus AutoDato --> <% Response.Buffer = True %> <% mode = request("mode") %> <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database/database.mdb") %> <% if mode = "" then
SQL = "SELECT * FROM Ordliste" set RS = Conn.Execute(SQL)
if RS.EOF then response.redirect("java script:document.getElementByID('Resultater').innerHTML='Der er ingen ord som matcher din søgning. Prøv veligst igen'") else Do Until RS.EOF %> <script language="javascript">
function soeg() document.Soeg.Tekst.value = SoegPaa; { if(SoegPaa.search(<%=rs("Ord")%>) != eval(-1)) { document.getElementByID('Resultater').innerHTML += <%=RS("Ord")%>"<br>" } } </script> <% RS.MoveNext Loop end if %>
<form name="Soeg"> <textarea onfocus="if(this.value=='Indtast din søgetekst her.'){this.value=''}" name="Tekst">
Hej S.R. Jeg har kigget lidt på det og er lidt forvirret... især over hvad meningen er med innerHTML-delen. Er meningen at hele ordlisten skal loades så man søger client-side? Det ville jeg normalt ikke anbefale medmindre der er helt styr på hvor stor tabellen er til enhver tid. Som det er nu, gednerer du en række javaskript-funktioner med samme navn (én for hvert ord i ordlisten), det duer selvfølgelig ikke. Hvordan skal det virke? Hvis meningen er, at man skal taste et ord ind og søge i databasen efter det, er det en meget enkelt opgave som ikke kræver client-side javascript. Prøv at forklare nærmere. Med venlig hilsen Kim
kimovitch -> Det jeg kort sagt ønsker er et script som kan gennemsøge et tekstfelt på mange linier for ord/sætninger der findes i en database oprettet af mig...
Projektet er et forsøg på at lave et form for automatisk karma-system til et forum/chat, således at brugere der anvender beskidt eller nedværdigende sprog vil få tildelt dårlig karma, mens de får tildelt god karma hvis de opfører sig pænt...
Brugere med en dårlig karma vil så automatisk blive logget af, og ved gentagelser vil de blive bannet fra sitet i en periode... Er de meget uartige i lang tid bliver deres brugerkonto og indlæg slettet...
OK, hvad med noget i denne stil: <% if request("submit") <> "" then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database/database.mdb") fundneOrd = "" SQL = "SELECT * FROM ordliste" set RS = Conn.Execute(SQL) tekst = request("tekst") do while not rs.eof if inStr(tekst,rs("ord")) > 0 then fundneOrd = fundneOrd & rs("ord") & "<br>" end if rs.moveNext loop Conn.Close Set Conn = Nothing end if %> <html> <body> <% = fundneOrd %> <form name="Soeg" action='testsoeg.asp'> <textarea name="Tekst"> </textarea><br> <input name=submit type="submit" value="Søg" > <input type="reset" value="reset"> </form> </body> </html>
Det virker fint, men vil gerne lige ha' tilføjet 2 ting... Der skal være mulighed for at søge på sætninger, og så skal den ignorere store og små bogstaver...
Skal faktisk bruge scriptet til 2 ting... Både et karma-system, men også som en slags online-tjek af HiJackThis log-filer...
Har fået karma-systemets del til at virke, men er løbet ind i et problem med HiJackThis siden... Hvis jeg poster det ændrede script herinde, kan du så lige sige hvor der er fejl og evt. rette det så jeg kan komme i seng med endnu et problem ude af verdenen???
Ups... Glemte at poste det i går... Smider det lige ind...
<% if request("Loggen") <> "" then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("Tjek_log.mdb")
AndetTjek = "Flyt først filen HiJackThis til en mappe oprettet kun til den.<br><br>Kør Hijackthis, scan, sæt flueben ved linierne listet her, luk alle vinduer undtaget Hijackthis,<br>klik på fix checked, genstart i fejlsikret(Tryk <F8> under opstart) og slet filerne listet nederst.<br>Dobbelttjek, så alt kommer med.<br><br>"
FejlsikretTjek = "<br>---------------------------------------<br>Åbn en mappe, klik på Funktioner=>Mappeindstillinger=>Vis.<br>Fjern flueben ved [Skjul beskyttede operativsystemfiler].<br>Fjern flueben ved [Skjul filtypenavne for kendte filtyper].<br>Sæt prik i [Vis skjulte filer og mapper].<br><br>---------------------------------------<br>Slettes i fejlsikret:<br>"
SQL1 = "SELECT * FROM Andet" set RS1 = Conn.Execute(SQL1)
SQL2 = "SELECT * FROM Fejlsikret" set RS2 = Conn.Execute(SQL2)
Log = request("Loggen") do while not RS1.eof or RS1.eof if inStr(Log,RS1("Navn")) > 0 then AndetTjek = AndetTjek & RS1("Navn") & "<br>" end if
if inStr(Log,RS2("Navn")) > 0 then Fejlsikret = Fejlsikret & RS2("Navn") & "<br>" end if
RS1.moveNext RS2.moveNext
loop
Conn.Close Set Conn = Nothing end if %> <html> <body> Hent programmet HiJackThis <a href="hijackthis.exe" target="_top">her</a> og installér det i en mappe for sig selv.<br><br>Start HiJackThis og lav et "Scan", tryk på "Save Log" og kopier indholdet ind i<br>nedenstående felt og tryk på "Tjek log".<br><br>
Der er to problemer: 1) Log er et reserveret ord (en funktion, der returnerer logaritmen af en tal), jeg har skiftet det ud med ordet "myLog" 2) Du skal checke de to tabeller én ad gangen (du kan ikke være sikker på at der er lige mange poster i tabellerne, og hvis det ene recordset er eof før det andet får du en fejlmelding.)
(iøvrigt er der en egentlig fejl: "do while not RS1.eof or RS1.eof")
Her er et forslag til database-delen:
myLog = request("Loggen")
SQL1 = "SELECT * FROM Andet" set RS1 = Conn.Execute(SQL1)
do while not RS1.eof if inStr(myLog,RS1("Navn")) > 0 then AndetTjek = AndetTjek & RS1("Navn") & "<br>" end if RS1.moveNext loop
SQL2 = "SELECT * FROM Fejlsikret" set RS2 = Conn.Execute(SQL2) do while not RS2.eof if inStr(myLog,RS2("Navn")) > 0 then Fejlsikret = Fejlsikret & RS2("Navn") & "<br>" end if
Ok... Ha lige set på det, og tilføjet et par ting så resultet kan blive skrevet ud, men nu kan den ingenting... Den mumler noget om en "Syntax error" på linie 8 tegn 7 og et "Object expected" på linie 37 tegn 1...
Er normalt ikke den der giver op, men er jeg nødt til her... Hvis du kan få nedenstående til at virke, så ville jeg blive meget glad og evt. smide en bunke extra point oveni... Jeg er ligeglad med hvordan det bliver lavet, hvis resultatet bare bliver at den udskriver det der står i JavaScriptet...
Her er hele scriptet:
<-------->
<!-- Minus AutoDato --> <% if request("Loggen") <> "" then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("Tjek_log.mdb")
AndetTjek = "" FejlsikretTjek = ""
myLog = request("Loggen")
SQL1 = "SELECT * FROM Andet" set RS1 = Conn.Execute(SQL1)
do while not RS1.eof if inStr(myLog,RS1("Navn")) > 0 then AndetTjek = AndetTjek & RS1("Navn") & "<br>" end if RS1.moveNext loop
SQL2 = "SELECT * FROM Fejlsikret" set RS2 = Conn.Execute(SQL2) do while not RS2.eof if inStr(myLog,RS2("Navn")) > 0 then FejlsikretTjek = FejlsikretTjek & RS2("Navn") & "<br>" end if
RS1.moveNext loop
Conn.Close Set Conn = Nothing end if %> <html> <script language="javascript">
function ShowResult() { if(<%=AndetTjek%> != "") { document.getElementById("Result").innerHTML += "Flyt først filen HiJackThis til en mappe oprettet kun til den.<br><br>Kør Hijackthis, scan, sæt flueben ved linierne listet her, luk alle vinduer undtaget Hijackthis,<br>klik på fix checked, genstart i fejlsikret(Tryk F8 under opstart) og slet filerne listet nederst.<br>Dobbelttjek, så alt kommer med.<br><br>" + <%=AndetTjek%> } else { document.getElementById("Result").innerHTML += "" }
if(<%=FejlsikretTjek%> != "") { document.getElementById("Result").innerHTML += "<br>---------------------------------------<br>Åbn en mappe, klik på Funktioner=>Mappeindstillinger=>Vis.<br>Fjern flueben ved [Skjul beskyttede operativsystemfiler].<br>Fjern flueben ved [Skjul filtypenavne for kendte filtyper].<br>Sæt prik i [Vis skjulte filer og mapper].<br><br>---------------------------------------<br>Slettes i fejlsikret:<br>" + <%=FejlsikretTjek%> document.getElementById("Result").focus() } else { if(<%=AndetTjek%> == "") { document.getElementById("Result").innerHTML += "Din log er ren." document.getElementById("Result").focus() } else { document.getElementById("Result").innerHTML += "" document.getElementById("Result").focus() } } } </script> <body onload="ShowResult()"> Hent programmet HiJackThis <a href="hijackthis.exe" target="_top">her</a> og installér det i en mappe for sig selv.<br><br>Start HiJackThis og lav et "Scan", tryk på "Save Log" og kopier indholdet ind i<br>nedenstående felt og tryk på "Tjek log".<br><br>
Håber du gider at kigge på det, ellers lukker jeg her og åbner et nyt spm... Du har allerede gjort langt mere end jeg forventede du ville ha' tålmodighed til...
Har lige haft lidt andet mellem ørerne et par dage, men her er et fix. Der var bøvl med dit java script: Når du skriver if(<% AndetTjek %> != "")...osv skal du sikre dig at <% = AndetTjek %> ikke bare returnerer en tom streng (som ikke er det samme som et sæt anførselstegn fordi <% = AndetTjek %> afvikles på serveren). Jeg har løst det ved at generere et sæt anførselstegn omkring dine to asp-variable ( chr(34) ). Håber det kører nu.
Med venlig hilsen Kim
<!-- Minus AutoDato --> <% if request("Loggen") <> "" then Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("Tjek_log.mdb")
AndetTjek = "" FejlsikretTjek = ""
myLog = request("Loggen")
SQL1 = "SELECT * FROM Andet" set RS1 = Conn.Execute(SQL1)
do while not RS1.eof if inStr(myLog,RS1("Navn")) > 0 then AndetTjek = AndetTjek & RS1("Navn") & "<br>" end if RS1.moveNext loop
SQL2 = "SELECT * FROM Fejlsikret" set RS2 = Conn.Execute(SQL2) do while not RS2.eof if inStr(myLog,RS2("Navn")) > 0 then FejlsikretTjek = FejlsikretTjek & RS2("Navn") & "<br>" end if
RS1.moveNext loop
Conn.Close Set Conn = Nothing end if %> <html> <script language="javascript"> function ShowResult() { if(<%= chr(34) & AndetTjek & chr(34) %> != "") { document.getElementById("Result").innerHTML += "Flyt først filen HiJackThis til en mappe oprettet kun til den.<br><br>Kør Hijackthis, scan, sæt flueben ved linierne listet her, luk alle vinduer undtaget Hijackthis,<br>klik på fix checked, genstart i fejlsikret(Tryk F8 under opstart) og slet filerne listet nederst.<br>Dobbelttjek, så alt kommer med.<br><br>" + <%= chr(34) & AndetTjek & chr(34) %> } else { document.getElementById("Result").innerHTML += "" }
if(<%= chr(34) & FejlsikretTjek & chr(34) %> != "") { document.getElementById("Result").innerHTML += "<br>---------------------------------------<br>Åbn en mappe, klik på Funktioner=>Mappeindstillinger=>Vis.<br>Fjern flueben ved [Skjul beskyttede operativsystemfiler].<br>Fjern flueben ved [Skjul filtypenavne for kendte filtyper].<br>Sæt prik i [Vis skjulte filer og mapper].<br><br>---------------------------------------<br>Slettes i fejlsikret:<br>" + <% = chr(34) & FejlsikretTjek & chr(34) %> document.getElementById("Result").focus() } else { if(<%= chr(34) & AndetTjek & chr(34) %> == "") { document.getElementById("Result").innerHTML += "Din log er ren." document.getElementById("Result").focus() } else { document.getElementById("Result").innerHTML += "" document.getElementById("Result").focus() } } } </script> <body onload="ShowResult()"> Hent programmet HiJackThis <a href="hijackthis.exe" target="_top">her</a> og installér det i en mappe for sig selv.<br><br>Start HiJackThis og lav et "Scan", tryk på "Save Log" og kopier indholdet ind i<br>nedenstående felt og tryk på "Tjek log".<br><br>
Ups, en lille ting mere: Der står RS1.moveNext der hvor du er igang med tabel2, det skal selvfølgelig være RS2.moveNext:
do while not RS2.eof if inStr(myLog,RS2("Navn")) > 0 then FejlsikretTjek = FejlsikretTjek & RS2("Navn") & "<br>" end if RS1.moveNext ' >>>>>>>>>>>>>> FEJL, ret til RS2.moveNext <<<<<<<<<<<<<<<<<<< loop
Ok.. Takker for det... Har lige kigget på det... Det virker fint, indtil jeg kopierer en log-fil fra notepad ind i tekstboksen og submit'er den...
Har fundet ud af, at den laver fejl ved linier som indeholder "-tegn... Kan det laves, så den automatisk ignorerer/sletter "-tegn når den tjekker linierne med dem i DB'en???
Har også fundet ud af, at fil- og mappestier ikke vises korrekt når den skriver linierne ud... Fx. vises: O4 - HKLM..Run: [ccApp] C:Programmer\Fælles filer\Symantec Shared\ccApp.exe som: O4 - HKLM..Run: [ccApp] C:ProgrammerFælles filerSymantec SharedccApp.exe
Kan det evt. fixes så den også viser "\" korrekt ved udskrivningen???
Ellers virker det helt fint... Scriptet fejler ikke noget, men skal bare lige rettes lidt til...
Ok... Det var så de problemer... Men har endnu et nu, som virker lidt forvirrende...
Når jeg prøver på at få tjekket denne linie: O3 - Toolbar: BlowSearch Toolbar - {6F8ADBE2-8C92-4362-B0E6-7321AA49EE46} - C:\Programmer\BlowsearchToolbar\ultrabar.dll
skriver den følgende fejl: Linje: 8 Tegn: 122 Fejl: Et hexadecimelt ciffer var ventet
Det siger mig nada... Og specielt fordi den godt kan godtage andre linjer af samme format...
Problemet opstår ved ...\ultrabar... fordi \u i javascript betyder at nu kommer der en Unicode sekvens (som består af fire hexa-tal. Så du må have endnu en replace på:
Efter myLog = replace(request("Loggen"),chr(34),"") skriver du myLog = replace(myLog,"\u","\\u")
Ok... Er der andre sådanne specielle forkortelser jeg skal huske at tage mig i akt for???
Når man tænker på, at der 36 (a-z samt 0-9) mulige standard begyndelses-tegn for mapper og filer, må der vel være et par stykker af dem som ikke går i spænd med "\"...
Ok... Takker for dem... Har lige været ved at tilføje en log-in del til admins, såde kan tilføje flere søge-objekter til DB'en, men det virker ikke helt... Den kan ikke finde "Tjek_log.asp?mode=TjekObjekt" når den skal tilføje de nye søge-objekter... Hvis du gider at kigge på det, så vil siden være færdig, og jeg smider nogle points til dig...
SQL1 = "SELECT * FROM Andet" set RS1 = Conn.Execute(SQL1)
do while not RS1.eof if inStr(myLog,RS1("Navn")) > 0 then AndetTjek = AndetTjek & RS1("Navn") & "<br>" end if RS1.moveNext loop
SQL2 = "SELECT * FROM Fejlsikret" set RS2 = Conn.Execute(SQL2) do while not RS2.eof if inStr(myLog,RS2("Navn")) > 0 then FejlsikretTjek = FejlsikretTjek & RS2("Navn") & "<br>" end if
RS2.moveNext loop
end if %> <html> <head><title>HiJackThis-Log scanner</title> <script language="javascript"> function ShowResult() { if(<%= chr(34) & AndetTjek & chr(34) %> != "") { document.getElementById("Result").innerHTML += "Flyt først filen HiJackThis til en mappe oprettet kun til den.<br><br>Kør Hijackthis, scan, sæt flueben ved linierne listet her, luk alle vinduer undtaget Hijackthis,<br>klik på fix checked, genstart i fejlsikret(Tryk F8 under opstart) og slet filerne listet nederst.<br>Dobbelttjek, så alt kommer med.<br><br>" + <%= chr(34) & replace(AndetTjek,"\","\\") & chr(34) %> } else { document.getElementById("Result").innerHTML += "" }
if(<%= chr(34) & FejlsikretTjek & chr(34) %> != "") { document.getElementById("Result").innerHTML += "<br>---------------------------------------<br>Åbn en mappe, klik på Funktioner=>Mappeindstillinger=>Vis.<br>Fjern flueben ved [Skjul beskyttede operativsystemfiler].<br>Fjern flueben ved [Skjul filtypenavne for kendte filtyper].<br>Sæt prik i [Vis skjulte filer og mapper].<br><br>---------------------------------------<br>Slettes i fejlsikret:<br>" + <%= chr(34) & replace(FejlsikretTjek,"\","\\") & chr(34) %> document.getElementById("Result").focus() } else { if(<%= chr(34) & AndetTjek & chr(34) %> == "") { document.getElementById("Result").innerHTML += "Din log er ren." document.getElementById("Result").focus() } else { document.getElementById("Result").innerHTML += "" document.getElementById("Result").focus() } } } </script> </head> <body onload="ShowResult()"> <a href="Tjek_log.asp?mode=Admin" target="_self">Tilføj spyware-objekter</a><br> <br> Hent programmet HiJackThis <a href="hijackthis.exe" target="_top">her</a> og installér det i en mappe for sig selv.<br><br>Start HiJackThis og lav et "Scan", tryk på "Save Log" og kopier indholdet ind i<br>nedenstående felt og tryk på "Tjek log".<br><br>
<% if mode = "Error" then %> <head> <meta name="Generator" content="Stone's WebWriter 4"> <TITLE>HiJackThis-log scanner</TITLE> </HEAD>
<BODY> Det er påkrævet, at De er logget ind for at De kan tilføje til databasen:<br> <br> <form method="POST" action="Tjek_log.asp?mode=Signin"> <table border="0" width="250"> <tr> <td>Brugernavn:</td> <td><input type="text" name="Brugernavn" size="20"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="Password" size="20"></td> </tr> <tr> <td colspan="2"><input type="Submit" value="Log ind" name="Login"> <input type="reset" value="Nulstil" name="Reset"></td> </tr> </table> </form> </body> <% end if %>
<% if mode = "Signin" then %> <% Session("Brugernavn") = request.form("Brugernavn") Session("Password") = request.form("Password")
Response.Buffer = True
set tjek = Conn.Execute("SELECT * FROM Brugere WHERE Brugernavn = '"& Session("Brugernavn") &"' AND Password = '"& Session("Password") &"'") if tjek.EOF then response.write "<head><meta name=""Generator"" content=""Stone's WebWriter 4""><TITLE>HiJackThis-log scanner</TITLE></HEAD><BODY></script><center><FONT FACE=""Verdana"" SIZE=""4"" COLOR=""#FF0000"">Forkert brugernavn eller password, prøv igen.<br><br><a href=""Tjek_log.asp?mode=Error"" target=""_self"">Tilbage</a></FONT></center></body>" else Session("login") = tjek("ID") Response.Redirect("Tjek_log.asp?mode=Admin") end if
Function sqlreplace(streng) sqlreplace = Replace(streng,"''","''") End Function REM Diverse funktioner slut
end if %>
<% if mode = "Admin" then %> <% if not Session("login") > 0 then Response.Redirect("Tjek_log.asp?mode=Error") %> <head> <meta name="Generator" content="Stone's WebWriter 4"> <TITLE>HiJackThis-log scanner</TITLE> <script language="javascript">
Set rs3 = Server.CreateObject("ADODB.RecordSet") if Request.form("Andet") = "On" then strSQL = "Select * From Andet WHERE Not Navn='" & Request.form("Andet") & "'" end if if Request.form("Fejlsikret") = "On" then strSQL = "Select * From Fejlsikret WHERE Not Navn='" & Request.form("Fejlsikret") & "'" end if
...men du kan sådan set slippe noget lettere om ved det ved at lade være med at bruge javascript til at udskrive søgeresultatet. Hvis nu du nøjes med at lade funktionen showResult vise forklaringen, kan du nede i html-delen bare udskrive værdien af hhv. AndetTjek og FejlsikretTjek. Brug to div'er, en til hvert tjek.
<script language="javascript"> function ShowResult() { if(<%= chr(34) & AndetTjek & chr(34) %> != "") { document.getElementById("Result1").innerHTML += "Flyt først filen HiJackThis til en mappe oprettet kun til den.<br><br>Kør Hijackthis, scan, sæt flueben ved linierne listet her, luk alle vinduer undtaget Hijackthis,<br>klik på fix checked, genstart i fejlsikret(Tryk F8 under opstart) og slet filerne listet nederst.<br>Dobbelttjek, så alt kommer med.<br><br>" } else { document.getElementById("Result").innerHTML += "" }
if(<%= chr(34) & FejlsikretTjek & chr(34) %> != "") { document.getElementById("Result2").innerHTML += "<br>---------------------------------------<br>Åbn en mappe, klik på Funktioner=>Mappeindstillinger=>Vis.<br>Fjern flueben ved [Skjul beskyttede operativsystemfiler].<br>Fjern flueben ved [Skjul filtypenavne for kendte filtyper].<br>Sæt prik i [Vis skjulte filer og mapper].<br><br>---------------------------------------<br>Slettes i fejlsikret:<br>"
Jeg er squ da helt forvirret idag... Gav dig jo lige de point... Kører vist på reserve-pumpen i øjeblikket... Må hellere gå i seng inden jeg siger andet forkert...
S.R.
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.