Avatar billede pixelboxdk Nybegynder
11. november 2004 - 14:54 Der er 32 kommentarer og
1 løsning

SQL fra helvede!

Jeg er ved at lave en advanceret søgning (som i ser på diverse Dating-sider).. Men den SQL driller fandme som.. ja.. jeg ved ikke hvad.. Her er den:

strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' AND Real_name LIKE '%"&request.form("soegnavnfelt")&"%' AND DKArea LIKE '%"&request.form("omraadesoeg")&"%' AND Gender LIKE '%"&request.form("koen")&"%' AND Haircolor LIKE '%"&request.form("haarfarve")&"%' AND Eyecolor LIKE '%"&request.form("oejenfarve")&"%' AND Occupation LIKE '%"&request.form("jobsoeg")&"%' AND Education1 LIKE '%"&request.form("uddsoeg")&"%' or Education2 LIKE '%"&request.form("uddsoeg")&"%' AND Location LIKE '%"&request.form("landsoeg")&"%' AND Yahoo LIKE '%"&request.form("stilling")&"%' AND Height >= '%"&request.form("hoejdeminus")&"%' AND Height <= '%"&request.form("hoejdeplus")&"%' AND Weight >= '%"&request.form("vaegtminus")&"%' AND Weight <= '%"&request.form("vaegtplus")&"%'"

Der kommer (heldigvis) ingen fejl.. Men den skriver bare ALT ud fra databasen.. Nogle der kan se et problem?! i need help!! :)
Avatar billede henninghabor Nybegynder
11. november 2004 - 14:56 #1
Hej,

Du må ha' mere kode end det. For hvis jeg bare skriver det der, skriver den jo intet.

Du har bare foretaget en sql forespørgsel, men der er ikke noget output.
Avatar billede henninghabor Nybegynder
11. november 2004 - 14:56 #2
Desuden er det asp kode og ikke php. Tror jeg.
Avatar billede henninghabor Nybegynder
11. november 2004 - 14:57 #3
Arh, flot... Havde glemt at jeg var i asp... Se bort fra min besked 14:56:57
Avatar billede mortency Nybegynder
11. november 2004 - 14:58 #4
Prøv dette se om det samme skjer.

strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' AND Real_name LIKE '%"&request.form("soegnavnfelt")&"%' AND DKArea LIKE '%"&request.form("omraadesoeg")&"%' AND Gender LIKE '%"&request.form("koen")&"%' AND Haircolor LIKE '%"&request.form("haarfarve")&"%' AND Eyecolor LIKE '%"&request.form("oejenfarve")&"%' AND Occupation LIKE '%"&request.form("jobsoeg")&"%' AND Education1 LIKE '%"&request.form("uddsoeg")&"%' or Education2 LIKE '%"&request.form("uddsoeg")&"%' AND Location LIKE '%"&request.form("landsoeg")&"%' AND Yahoo LIKE '%"&request.form("stilling")&"%'"
Avatar billede mortency Nybegynder
11. november 2004 - 14:59 #5
Skriv ut sql`en din!

response.write(strSQL) så kan vi sjekke den! Forresten dette er et SQL spm.
Avatar billede fennec Nybegynder
11. november 2004 - 15:01 #6
Det er måske fordi du mangler parenteser om din OR betingelse:

strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' "&
    "AND Real_name LIKE '%"&request.form("soegnavnfelt")&"%' "&_
    "AND DKArea LIKE '%"&request.form("omraadesoeg")&"%' " &_
    "AND Gender LIKE '%"&request.form("koen")&"%' " &_
    "AND Haircolor LIKE '%"&request.form("haarfarve")&"%' " &_
    "AND Eyecolor LIKE '%"&request.form("oejenfarve")&"%' " &_
    "AND Occupation LIKE '%"&request.form("jobsoeg")&"%' " &_
    "AND (Education1 LIKE '%"&request.form("uddsoeg")&"%' " &_
    "or Education2 LIKE '%"&request.form("uddsoeg")&"%') " &_
    "AND Location LIKE '%"&request.form("landsoeg")&"%' " &_
    "AND Yahoo LIKE '%"&request.form("stilling")&"%' " &_
    "AND Height >= '%"&request.form("hoejdeminus")&"%' " &_
    "AND Height <= '%"&request.form("hoejdeplus")&"%' " &_
    "AND Weight >= '%"&request.form("vaegtminus")&"%' " &_
    "AND Weight <= '%"&request.form("vaegtplus")&"%'"
Avatar billede fennec Nybegynder
11. november 2004 - 15:01 #7
Manglede lige en _ i første linje:

strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' "&_
Avatar billede nva Praktikant
11. november 2004 - 15:02 #8
Pas på med or inde midt i SQL'en - det kræver ofte en parantes for at gå godt.
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:02 #9
Mortency > Så virker det fint.. selvfølgelig virker "hoejdeminus, hoejdeplus, vaegtminus og vaegtplus" ikke..
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:04 #10
fennec > Nu kommer den selvfølgelig med denne:

Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression.

/forum/searchresults.asp, line 82
Avatar billede fennec Nybegynder
11. november 2004 - 15:05 #11
det er pga af:
    "AND Height >= '%"&request.form("hoejdeminus")&"%' " &_
    "AND Height <= '%"&request.form("hoejdeplus")&"%' " &_
    "AND Weight >= '%"&request.form("vaegtminus")&"%' " &_
    "AND Weight <= '%"&request.form("vaegtplus")&"%'"

Det skal sikkert være:
    "AND Height >= "&request.form("hoejdeminus")&" " &_
    "AND Height <= "&request.form("hoejdeplus")&" " &_
    "AND Weight >= "&request.form("vaegtminus")&" " &_
    "AND Weight <= "&request.form("vaegtplus")&" "
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:08 #12
Fennec >

Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'username LIKE '%%' AND Real_name LIKE '%%' AND DKArea LIKE '%%' AND Gender LIKE '%%' AND Haircolor LIKE '%%' AND Eyecolor LIKE '%%' AND Occupation LIKE '%%' AND (Education1 LIKE '%%' or Education2 LIKE '%%') AND Location LIKE '%Denmark%' AND Yahoo LIKE '%'.

/forum/searchresults.asp, line 82

Kan det evt. ikke være noget med at hoejdeminus, hoejdeplus osv. er tal-felter?
Avatar billede mortency Nybegynder
11. november 2004 - 15:09 #13
strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' AND Real_name LIKE '%"&request.form("soegnavnfelt")&"%' AND DKArea LIKE '%"&request.form("omraadesoeg")&"%' AND Gender LIKE '%"&request.form("koen")&"%' AND Haircolor LIKE '%"&request.form("haarfarve")&"%' AND Eyecolor LIKE '%"&request.form("oejenfarve")&"%' AND Occupation LIKE '%"&request.form("jobsoeg")&"%' AND Education1 LIKE '%"&request.form("uddsoeg")&"%' or Education2 LIKE '%"&request.form("uddsoeg")&"%' AND Location LIKE '%"&request.form("landsoeg")&"%' AND Yahoo LIKE '%"&request.form("stilling")&"%' AND Height >= %"&request.form("hoejdeminus")&"% AND Height <= %"&request.form("hoejdeplus")&"% AND Weight >= %"&request.form("vaegtminus")&"% AND Weight <= %"&request.form("vaegtplus")&"%"
Avatar billede fennec Nybegynder
11. november 2004 - 15:11 #14
Det kræver at de 4 sidste request.form's alle har en værdi. De må ikke være tomme, da det så giver noget i denne stil:
".... and Height >= and Height <= and ..."

og det kan de ikke finde ud af.
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:13 #15
mortency >
Microsoft JET Database Engine error '80040e14'
Syntax error in query expression 'username LIKE '%%' AND Real_name LIKE '%%' AND DKArea LIKE '%%' AND Gender LIKE '%%' AND Haircolor LIKE '%%' AND Eyecolor LIKE '%%' AND Occupation LIKE '%%' AND Education1 LIKE '%%' or Education2 LIKE '%%' AND Location LIKE '%Denmark%' AND Yahoo LIKE '%%''.

- stadig :S

/forum/searchresults.asp, line 84
Avatar billede fennec Nybegynder
11. november 2004 - 15:18 #16
Prøv lige at udskrive din SQL inden du bruger den:

strSQL = "..."
response.write strSQL
response.end
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:18 #17
fennec >
Hvad er det helt præcist du mener?
Kan jeg ikke smide ">=" og "<=" om den samme form?

Btw.. Hvis det kan hjælpe.. så ser form'en sådan ud:
    <tr>
        <td>Højde mellem:<td>
        <td colspan="2">
        <input type="text" name="hoejdeminus" size="2"> og
        <input type="text" name="hoejdeplus" size="2">cm.
        </td>
    </tr>
    <tr>
        <td>Vægt mellem:</td>
        <td colspan="2">
        <input type="text" name="vaegtminus" size="2"> og
        <input type="text" name="vaegtplus" size="2"> kg.
        </td>
    </tr>
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:21 #18
fennec >
SELECT * FROM tblAuthor WHERE username LIKE '%%' AND Real_name LIKE '%%' AND DKArea LIKE '%%' AND Gender LIKE '%%' AND Haircolor LIKE '%%' AND Eyecolor LIKE '%%' AND Occupation LIKE '%%' AND Education1 LIKE '%%' or Education2 LIKE '%%' AND Location LIKE '%Denmark%' AND Yahoo LIKE '%%' AND Height >= %1% AND Height <= %1% AND Weight >= %% AND Weight <= %%

- er hvad den udskriver..
Jeg skrev dog kun en værdi i Height
Avatar billede fennec Nybegynder
11. november 2004 - 15:22 #19
Jo, men der skal være et indput til SQL sætningen, da det er tal. Ellers skal du til at tjekke for om der er indtastning.
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:24 #20
Oh.. Men man skal jo bare kunne lade felterne stå tomme, og den så bare udskriver alle's vægt.. hvis du forstår? :)
Avatar billede fennec Nybegynder
11. november 2004 - 15:24 #21
Så skal det være sådan her:

strSQL = "SELECT * FROM tblAuthor WHERE username LIKE '%"&request.form("soegbrugernavnfelt")&"%' "&_
    "AND Real_name LIKE '%"&request.form("soegnavnfelt")&"%' "&_
    "AND DKArea LIKE '%"&request.form("omraadesoeg")&"%' " &_
    "AND Gender LIKE '%"&request.form("koen")&"%' " &_
    "AND Haircolor LIKE '%"&request.form("haarfarve")&"%' " &_
    "AND Eyecolor LIKE '%"&request.form("oejenfarve")&"%' " &_
    "AND Occupation LIKE '%"&request.form("jobsoeg")&"%' " &_
    "AND (Education1 LIKE '%"&request.form("uddsoeg")&"%' " &_
    "or Education2 LIKE '%"&request.form("uddsoeg")&"%') " &_
    "AND Location LIKE '%"&request.form("landsoeg")&"%' " &_
    "AND Yahoo LIKE '%"&request.form("stilling")&"%' "
if trim(request.form("hoejdeminus")) <> "" then strSQL = strSQL & "AND Height >= "&request.form("hoejdeminus")&" "
if trim(request.form("hoejdeplus")) <> "" then strSQL = strSQL & "AND Height <= "&request.form("hoejdeplus")&" "
if trim(request.form("vaegtminus")) <> "" then strSQL = strSQL & "AND Weight >= "&request.form("vaegtminus")&" "
if trim(request.form("vaegtplus")) <> "" then strSQL = strSQL & "AND Weight <= "&request.form("vaegtplus")&" "
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:29 #22
Nu finder den overhovedet ikke noget.. hvis jeg evt. søger på et navn (soegnavnfelt) - som virkede før..
Avatar billede fennec Nybegynder
11. november 2004 - 15:31 #23
Hvordan ser den SQL så ud, hvis du udskriver den???
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:36 #24
Hvis jeg ikke skriver noget i hoejdeminus, hoejdeplus osv. udskriver den:
SELECT * FROM tblAuthor WHERE username LIKE '%da%' AND Real_name LIKE '%%' AND DKArea LIKE '%%' AND Gender LIKE '%%' AND Haircolor LIKE '%%' AND Eyecolor LIKE '%%' AND Occupation LIKE '%%' AND (Education1 LIKE '%%' or Education2 LIKE '%%') AND Location LIKE '%Denmark%' AND Yahoo LIKE '%%'

Hvis jeg udfylder dem skriver den:
SELECT * FROM tblAuthor WHERE username LIKE '%%' AND Real_name LIKE '%%' AND DKArea LIKE '%%' AND Gender LIKE '%%' AND Haircolor LIKE '%%' AND Eyecolor LIKE '%%' AND Occupation LIKE '%%' AND (Education1 LIKE '%%' or Education2 LIKE '%%') AND Location LIKE '%Denmark%' AND Yahoo LIKE '%%' AND Height >= 10 AND Height <= 200 AND Weight >= 10 AND Weight <= 200
Avatar billede fennec Nybegynder
11. november 2004 - 15:46 #25
Det se rigtigt ud....
Og der er også en, der passer på søge kriterierne??
Avatar billede pixelboxdk Nybegynder
11. november 2004 - 15:52 #26
Ja.. Det er der - username'et er: "Daniel" - så den skulle jo gerne finde det.
Avatar billede fennec Nybegynder
11. november 2004 - 16:28 #27
Hvad sker der, hvis du slet indtaster nogen søge kriterier??? Og hvordan ser den SQL ud??
Avatar billede pixelboxdk Nybegynder
12. november 2004 - 13:41 #28
Hvis jeg fjerner ( og ) omkring "or" sætningen virker alle søge-funktionerne fint - udover hoejdeminus, hoejdeplus, vaegtminus og vaegtplus. Men hvis ( og ) er der, udskriver den intet.
Avatar billede fennec Nybegynder
15. november 2004 - 08:21 #29
Hvordan skal den OR opfattes???
1. Er det Education1 ELLER Education2.
2. Rr det den ene mængde (Real_name, DKArea...) ELLER den anden (Location, Yahoo...)
Avatar billede pixelboxdk Nybegynder
22. november 2004 - 17:10 #30
Jeg har formen 'oddsoeg', som skal søge i felterne 'Education1' og 'Education2' :)
Avatar billede fennec Nybegynder
23. november 2004 - 08:34 #31
Så skal parentesen være der, ellers opfatter den det som mængder. AND er vigtigere end OR, så alle AND bliver kørt først. Den uskrevne regel er derfor altid at have parenteser med, når man bruger OR. Tjek lige dette eks:
... where name='fennec' AND expBruger='yes' OR ProMenber='yes'

Hvis man bruger den som den er, finder den alle dem hvor navnet er 'fennec' og expBruger er 'yes' og alle dem hvor ProMenber er 'YES'. Den opfatter det altså som:
... where (name='fennec' AND expBruger='yes') OR ProMenber='yes'

Men det jeg faktisk ville have var:
... where name='fennec' AND (expBruger='yes' OR ProMenber='yes')
Avatar billede pixelboxdk Nybegynder
01. februar 2005 - 09:33 #32
Tak for hjælpen fennec - du må gerne oprette et svar :)
Avatar billede fennec Nybegynder
01. februar 2005 - 09:54 #33
.o) <-- One Eyed Jack
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