On Fri, 22 Sep 2006 18:40:05 +0200, "Kurt G" <kurt_g@guldbaek.net>
wrote:
>Jeg har lavet en side, hvor jeg får udlæst data fra en database i en tabel
>vha lidt hardkodet sql.
>Nu vil jeg gerne have lavet to input på siden til at bestemme, hvad der skal
>søges efter.
>
>Jeg har lavet to boxe således:
>Kasse/Gruppe: <input type="text" name="kasse"
>Omhandler: <input type="text" name="omhandler"
><input type="submit" name="soeg" value="Søg"
<snip>
>Hvordan får jeg input fra [Omhandler: <input type="text" name="omhandler"]
>ført over i [Omhandler Like '%Djeld%',database]?
Prøv at kigge på:
<url:
http://www.html.dk/tutorials/asp/lektion11.asp>
som handler om at overføre værdier fra én side til en anden (eller til
den samme) med en formular.
Lektion 10 handler om at gøre det med en QueryString.
En tredje metode er at bruge Session-variable - det bruges især, hvis
et valg skal fastholdes over flere sider, men inden for samme Session
(dvs. samme uafbrudte besøg på siderne). Se fx:
<url:
http://www.html.dk/tutorials/asp/lektion12.asp>
En fjerde er at bruge Cookies - bruges mest, hvis man vil fastholde et
valg over længere tid, fra et besøg til det næste fx.
Uanset hvilken metode, du vælger skal du vælge nogle "defaults" - atså
når folk kommer til siden uden at have foretaget nogle valg. det gøres
nemmest med en If ... Then .. Else-konstruktion (eller en Select
Case-konstruktion), fx:
If Request.Form("omhandler") = "hest" Then
strOmhandler = "hest"
ElseIf Request.Form("omhandler") = "ko" Then
strOmhandler = "ko"
Else
strOmhandler = "gris"
End If
Eller med Select Case:
strOmhandler = Trim("" & Request.Form("omhandler"))
Select Case strOmhandler
Case "hest", "ko"
' Alt i orden
Case Else
strOmhandler = "gris"
End If
Sql'en kunne så være:
strSql = "Select * FROM KasseA" & _
" Where Omhandler Like '%" & strOmhandler & "%'"
Denne metode kan bruges, hvis der er et meget begrænset antal valg.
Hvis det er muligt at søge på "hvad-som-helst", skal man kun checke
på, om der er er et input - fx:
strOmhandler = Trim("" & Request.Form("omhandler"))
If strOmhandler = "" Then
' Vis kun søgeboksen
Else
' Vis resultat (og evt. søgeboks)
End If
I dette tilfælde skal man dog tage højde for, at "ondsindede personer"
kan finde på at skrive mærkelig kode ind. Se fx:
<url:
http://www.asp-faq.dk/article/?id=95>
Så i stedet for blot at skrive:
strOmhandler = Trim("" & Request.Form("omhandler"))
skriver du:
strOmhandler = Trim("" & Request.Form("omhandler"))
strOmhandler = Replace(strOmhandler, "'", "''")
Alt dette kalder man (eller i hvert fald jeg) for input-validering.
Det bruges til at sikre, at man får de data ind, man forventer - fx
kan man, hvis man forventer at få et tal som input, checke om det
faktisk er et tal og evt. om det ligger inden for et forventet
interval.
Man kan så forfine det med at give brugeren tilbagemlding, hvis man
ikke får det forventede input.
Dette er ikke kun med til at gøre siderne mere sikre, men også mere
bruger-venlige, idet brugeren langt sjældnere oplever uforkalrlige
fejl.
Jeg hopper lige tilbage til:
>Forespørgslen ser således ud:
><%
>Set Database = Server.CreateObject ("ADODB.Connection")
>database.open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:..osv
>Set personer = Server.CreateObject("ADODB.Recordset")
>Personer.open "Select * FROM KasseA Where Omhandler Like '%Djeld%',database
Må jeg anbefale, at du skriver SQL-strengen i en variabel, frem for
direkte i åbnings-linien:
strSql = "Select ... "
Personer.open strSql, database
Hvis du så får en fejlmelding i åbnings-delen, kan du nemt udskrive
SQL-strengen for at se, om den faktisk indeholder det, du forventer -
ved midlertidigt at indsætte to linier før åbningen:
strSql = "Select ... "
Response.Write strSql & "<br>" & vbcrlf
Response.End
Personer.open strSql, database
Afviklingen stopper så lige inden den linie, der udløser fejlen, og du
kan checke SQL-strengen.
Good luck!
--
Jørn Andersen,
Brønshøj