Avatar billede killstun Nybegynder
27. september 2005 - 18:14 Der er 17 kommentarer og
1 løsning

Hent data fra access vha. checkboxe

Jeg har en side med 4 checkboxe. Lad os sige det er:

. flødeskum
. mælk
. sukker
. mel

Nu vil jeg kunne vælge 2 eller flere af disse produkter. Når jeg klikker submit, vil jeg sendes videre til en anden side, som kigger i databasen under kolonnen "ingredienser" og finder ud af hvilke poster som indeholder disse 2 ingredienser og viser disse poster.

fx.

. Boller (fordi de indeholder sukker og mel)
. Franskbrød (fordi det indeholder sukker og mel)
. Kanelsnegle (fordi det indeholder sukker og mel)

NB. Ingredienserne har jeg stående i samme kolonne (ingredienser) opdelt med et komma. Tager vi eksemplet med boller, står der under kolonnen ingredienser: sukker, mel, mælk osv.

Nogle der kan hjælpe mig med dette? Kan ikke rigtig hitte ud af hvordan begge sider skal laves, så jeg vil blive rigtig glad med eksempler på begge sider.
Avatar billede busschou Praktikant
27. september 2005 - 19:26 #1
Du kan i sql benytte LIKE operatoren til at finde noget som "ligner" et ord
fx
Select * From din_tabel Where ingredienser Like '%sukker%'
Procent tegnet betyder at du er ligeglad med hvad der står før og efter ordet
Så hvis du fx søger på
Select * From din_tabel Where ingredienser Like '%mælk%'
Så finder den også dem hvor der er "sødmælk" og "letmælk" fordi den matcher på mælk
Avatar billede busschou Praktikant
27. september 2005 - 19:28 #2
Det med chekboxene er der flere løsninger på
Du kan enten give dem forskellig name eller ens name
Hvis du giver dem forskelligt name, så er du umiddelbart nød til at spørge på hver enkelt checkbox for at se om den er valgt eller ej
Hvis du giver dem samme name så får du en lang liste med dem alle i, som du så kan splitte op
Jeg kan ikke huske om det er en komma eller + sepereret liste, og jeg kan heller ikke lige umiddelbart huske om en checkbox er "on" eller "true" (mener den er "on")
Men hvis du laver din form med method="get" til at starte med, så er det nemt at se hvad den sender med :o)
Avatar billede killstun Nybegynder
27. september 2005 - 21:08 #3
Thx busschou. Vender lige tilbage når jeg har afprøvet det.
Avatar billede killstun Nybegynder
27. september 2005 - 21:32 #4
Nu har jeg prøvet dette:

(form.asp)

<FORM action='naeste.asp' method='get' style='display:inline'>
<INPUT TYPE='CHECKBOX' NAME='indgredienser' VALUE='mel'>
<INPUT TYPE='CHECKBOX' NAME='indgredienser' VALUE='sukker'>
<INPUT TYPE='CHECKBOX' NAME='indgredienser' VALUE='floedeskum'>
<INPUT TYPE='CHECKBOX' NAME='indgredienser' VALUE='maelk'>
<INPUT TYPE='SUBMIT' VALUE='Find opskrift' onclick='get_check_value()'>

(naeste.asp)

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/opskrifter.mdb")
Conn.Open DSN
strSQL = "Select * From opskrifter where indgredienser =" & Request.querystring("indgredienser")
Set rs = Conn.Execute(strSQL)
Do While NOT rs.EOF
Response.write ("opskrift") & "<br />"
rs.MoveNext
Loop
Conn.Close
Set Conn = Nothing
%>

Men jeg får denne fejl:
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.
(Linie: strSQL = "Select *.....)

Denne fejl opstår hvis jeg vælger én indgrediens (i adresse linien står der http://127.0.0.1/naeste.asp?indgredienser=mel. Vælger jeg 2 indgredienser får jeg denne fejl (i adresse linien står der http://127.0.0.1/naeste.asp?indgredienser=mel&indgredienser=sukker):

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket "indgredienser =mel, sukker".
(fejl i samme linie)

NB. Kunne ikke rigtig finde ud af at anvende LIKE operatoren når Request.querystring anvendes. Kender heller ikke rigtig det der med "on" ell. "true" til en checkbox?
Avatar billede busschou Praktikant
27. september 2005 - 21:34 #5
fejlen med for få parametre skyldes som regel at man har angivet kolonnen forkert
Er du sikker på det hedder "indgredienser" ? og ikke "ingredienser"
Avatar billede busschou Praktikant
27. september 2005 - 21:36 #6
Den anden fejl er fordi du mangler ' omkring teksten, men men...
Du er nød til at bruge LIKE, for ellers står der jo
Select * From tabel Where ingredienser = 'mel, sukker'
og den finder ikke nogen med mindre den præcis står sådan i databasen
Avatar billede busschou Praktikant
27. september 2005 - 21:40 #7
når du har method="get"
Så må du kunne se oppe i adresselinjen hvordan det ser ud afhængig af om du har valgt een eller flere checkboxe, og om der står "on" og om de er kommasepererede eller plus sepererede
Dernæst skal du splitte dem op, for queystringen indeholder jo ikke ordet "mel" men "on", og det skal du så fortolke som "mel" ...hvis du kan følge mig
Avatar billede killstun Nybegynder
27. september 2005 - 22:04 #8
Kan godt se hvad du mener og alligevel ikke. Kan jeg få dig til at give eksempel på nedenstående to linier som de bør se ud (jeg er sikker på at kolonnen er navngivet korrekt, da jeg har kopieret navnet direkte fra Access):

<INPUT TYPE='CHECKBOX' NAME='indgredienser' VALUE='Mel'>Mel

&

strSQL = "Select * From opskrifter where indgredienser =" & Request.querystring("indgredienser")
Avatar billede busschou Praktikant
27. september 2005 - 22:48 #9
ok hos mig har jeg lige tjekket at jeg får en komma sepereret liste
Jeg huskede galt, tænkte på radio buttons
hvis du i din "naeste.asp" laver følgende
---
indhold = request.querystring("indgredienser")
if indhold <> "" then
  indholdArr = split(indhold,",")
  sql = "Select * From opskrifter Where "
  for t=0 to ubound(indholdArr)
    if t > 0 then
      sql = sql & " Or "
    end if
    sql = sql & " indgredienser Like '%"&indholdArr(t)&"%'"
  next
else
  sql = "Select * From opskrifter"
end if
Avatar billede busschou Praktikant
27. september 2005 - 22:50 #10
Jeg vil tro det kan gøres sådan, den laver din sql dynamisk, så hvis du senere laver flere checkboxe, ja så retter den sig selv ind, og hvis intet er valgt så vælger den alt.
Hvis du får en fejl så prøv lige at vedhæfte din sql ved at lave en response.write(sql)
Avatar billede killstun Nybegynder
28. september 2005 - 13:40 #11
Jeg får ikke nogen fejl, men bare en tom skærm? Jeg har lavet neaste.asp således:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/opskrifter.mdb")
Conn.Open DSN
indhold = request.querystring("indgredienser")
if indhold <> "" then
  indholdArr = split(indhold,",")
  sql = "Select * From opskrifter Where "
  for t=0 to ubound(indholdArr)
    if t > 0 then
      sql = sql & " Or "
    end if
    sql = sql & " indgredienser Like '%"&indholdArr(t)&"%'"
  next
else
  sql = "Select * From opskrifter"
end if
Conn.Close
Set Conn = Nothing
%>

Hvad mangler jeg?
Avatar billede busschou Praktikant
28. september 2005 - 15:23 #12
du mangler at udføre din sql
---
..
end if
Conn.Execute(sql)
Conn.Close
..
---
og hvis den så fejler så indsæt en "response.write sql" inden Conn.Execute
Avatar billede killstun Nybegynder
28. september 2005 - 17:22 #13
hmm, strange. Den kommer stadig ikke med et resultat. Ser således ud nu:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/vti_log/opskrifter.mdb")
Conn.Open DSN
indhold = request.querystring("indgredienser")
if indhold <> "" then
  indholdArr = split(indhold,",")
  sql = "Select * From opskrifter Where "
  for t=0 to ubound(indholdArr)
    if t > 0 then
      sql = sql & " Or "
    end if
    sql = sql & " indgredienser Like '%"&indholdArr(t)&"%'"
  next
else
  sql = "Select * From opskrifter"
end if
Conn.Execute(sql)
Conn.Close
Set Conn = Nothing
%>
Avatar billede killstun Nybegynder
28. september 2005 - 17:27 #14
Jeg jeg indføre "response.write sql" skriver den:

Select * From opskrifter Where indgredienser Like '%Mel%' Or indgredienser Like '% Sukker%'
Avatar billede busschou Praktikant
28. september 2005 - 21:23 #15
ja passer det ikke også?
Så burde den gerne finde dem hvor "Mel" indgår og dem hvor "Sukker" indgår
Avatar billede busschou Praktikant
28. september 2005 - 21:28 #16
hehe så først lige nu hvad du skrev, at den ikke kommer med noget resultat hehe
Jeg har kun vist hvordan du skulle få strikket din sql sammen, du skal selvfølgelig så lave en udskrift som du ønsker den, fx noget ala
---
..
set rs = conn.execute(sql)
do while not rs.eof
  response.write rs("opskrift")
  rs.movenext
loop
conn.close
..
Avatar billede killstun Nybegynder
28. september 2005 - 22:51 #17
Yes sir! Du en gutterman busschou. Nu fungere det :-) Du må lige lave et svar.
Avatar billede busschou Praktikant
29. september 2005 - 06:23 #18
oki med doki :o)
Godt det endelig virker
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