Avatar billede SilenceWar Nybegynder
07. februar 2011 - 19:58 Der er 6 kommentarer og
1 løsning

Søgning

Hej allesammen!

Jeg har et spørgsmål som jeg ikke lige synes, at jeg har kunnet finde et ordentligt svar på..

Jeg har et rangsystem med brugere - hvor man så skal kunne søge på brugerne...
Det vil sige, at man kan skrive fx. silencewar og så vil den finde mig..

Det jeg har indtil videre er meget simpelt blot ved hjælp af request.querystring("") - men derved er det jo klart, at den blot vil finde det i databasen som matcher 100% det du har skrevet i søgefeltet.

Jeg har brug for, at en søgning på silence vil give svaret med alle dem der starter med silence - og ikke blot dem der hedder silence 100%..

Nogle foreslag?
Avatar billede maddog_em Nybegynder
07. februar 2011 - 20:11 #1
Hej SilenceWar

her er et forslag som jeg selv bruger

strSQL = "select * from (din bruger database) where (din bruger tabel) like '%%"& dit søgefelt & "%%' "


herefter er det bare at liste dine resultater

/Maddog
Avatar billede SilenceWar Nybegynder
07. februar 2011 - 20:18 #2
Lig et svar så snart du kan :D
Det virker ubeklageligt!

Mange tak :)
Avatar billede maddog_em Nybegynder
07. februar 2011 - 20:23 #3
Glad for at du kunne bruge det
Avatar billede softspot Forsker
08. februar 2011 - 00:46 #4
Løsningen med LIKE er indiskutabel (vil jeg mene), men måden det er implementeret på gør din løsning sårbar overfor SQL-injections!

Sørg for at benytte Command-objektet og parameteriserede forespørgsler, så du ikke får nogle ubehagelige overraskelser. Noget i stil med dette:

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = connectionObjekt
cmd.CommandText = "SELECT * FROM tabel WHERE felt LIKE '%' + ? + '%'"
cmd.CommandType = 1
set rs = cmd.Execute(, Array(Request.QueryString("soegning")&""))
' iterér over resultatet...

Bemærk at parameteren sammensættes med % af databasen og er derfor ikke sårbar, som hvis værdien blev indsat af scriptet.
Bemærk også at det kun er nødvendigt med ét %-tegn i hver ende af strengen og ikke to :-)
Avatar billede SilenceWar Nybegynder
08. februar 2011 - 11:08 #5
Hvorfor er det, at den forrige (simple) kode er sårbar?
Hvad er det der kan ske ved brug af den? :)
Avatar billede softspot Forsker
08. februar 2011 - 11:28 #6
Forstil dig at en eller anden kalder din side med flg. url:

www.ditdomæne.dk/side.asp?soegning='; delete from tabel --

så vil din SQL komme til at se således ud:

select * from tabel where felt like '%%'; delete from tabel; --%%'"

Hvilket, i f.eks. SQL-server og andre DBMS'er der tillader multistatements, ville betyde at alle data i tabel bliver slettet... det var vist ikke det du havde i tankerne... :-)
Avatar billede SilenceWar Nybegynder
08. februar 2011 - 11:38 #7
Det har du helt ret i :P
Anede jeg faktisk ikke ville være muligt på den måde.. :s :P
Tak for hjælpen - jeg vil prøve, at implementere dit script ;)
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