Avatar billede mazey Praktikant
13. juli 2014 - 19:25 Der er 1 kommentar og
1 løsning

Filtrere produktvisning med checkboxe og mysql

Hej eksperter,

Jeg er i gang med at lave en side, hvor det skal være muligt at kunne filtrere på en række produkter, og dette med hjælp fra checkboxe.

Som standard vil alle checkboxe være unchecked, og alle produkter vist.

Det skal så være således, at hvis en checkbox checkes, så laves en query til MySQL om kun at vise produkter med værdien fra checkboxen.

Indtil videre ser dette således ud:

<form action="" method="get">
<input type="hidden" name="page" value="product-list">
<label><input type='checkbox' name='type' value='1'>Kartofler</label>
<br/>
<label><input type='checkbox' name='type' value='2' >Rodfrugt</label>
<br/>
<label><input type='checkbox' name='type' value='3' >Løg</label>
<br/>
<input type="submit" value="Submit" />
</form>

/* PHP */

<?
if($_GET['type'] != ""){
$hent_maskiner = mysql_query("SELECT * FROM kategori WHERE id = $_GET[type]");
while($hent_maskiner2 = mysql_fetch_array($hent_maskiner)){
echo $hent_maskiner2[navn]."<br/>";
}
}
?>

Ovenstående giver et par problemer for mig.

1) Ved submit bliver URL'en rigtigt nok udvidet med variablen "type" og værdien for den checkbox, der er checked. Det samme gælder hvis jeg klikker 2 checkboxes, men problemet her er, at PHP MySQL'en kun registrerer den sidste variabel i URL'en - altså dem der ligger forud, vil ikke blive taget med, og resultatet er, at den kun parser sidste værdi fra "type" variablen.

2) Checkboxes uncheckes alle ved submit - de skal gerne beholde deres checked indstilling, så det er til at se, hvilke grupper der er valgt.

I tillæg skal det nævnes, at det hidden element i formen blot er til brug for, at havne med den rigtige URL, i det jeg har valgt GET metoden i formen.

Jeg håber nogen kan hjælpe mig.
Avatar billede Slater Ekspert
13. juli 2014 - 22:38 #1
Først er jeg nødt til at sige, det er ekstremt usikker kode at putte $_GET variabler direkte i en SQL query uden parametre. Hvis den fil skal online, bør du virkelig ændre det først.


Det sagt, så først og fremmest husk at PHP gerne vil have input names med brackets for at behandle dem som arrays. Altså name="type[]" i stedet for name="type".

Derefter burde du umiddelbart (uden jeg lige har testet det, og kan ikke helt huske det i hovedet) kunne få types i en kommasepareret streng med implode(',', $_GET['type']);

Når du har denne streng, som gerne skal ligne
1,2,3,4
- Så kan du putte den ind i SQL med "SELECT ... WHERE IN ($din_nye_streng)"

Så henter MySQL alle der har en af de typer.
Avatar billede mazey Praktikant
14. januar 2015 - 21:51 #2
Kom desværre ikke videre i dette projekt, og spørgsmålet lukkes.
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