Avatar billede duqe Nybegynder
12. juni 2008 - 12:07 Der er 8 kommentarer og
1 løsning

Søge/filter funktion

Hej

Jeg har en tabel i min MySQL database hvor der er indlagt en masse produktanmeldelser. MySQL tabellen består af 12 rækker. De to første er henholdsvis overskrift og selve indholdet af anmeldelsen. De resterne 10 er en form for "ekstra featueres".
Ekstra features kan f.eks. være: Har denne maskine MP3-afspiller indbygget? Ja/nej (hvilket bliver til 1 eller 0 i mysql tabllen)

Et eksempel kunne være:
Overskrift: Maskine nr 3
Anmeldelse: Super maskine... bla bla bla...

TMC: Ja
MP3: Nej

o.s.v.

Jeg har en side (testreviews.php) hvor alle anmeldelserne bliver listet ved hjælp af en løkke. Min kode ser sådan ud:

$res = mysql_query("SELECT * FROM testreviews ORDER BY dato DESC");
while($array = mysql_fetch_assoc($res)){ her udskrives listen $array['overskrift'] }

(der står selvfølgelig mere end bare overskriften i listen, men eksemplet et lavet sådan for at holde koden simpel og overskuelig)

Nu vil jeg så gerne lave en søge/filter funktion hvor jeg, ved hjælp af checkbokse, kan krydse af at jeg KUN ønsker maskiner med mp3-afspiller indbygget. Jeg har forsøgt mig med følgende metode:

if ($_POST['tmc'] == on) { $tmc = 1; } else { $tmc = 0; }
$res = mysql_query("SELECT * FROM testreviews WHERE mp3='$mp3' ORDER BY dato DESC");
while($array = mysql_fetch_assoc($res)){ her udskrives listen }

Men hvis jeg så ønsker at se alle maskiner (uden at sætte nogle kryds i checkbokse/ekstra features), kan jeg jo kun se de maskiner UDEN mp3, og det ønsker jeg ikke, da maskinerne på listen godt må have ekstra features uden at de er krydsede af i checkboksene.

Håber i forstår mit spørgsmål og har  et hint eller to :)
På forhånd tak
Avatar billede -zonic- Nybegynder
12. juni 2008 - 12:27 #1
du løser den vel bare med et par if sætninger...

if($mp3 == 1) {
  $mp3 = 'AND $mp3=1';
}
if($tmc == 1) {
  $tmc = 'AND $tmc=1';
}


SELECT * FROM testreviews WHERE 1=1 $mp3 $tmc ORDER BY dato DESC");
Avatar billede duqe Nybegynder
12. juni 2008 - 12:32 #2
-zonic- > Jamen er mp3 og tmc så ikke hel tiden sat til 1?
Nu har min filterfunktion ikke rigtig nogen indflydelse på hvad der bliver udskrevet. Den udskriver bare hele listen, ligemeget hvilke checkbokse jeg krydser af.
Avatar billede duqe Nybegynder
12. juni 2008 - 12:39 #3
zonic - jeg får følgende fejl når jeg prøvet dit script:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/nav-user.com/testreviews.php on line 44
Avatar billede -zonic- Nybegynder
12. juni 2008 - 12:51 #4
jeg er ikke sikker på at jeg har forstået problematikken så :)

jeg tror  ville bygge det op således at når du submitter dine checkboxe så ser din sql ud således.:

når din checkbox er checked så er din value på $din_mp3=1


if(!$din_mp3) {
  $din_mp3 = 0;
}

osv


SELECT * FROM testreviews WHERE $mp3>=$din_mp3 AND $tmc>= $din_tmc ORDER BY dato DESC");
Avatar billede -zonic- Nybegynder
12. juni 2008 - 12:54 #5
hov der skal jo nok lige fjernes nogle $ hvor det er de felter i db'en du henviser til ;)

SELECT * FROM testreviews WHERE mp3 >= $din_mp3 AND tmc >= $din_tmc ORDER BY dato DESC");
Avatar billede duqe Nybegynder
12. juni 2008 - 13:01 #6
Aha. "Større end eller lig med" >= tegnet hjalp mig :)
Min kode ser altså stadigvæk ud som i første indlæg, men er nu bare blevet til >= istedet for =, og det løste problemet. Tak for hjælpen - smider du et svar? :)
Avatar billede duqe Nybegynder
12. juni 2008 - 13:11 #7
Ekstra spørgsmål: Hvor mange gange må jeg bruge AND i min mysql_query ? (select * from osv.). Når jeg bruger den tre gange får jeg en fejl

Koden ser sådan ud:
("SELECT * FROM testreviews WHERE tmc>='$tmc' AND mp3>='$mp3' AND wide>='$wide' ORDER BY dato DESC");
Avatar billede duqe Nybegynder
12. juni 2008 - 13:13 #8
Ups.. Se bare bort fra mit sidste spørgsmål.. Det var bare en stavefejl der gjorde det :)
Avatar billede -zonic- Nybegynder
12. juni 2008 - 17:59 #9
hehe..ok :)

jamen godt du kunne bruge det til noget :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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