Avatar billede nybroe Nybegynder
03. marts 2005 - 19:47 Der er 18 kommentarer og
2 løsninger

Multiple select

Jeg har en multiple dropdown-boks, hvor man kan vælge flere værdier. (Den udtrækker fra én tabel). Ved submit kommer man så over til en anden side, hvor der i en anden tabel skal findes de værdier som man har valgt og derefter skrive nogle andre data ud. Hvordan selecter jeg fra databasen ud fra hvad der er valgt?
Avatar billede nybroe Nybegynder
03. marts 2005 - 22:09 #1
Min select-boks ser sådan ud som HTML:

<select multiple size="6" id="select" name="Kategori">
<option value="1000">Kategori 1</option>
<option value="1001">Kategori 2</option>
<option value="1002">Kategori 3</option>
<option value="1007">Kategori 4</option>
<option value="1001">Kategori 5</option>
<option value="1002">Kategori 6</option>
<option value="1003">Kategori 7</option>
<option value="1004">Kategori 8</option>
<option value="1005">Kategori 9</option>
</select>

Lad os sige, at man vælger Kategori 2 og 7, så skal den tage værdierne: 1001 og 1003 med og udtrække de data, der er i en anden tabel med disse tal som primærnøgle.

Men hvordan laver jeg SQL-sætningen, der hvor jeg vil udtrække?
Hjææælp...
Avatar billede ellebaek Nybegynder
03. marts 2005 - 22:21 #2
hmm...

mon ikke noget i stilen af dette kan gøre det:
<%
form = request.form("Kategori")
myarr = split(form, ", ")

sql = "SELECT * FROM tabel"
if UBound(myarr) > 0 then
sql = sql & " WHERE kategori = " & myarr(0)
if UBound(myarr) > 1 then
for i = 1 to UBound(myarr)
sql = sql & " OR kategori = " & myarr(i)
next
end if
end if
%>

Så burde du have en sql klar til brug...
Avatar billede ellebaek Nybegynder
03. marts 2005 - 22:25 #3
ja, tilsyneladende virker det i hvert fald..
Min test giver det rigtige resultat.
Avatar billede eagleeye Praktikant
03. marts 2005 - 22:40 #4
eller man kan bruge in:

sql = "select * from tbl"
if request.form("Kategori") <> "" then sql = sql & " where kategori in (" & request.form("Kategori") & ")"
Avatar billede nybroe Nybegynder
03. marts 2005 - 22:43 #5
Den skriver underligt nok alle kategorier ud lige meget hvad man vælger. Jeg havde også prøvet at lave et array, men den gjorde det samme - så jeg ved ikke hvad der går galt????
Avatar billede eagleeye Praktikant
03. marts 2005 - 22:45 #6
Har du method="post" i din første form ?
Hvis ikke så prøv at rette request.form("xxx") til request("xxx")
Avatar billede nybroe Nybegynder
03. marts 2005 - 22:52 #7
Jeg har imidlertid method="post" på....
Avatar billede eagleeye Praktikant
03. marts 2005 - 22:53 #8
Så prøv at uskrive request.form("Kategori") og se den indeholder de kategorier der er valgt eller udskrive SQL sætningen for at se den bliver bygget rigtig ud.
Avatar billede ellebaek Nybegynder
03. marts 2005 - 22:59 #9
nå ja eagle ;-)
Så langt tænkte jeg ikke...
men meget mystisk det ikke virker som det burde, jeg har ikke nogen problemer..
Avatar billede ellebaek Nybegynder
03. marts 2005 - 23:02 #10
prøv at udskrive din sql før du laver kaldet til databasen..
response.write(sql)
Avatar billede nybroe Nybegynder
03. marts 2005 - 23:03 #11
Det ser ud til, at det er i sql-sætningen, at der er noget galt. Men jeg tror, at jeg siger tak for i dag til de 2 herrer. Jeg vender tilbage med points og evt. spørgsmål senere ...
Avatar billede ellebaek Nybegynder
03. marts 2005 - 23:12 #12
skal vi så ligge et svar :=?
Avatar billede nybroe Nybegynder
05. marts 2005 - 13:38 #13
Det virker desværre ikke helt endnu....
Avatar billede nybroe Nybegynder
05. marts 2005 - 13:53 #14
Det er meget underligt for, det er kun hvis jeg vælger 3 eller derover i multi-select boksen, at det virker.

Hvis jeg kun vælger 1, udskrives sql-sætningen som
SELECT * FROM tbKatagori  (og dermed udskrives alt)

Hvis jeg vælger 2, tages kun den ene værdi med
SELECT * FROM tbKatagori where Katagori = 1000

Men hvis jeg vælger 3 udskrives følgende:
SELECT * FROM tbKatagori WHERE Katagori = 1000 OR Katagori = 10007 OR Katagori = 1001

Hvordan kan den det?

Det er ikke sikkert at væriderne findes i den anden tabel. Men hvis de gør skal  overskriften til den enkelte kategorien udskrives og så noget indhold fra et andet felt nedenunder. Hvis en eller flere af kategorierne ikke findes skal den skrive overskriften til kategorien og derunder "Ingen poster fundet".

Jeg har indsat
if not rs.eof then
...
else
response.Write "Ingen poster fundet"

Men sætningen skrives kun en gang, selv om der er flere poster, der ikke findes. Den skal skrive det under hvert enkelt. Hvor mon jeg kan sætte dette ind?
Avatar billede nybroe Nybegynder
05. marts 2005 - 14:25 #15
Hvis jeg sletter linien:
if UBound(myarr) > 0 then

Og bare skriver:
sql = "SELECT * FROM tbKategori"
sql = sql & " WHERE Kategori = " & myarr(0)

Så er det kun, når jeg vælger 2 værdier, at det ikke virker. Ved 1, 3, 4 og derover virker det...?
Avatar billede nybroe Nybegynder
05. marts 2005 - 14:39 #16
Så er vi ved at være der med den første problemstilling:

sql = "SELECT * FROM tbKategori"
sql = sql & " WHERE Kategori = " & myarr(0)
if UBound(myarr) > 0 then
for i = 1 to UBound(myarr)
sql = sql & " OR Kategori = " & myarr(i)

Dette virker hos mig, men ellebaek du har ledt mig godt på vej.. undrer mig dog lidt over, at din version virker???

Jeg arbejder lige lidt videre med det andet.... (jeg skal nok huske pointene :)
Avatar billede nybroe Nybegynder
06. marts 2005 - 10:14 #17
Læg venligst et svar, så er der point til jer begge.

Jeg har oprettet et nyt spøgsmål med en ny problemstilling her(http://www.eksperten.dk/spm/597329). Spørgsmålet relaterer sig til ovenstående, så det kan være, at I har gode forudsætninger for at kunne hjælpe.
Avatar billede eagleeye Praktikant
06. marts 2005 - 10:21 #18
ok du kan prøve at lave koden såødan her:


form = request.form("Kategori")
myarr = split(form, ",")

sql = "SELECT * FROM tabel"
for i = 1 to UBound(myarr)
  if sqlWhere <> "" then sqlWhere = sqlWhere " OR "
  sqlWhere = sqlWhere & " kategori = " & trim(myarr(i))
next
if sqlWhere <> "" then sql = sql & " WHERE " & sqlWhere
Avatar billede ellebaek Nybegynder
06. marts 2005 - 18:10 #19
et svar her også så..
Avatar billede ellebaek Nybegynder
06. marts 2005 - 18:11 #20
hehe, og jo, er måske lidt mærkeligt at den virker, men det gør den faktisk, også selvom jeg kun vælger 1 eller 2 fra boxen, og faktisk også helt uden noget valg..
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