PHP mysql simpel filter probleem
Ik heb een eenvoudig probleem waar ik niet uitkom na wat uren proberen.
Ik heb 5 checkboxes welke je kan selecteren, elk met zijn eigen waarde. (1-5)
In php loop ik door de array en weet ik welke checkboxes allemaal geselecteerd zijn.
Stel ik heb checkbox 1 en checkbox 3 geselecteerd dan heb ik de waardes 1 en 3.
Nu heb ik in mijn database een tabel score, ook 1-5. Ik wil op basis van wat de gebruiker aanvinkt de resultaten ophalen dus alle data waar score 1 of 3 is. Waar gaat het fout?
Dit is mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$qf = "";
if ($_SERVER['REQUEST_METHOD'] == 'POST' )
{
foreach($_POST['filtersterren'] as $selected)
{
if ($selected == 1)
{
$qf .= " AND score = 1 ";
}
if ($selected == 2)
{
$qf .= " AND score = 2 ";
}
if ($selected == 3)
{
$qf .= " AND score = 3 ";
}
if ($selected == 4)
{
$qf .= " AND score = 4 ";
}
if ($selected == 5)
{
$qf .= " AND score = 5 ";
}
}
if ($_SERVER['REQUEST_METHOD'] == 'POST' )
{
foreach($_POST['filtersterren'] as $selected)
{
if ($selected == 1)
{
$qf .= " AND score = 1 ";
}
if ($selected == 2)
{
$qf .= " AND score = 2 ";
}
if ($selected == 3)
{
$qf .= " AND score = 3 ";
}
if ($selected == 4)
{
$qf .= " AND score = 4 ";
}
if ($selected == 5)
{
$qf .= " AND score = 5 ";
}
}
.... WHERE id = 12 and score IN(1,3)
Ik krijg dus een array met de scores welke geselecteerd zijn, dit moet ik aan mijn bestaande query koppelen.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$in = implode(',', $_POST['filtersterren']);
$q = 'SELECT * FROM tabel WHERE id = '.$Id.' and score IN('.$in.') ORDER BY id DESC';
$in = implode(',', $_POST['filtersterren']);
$q = 'SELECT * FROM tabel WHERE id = '.$Id.' and score IN('.$in.') ORDER BY id DESC';
Nog een gotcha: niet-aangevinkte checkboxen worden ook niet verstuurd, dus het is helemaal niet gegarandeerd dat $_POST['filtersterren'] bestaat... Controleer hier dus op.
Gewijzigd op 11/02/2019 19:30:01 door Thomas van den Heuvel
Lalala SQL-injectie ...
In het stukje van @Ozzie is het verstandig om eerst het een en ander te valideren ja :).
Dat spreekt voor zich. Furio draait al wat jaartjes mee en ik ga er vanuit dat hij dat zelf ook wel weet.
Heel erg bedankt allemaal en met name Ozzie! Alles werkt naar behoren en uiteraard zal de user input gevalideerd worden.
Graag gedaan ;-)