Avatar billede obhat Nybegynder
13. marts 2006 - 10:43 Der er 42 kommentarer og
1 løsning

Søgning med ASP og MySql

Nogen der kan forklare mig hvordan jeg laver en select i MySql med input fra forskellige formularfelter?
Avatar billede jakobscafe Nybegynder
13. marts 2006 - 10:56 #1
Det smarteste er at lave selecten så præcis som muligt. Så det resulterende recordset kun indeholder relevante poster.
Så det med at bygge en sql-streng op.
Avatar billede keysersoze Ekspert
13. marts 2006 - 11:10 #2
et par eksempler;

SELECT * FROM tabel WHERE felt1 = '" & Request.Form("form1") & "'" OR felt2 LIKE '%" & Request.Form("form2") & "%'"

SELECT * FROM tabel where id = " & Request.Form("form3")

SELECT * FROM tabel WHERE felt1 = '" & Request.Form("form1") & "' AND felt2 = '" & Request.Form("form2") & "'"
Avatar billede obhat Nybegynder
13. marts 2006 - 11:11 #3
Har du et eksembel?
Mit aller største problem er hvis et formularfelt er tomt hvad så?
Avatar billede ch007 Nybegynder
13. marts 2006 - 11:13 #4
Så laver du blot en if sætning inden...

If Request.Form("form1") <> "" Then

SELECT.... % LIKE...
Avatar billede obhat Nybegynder
13. marts 2006 - 11:17 #5
ch007 >> det vil så sige at jeg skal lave mange mange select. det blir mere og mere vildt :(
Avatar billede obhat Nybegynder
13. marts 2006 - 11:18 #6
Nogen der vil lave det for kroner og øre?
Avatar billede ch007 Nybegynder
13. marts 2006 - 11:18 #7
Nej, det mener jeg ikke. Jeg mener blot du skal lave en if sætning som:

If Request.Form("form") <> "" Then

SELECT * FROM tabel WHERE xxx LIKE '%" & Request.Form("form") & "%'

Response ??

Else

Response.write "Du har ikke udfyldt søgefeltet"

End if

Evt blot lade den intet gøre ved ELSE
Avatar billede ch007 Nybegynder
13. marts 2006 - 11:20 #8
Jeg kender ikke rigtig reglerne for kroner og øre her på siden...

Men prøv at smid lidt kode, så kigger vi på det. Det er lidt nemmere hvis du skriver hvad din felter i formen hedder og hvordan db'en ser ud
Avatar billede obhat Nybegynder
13. marts 2006 - 11:33 #9
Jeg prøver lige med disse if-
For jeg ikke løst problet i dag, vil jeg gerne betale for hjælp. Så smider jeg alt kode over.
Avatar billede keysersoze Ekspert
13. marts 2006 - 11:37 #10
du skal ikke lave mange selects - kun én;

SQL = "SELECT * FROM tabel WHERE"
If request.form("form1") <> "" Then
  SQL = SQL & " felt1 = '" & request.form("form1)" & "'"
End If
If request.form("form2") <> "" Then
  SQL = SQL & " felt2 = '" & request.form("form2)" & "'"
End If
osv osv osv
Set rs = Conn.Execute(SQL)
Avatar billede obhat Nybegynder
13. marts 2006 - 11:44 #11
keysersoze >> den havde jeg ikke tænkt på - smart :-)
Men jeg har et afkrydsningsfelt, hvis man kun vil se annocer med billed, hvordan klare jeg den?
Avatar billede obhat Nybegynder
13. marts 2006 - 11:51 #12
Kan jeg ikke bruge set rs i stedet for SQL = select?

Set rs = Conn.Execute("SELECT *


hvordan laver jeg ellers
"if not rs.eof then"  i udtrækket?
Avatar billede keysersoze Ekspert
13. marts 2006 - 11:59 #13
På præcis samme måde;

SQL...
Set rs = Conn.Execute(SQL)
If Not rs.EOF Then

End If

mht din checkboks så er det noget a la;

If request.form("checkboks") <> "" Then
  SQL = SQL & " AND billede IS NOT NULL"
End If
Avatar billede obhat Nybegynder
13. marts 2006 - 12:03 #14
Flot. tak jeg prøver..........:)
Avatar billede obhat Nybegynder
13. marts 2006 - 12:35 #15
Skal der ikke indsættet AND mellem If request.form("form2") <> "" Then
  SQL = SQL & " felt2 = '" & request.form("form2)" & "'"
End If

??
Avatar billede keysersoze Ekspert
13. marts 2006 - 12:51 #16
Der er et par småting der nok skal ændres...

SQL = "SELECT * FROM tabel WHERE ID <> 0"
If request.form("form1") <> "" Then
  SQL = SQL & " AND felt1 = '" & request.form("form1)" & "'"
End If
If request.form("form2") <> "" Then
  SQL = SQL & " AND felt2 = '" & request.form("form2)" & "'"
End If
osv osv osv
Set rs = Conn.Execute(SQL)
Avatar billede obhat Nybegynder
13. marts 2006 - 13:12 #17
Fint.
keysersone >> jeg har et formularfelt hvor flere valg er mulig på en gang, som denne:

<select name="landsdel" style="width:210px;width:210px;height:;" size="3" multiple>
                <option value="København">København</option>
                <option value="Storkøbenhavn">Storkøbenhavn</option>
                <option value="Århus">Århus</option>
                <option value="Aalborg">Aalborg</option>
                <option value="Odense">Odense</option>
                <option value="Nordsjælland">Nordsjælland</option>
                <option value="Vestsjælland">Vestsjælland</option>
                <option value="Sydsjælland">Sydsjælland</option>
                <option value="Lolland/Falster">Lolland/Falster</option>
                <option value="Fyn">Fyn</option>
                <option value="Nordjylland">Nordjylland</option>
                <option value="Østjylland">Østjylland</option>
                <option value="Vestjylland">Vestjylland</option>
                <option value="Midtjylland">Midtjylland</option>
                <option value="Sønderjylland">Sønderjylland</option>
                <option value="Bornholm">Bornholm</option>
                <option value="Midtsjælland">Midtsjælland</option>
                <option value="Andet">Andet</option>
              </select>


Det blæser SQL på, tror ikke værdien kommer med over?
Eller hvad kan der være galt?
Avatar billede keysersoze Ekspert
13. marts 2006 - 13:36 #18
hvis der kan vælges flere skal der lidt mere til - den streng du får med over er komma-separeret så split den op og lav en if-sætning ud af det.
Avatar billede obhat Nybegynder
13. marts 2006 - 13:47 #19
Hm, et eksembel?
Avatar billede keysersoze Ekspert
13. marts 2006 - 14:21 #20
har du i det hele taget prøvet? på 10 minutter?

myarr = split(Request.Form("form"),", ")
For t = 0 To ubound(myarr)
  SQL = SQL & " AND noget = '" & myarr(t) & "'"
Next

... fx
Avatar billede obhat Nybegynder
13. marts 2006 - 14:26 #21
Nu er det helt nyt for mig, så når du siger spilt, ved jeg ikke hvad du mener, nu kan jeg se det :)
Avatar billede obhat Nybegynder
13. marts 2006 - 16:24 #22
Et enkelt spørgsmål.

Hvis jeg kun skal søge på et ord der starter med, er det så noget med %tegn
eks.

SQL = SQL & " AND bil LIKE '%" & request.form("bil") & "'"
Avatar billede keysersoze Ekspert
13. marts 2006 - 16:34 #23
bil LIKE '%f%'
vil finde alle hvor f indgår

bil LIKE '%f'
vil finde alle hvor f er det sidste bogstav

bil LIKE 'f%'
vil finde alle hvor f er det første bogstav
Avatar billede obhat Nybegynder
13. marts 2006 - 17:11 #24
Fint nok nu virker LIKE % sætningen

Men jeg roder altså med det her split, jeg har prøvet således i SQL:

If request.form("bil") <> "" Then
myarr = split(Request.Form("bil"),", ")
For t = 0 To ubound(myarr)
  SQL = SQL & " AND bil = '" & myarr(t) & "'"
  End If
Avatar billede keysersoze Ekspert
13. marts 2006 - 17:39 #25
If request.form("bil") <> "" Then
myarr = split(Request.Form("bil"),", ")
For t = 0 To ubound(myarr)
  SQL = SQL & " AND bil = '" & myarr(t) & "'"
Next
End If

men hvis nu man kan vælge flere i den selectboks så skal du nok bygge den del op over en OR-statement. feltet "bil" kan jo næppe både være det ene og det andet.
Avatar billede obhat Nybegynder
13. marts 2006 - 17:55 #26
Meget fint :-) jeg har ændret det så jeg kun har et multifelt nu og det virker fint.

En sidste ting i denne tråd.
Jeg vil gerne kunne vise online på udtrækket, så jeg har indsat følgende i SQL'en, men jeg får kun den første ud, kan/skal man lave en løkke her?

If request.form("online") <> "" Then

set rs = conn.Execute(SQL)
            isOnline = false
        For n = 1 To UBound(arrUsers) -1
            if arrUsers(n) = rs("bruger") then
                isOnline = true
                exit for
            end if
        next
          SQL = SQL & " AND bruger = '" & arrUsers(n) & "'"
End If
Avatar billede keysersoze Ekspert
13. marts 2006 - 19:28 #27
hvis du allerede har executed din SQL som du gør i ovenstående linie 3 så kan du vel ikke tilføje mere til SQL'en som du forsøger på i andensidste linie eller?

Hvor/hvordan afgøres det om man er online eller ej?
Avatar billede obhat Nybegynder
13. marts 2006 - 19:37 #28
Keysersone >> I starten af scriptet skrives:

Sub WriteOnLineUsers()
    Dim arrUsers, isOnline, n
    arrUsers = Split(Application("Onlineusers"), ",")


I SQL'en har jeg forsøgt:

If request.form("online") <> "" Then
isOnline = false
For n = 1 To UBound(arrUsers) -1
isOnline = true
exit for
next
SQL = SQL & " AND bruger = '" & arrUsers(n) & "'"
End If


I slut af scriptet skrives:

End Sub
Call WriteOnlineUsers()
Avatar billede keysersoze Ekspert
13. marts 2006 - 19:44 #29
If request.form("online") <> "" Then
  SQL = SQL & " AND bruger IN (" & Application("Onlineusers") & ")"
End If

alt afhængig af hvordan det er gemt i din application kan det dog være den skal formateres på en lidt anden måde... hvis muligt brug evt id-numre i stedet for fuldt navn.
Avatar billede obhat Nybegynder
13. marts 2006 - 19:49 #30
Min global.asa ser således ud:

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

timeout_sek = 2

Sub Application_OnStart
    ' Nulstiller antallet af brugere når applikationen (serveren) startes
   
    Application.Lock
    Application("OnlineUsers") = ","
    Application.UnLock
   
   
    Application("ActiveUsers") = 0
End Sub

Sub Application_OnEnd
    ' Skriv kode som skal køres når applikationen (serveren) stoppes
End Sub

Sub Session_OnStart
    ' Forøger antallet af brugere med 1, når en session startes
    Application.Lock
        Application("ActiveUsers") = Application("ActiveUsers") + 1
    Application.UnLock
End Sub

Sub Session_OnEnd
    ' Reducer antallet af brugere med 1, når en session afsluttes
   
If Len(Session("brugernavn")) > 0 Then
    Application.Lock
    Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("brugernavn") & ",", "")
    Application.UnLock
End If
   
   
    Application.Lock
        Application("ActiveUsers") = Application("ActiveUsers") - 1
    Application.UnLock
End Sub
</SCRIPT>
Avatar billede obhat Nybegynder
13. marts 2006 - 19:59 #31
Hvis jeg indsætter det du foreslog

If request.form("online") <> "" Then
  SQL = SQL & " AND bruger IN (" & Application("Onlineusers") & ")"
End If

for jeg fejlen:

MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'obhat,kalle,)

Online bruger kommer ind "'obhat,kalle,)" så det skal måske splittes op på en eller anden måde?
Avatar billede keysersoze Ekspert
13. marts 2006 - 21:12 #32
Du skal bare sørge for at navnene sættes ind sådan;

('obhat','kalle')

dvs med enkeltpling omkring de enkelte navne og uden det sidste komma.
Avatar billede obhat Nybegynder
13. marts 2006 - 21:37 #33
Tror du må hjælpe mig, jeg får ikke fjernet det komma, nærmest bare sat flere på:(

Så er det også point tid :)
Avatar billede keysersoze Ekspert
13. marts 2006 - 22:56 #34
kan laves på flere måder - ville som udgangspunkt nok sørge for at applicationen leverede det rigtige resultat. En alternativ løsning kan være noget a la

myarr = split(Application("Onlineusers"),",")
for t = 0 to ubound(myarr)-1
  If BLA = "" Then
    BLA = "'" & myarr(t) & "'"
  Else
    BLA = BLA & ",'" & myarr(t) & "'"
  End If
next

og så kan du bruge variablen BLA i din SQL
Avatar billede obhat Nybegynder
13. marts 2006 - 23:06 #35
Jeg får godt nok følgende fejl med forslaget:

[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''obhat','kalle')' at line 1
Avatar billede keysersoze Ekspert
14. marts 2006 - 09:30 #36
prøv at udskrive hele SQL'en og se om du kan se noget forkert i SQL-strengen
Avatar billede obhat Nybegynder
14. marts 2006 - 10:18 #37
Fint er det noget med response.write SQL ?
Avatar billede keysersoze Ekspert
14. marts 2006 - 10:23 #38
var det ikke hurtigere at prøve i stedet for bare at skrive?

men opstår der en fejl skal du jo sørge for en response.end lige bagefter så du ikke når at execute sql'en hvor fejlen opstår
Avatar billede obhat Nybegynder
14. marts 2006 - 15:28 #39
Hm. jeg gir op.
Jeg må betale mig fra det.
Avatar billede obhat Nybegynder
14. marts 2006 - 18:10 #40
Keysersone >> hvad skal du have for at lave det?
Avatar billede keysersoze Ekspert
14. marts 2006 - 21:14 #41
erhm - det er svært at sige da jeg ikke lige har et overblik over hvor stor opgaven er... men er du ikke næsten ved vejs ende?

Hvis du har msn kan du evt prøve at kontakte med på kim@soze.dk
Avatar billede keysersoze Ekspert
14. marts 2006 - 23:52 #42
lægger lige et svar hvis det kommer til at køre...
Avatar billede obhat Nybegynder
15. marts 2006 - 16:58 #43
:-) points.

Men der er stadig en felj i split'en:

myarr = split(Request.Form("form"),", ")
For t = 0 To ubound(myarr)
  SQL = SQL & " AND noget = '" & myarr(t) & "'"
Next

Hvis der kun markeres en ting, meldes fejlen:

Indekset er uden for området: 't'
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
Computerworld tilbyder specialiserede kurser i database-management

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