Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:20 Der er 30 kommentarer og
1 løsning

søgning med checkbox

Jeg har to checkboxe, med værdien "DVD" og "VHS". Nu vil jeg udfra hvilke der er markeret trække dem udfra databasen der er af typen DVD eller VHS (bestemt ud fra en kollone i db'en)
Nogen der har en god løsning på det?
Avatar billede criterius.dk Nybegynder
07. august 2002 - 11:23 #1
<%
valgtmedie = request.form("medie")

sql = "select * from tabel where medie = valgtmedie"
%>

Ikke testet - taken from the top of my head!
Avatar billede tmceu Praktikant
07. august 2002 - 11:24 #2
Hvis en checkbox er markeret i formen, vil du kunne se den i Request.Form("FeltNavn"), hvis ikke eksisterer den ikke. Så du kan eks. lave et check på dette og dynamisk udvide dit SQL statement.

strSQL = "SELECT * FROM Tabel"

If Request.Form("FeltNavn") <> "" Then
strSQL = strSQL & " WHERE VHS = 'J'"
End If
Avatar billede tmceu Praktikant
07. august 2002 - 11:27 #3
Lidt pænere kunne det eks. være noget i denne stil:

strSQL = "SELECT * FROM Tabel"

If Request.Form("VHS") <> "" Then
strWHERE = " WHERE VHS = 'J'"
End If

If Request.Form("DVD") <> "" Then
If strWHERE = "" Then
  strWHERE = " WHERE DVD = 'J'"
Else
  strWHERE = strWHERE & " AND VHS = 'J'"
End If
End If

strSQL = strSQL & strWHERE
Avatar billede Slettet bruger
07. august 2002 - 11:27 #4
Vi skal nok se noget af din kode.

Hvad hedder checkboksene? Må man gerne kunne markere begge på samme tid?

Men...vi går ud fra at de hedder vhs og dvd (smart ikke?)



If Request.Form("vhs") <> "" Then
strQuery = "OR feltnavn = 'vhs'"
End If

If Request.Form("dvd") <> "" Then
strQuery = strQuery & "OR feltnavn = 'dvd'"
End If

strQuery = "SELECT * FROM tabelnavn WHERE id < 0" & strQuery

Dette giver en query der først beder om alle poster med en id lavere end 0. Dette er der ingen der har, men det er en slamkode metode til at kunne bruge vores OR sætninger, alt efter hvor mange der er krydset af.

Prøv og se om det ikke virker. Jeg har ikke testet det.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:30 #5
begge mine checkboxe hedder "format" og har value "VHS" og "DVD"
Og de skal begge kunne markeres. criterius.dk giver nemlig ingen resultater hvis begge er markeret
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:32 #6
er der ikke noget med man kan bruge IN ?
Avatar billede Slettet bruger
07. august 2002 - 11:34 #7
If Request.Form("vhs") <> "" Then
strQuery = "OR feltnavn = 'vhs'"
End If

If Request.Form("dvd") <> "" Then
strQuery = strQuery & "OR feltnavn = 'dvd'"
End If

strQuery = "SELECT * FROM tabelnavn WHERE id < 0" & strQuery

Hvis det er checkbokse skal de have forskellige navne. Ellers kan du ikke krydse begge af på en gang, da den så ikke kan finde ud af det.

Jeg vil foreslå at kalde den ene for format1 og den anden format2

If Request.Form("format1") <> "" Then
strQuery = "OR feltnavn = 'VHS'"
End If

If Request.Form("format2") <> "" Then
strQuery = strQuery & "OR feltnavn = 'DVD'"
End If

strQuery = "SELECT * FROM tabelnavn WHERE id < 0" & strQuery

Har du 1 felt i din database der kan indeholde enten DVD eller VHS? Eller har du 2 felter, der hedder DVD og HVS der så kan have en værdi på 1 eller 0?
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:35 #8
jeg er ikke meget for jeres (el_barto & tmceu) metode. Næste opgave er genre og der er en del checkboxe...
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:36 #9
el_barto >> ja, men problemet er bare at det giver en helveds masse validering, og jeg ved at man kan bruge IN. Kan bare ikke få det til at virke
Avatar billede tmceu Praktikant
07. august 2002 - 11:36 #10
Så vil de komme som en kommaseperaret streng i Request.Form("Format"). Så kan du eks. lave noget i denne stil:

If InStr(Request.Form("Format"), ",") Then
myArray = Split(Request.Form("Format"), ",")

For i = 0 To UBound(myArray)
  If strWHERE = "" Then
  strWHERE = " WHERE " & myArray(i) & " = 'J'"
  Else
  strWHERE = " AND " & myArray(i) & " = 'J'"
  End If
Next
End If

Du skal så have udvidet check'et for om den ene eller anden er udfyldt.

Det vil dog være noget nemmere at give dem forskellige navne og bruge mit eksempel fra før.
Avatar billede Slettet bruger
07. august 2002 - 11:37 #11
Heh...så navngiv dine checkbokse med genre1, genre2, genre3 osv. og lav en For løkke der kører dem igennem i Queryen.

Jeg er ikke så stiv i ASP endnu, men ville nemt kunne lave det i PHP ;)
Avatar billede tmceu Praktikant
07. august 2002 - 11:40 #12
Jo, du kan sagtens bruge IN hvis værdierne skal kontrolleres mod samme felt i databasen, det var bare ikke sådan jeg opfattede spørgsmålet :-)

Så kan du eks. lave et check for om der er komma i værdien fra formen, er der det kan du bruge IN, men du skal stadig have den enkelte værdi omsluttet af ' (pinger), da det er tekstværdier.

Jeg vil ikke skrive en masse kode til at illustrere det, da du jo ikke bryder dig om mine forslag.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:43 #13
det er ikke fordi jeg ikke bryder mig om din kode. Den er jo god nok. Jeg ville bare gerne forsøge at lave en kode uden så meget validering.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:43 #14
de skal begge kontroleres ud fra et felt, nemlig videoFormat
Avatar billede Slettet bruger
07. august 2002 - 11:44 #15
Min kode kræver ikke validering. Hvis man ikke har krydset noget som helst af søger den jo blot på id < 0 og giver ingen resultater.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:45 #16
den her har jeg støvet op fra et gammelt projekt:

WHERE mailid IN (" & Request.Form("deletemail") & ")")

den bruger blot en tal værdi, hvor jeg har skal bruge en tekstværdi
Avatar billede tmceu Praktikant
07. august 2002 - 11:50 #17
Præcist. Og derfor skal værdierne omsluttes af pinger.

myArray = Split(Request.Form("Format"), ",")

For i = 0 To UBound(myArray)
myVar = myVar & "'" & myArray(i) & "', "
Next

myVar = Left(myVar, (Len(myVar) - 2))

Efter dette burde myVar indeholde eks. "'VHS', 'DVD'" som kan bruges direkte i en IN.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 11:57 #18
Der opstod en Microsoft VBScript-kørselsfejl (0x800A0005)
Procedurekaldet eller argumentet er ugyldigt: 'left'

>>myVar = Left(myVar, (Len(myVar) - 2))
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:02 #19
der skal være noget i den, så jeg smed en if request.form("format") <> "" udenom
Avatar billede tmceu Praktikant
07. august 2002 - 12:03 #20
:-)
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:03 #21
når jeg vælger dem begge to nu, får jeg kun dem med formatet DVD frem.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:04 #22
why that?
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:06 #23
det ser sådan her ud indtil nu:

                  if Request.Form("Format") <> "" then

                  myArray = Split(Request.Form("Format"), ",")

                  For i = 0 To UBound(myArray)
                    myVar = myVar & "'" & myArray(i) & "', "
                  Next

                  myVar = Left(myVar, (Len(myVar) - 2))
                 
                  end if

                  Set rs = Server.CreateObject("ADODB.Recordset")
                  sql = "SELECT * FROM film WHERE videoID < 0"
                 
                  if Request.Form("format") <> "" then
                    sql = sql & "OR videoFormat IN (" & myVar & ")"
                  end if
                 
                  rs.open sql, FilmConn, 1, 3
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:07 #24
hjælper det hvis der lige kommer 45 point mere på?
Avatar billede tmceu Praktikant
07. august 2002 - 12:10 #25
Det forudsætter selvfølgelig at du har nogle poster der opfylder kriteriet?

Prøv evt. at udskrive dit SQL statement med

Response.Write sql
Response.End

Og se det færdige resultat. Det giver ofte en forklaring på problemet.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:12 #26
Jeg har oprette en netop med VHS og en med DVD. Jeg kan da også få dem frem, hvis jeg markere en ad gangen.
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:13 #27
sådan ser det ud: SELECT * FROM film WHERE videoID < 0 OR videoFormat IN ('DVD', ' VHS')
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:13 #28
forklaringen ligger måske i ' VHS'?
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:19 #29
volla! der skulle bare et flot Trim() foran myArray(i)
Avatar billede easysoft_studios Nybegynder
07. august 2002 - 12:33 #30
tmceu >> nu må du ikke misforstå mig, men du er dagens helt! hvis jeg var... nej lige meget :D

Det rocker for hård. Tak til jer alle sammen, men pointene går til tmceu, for det var lige præcis det jeg ledte efter.
Avatar billede tmceu Praktikant
07. august 2002 - 19:41 #31
Det var så lidt :-)
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