PHP mysql simpel filter probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

11/02/2019 17:51:21
Quote Anchor link
Beste forumleden,

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)
PHP script in nieuw venster Selecteer het PHP script
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
$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 ";
        }
    
    }
    


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $q = 'SELECT * FROM tabel WHERE id = '.$Id.' '.$qf.' ORDER BY id DESC';?>
 
PHP hulp

PHP hulp

05/11/2024 15:51:07
 
Ozzie PHP

Ozzie PHP

11/02/2019 17:58:52
Quote Anchor link
Probeer eens met de volgende syntax:

.... WHERE id = 12 and score IN(1,3)
 
Furio Scripting

Furio Scripting

11/02/2019 18:02:56
Quote Anchor link
Hi Ozzie, dan werkt het inderdaad!, thanks. Nog 1 vraagje hoe moet ik dit in de if else neerzetten?

Ik krijg dus een array met de scores welke geselecteerd zijn, dit moet ik aan mijn bestaande query koppelen.
 
Ozzie PHP

Ozzie PHP

11/02/2019 18:06:28
Quote Anchor link
Even op de gok ... in plaats van die foreach met al die ifjes ...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$in
= implode(',', $_POST['filtersterren']);

$q = 'SELECT * FROM tabel WHERE id = '.$Id.' and score IN('.$in.') ORDER BY id DESC';
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2019 19:29:37
Quote Anchor link
De reden waarom het eerder niet werkte was waarschijnlijk omdat een score niet tegelijkertijd meerdere verschillende waarden kan hebben. Dat is in wezen wat je in je eerste query afdwingt (AND score = 1 AND score = 2 et cetera). Die conditie zal nooit voldoen.

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
 
Rob Doemaarwat

Rob Doemaarwat

11/02/2019 19:31:07
Quote Anchor link
Lalala SQL-injectie ...
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2019 22:52:46
Quote Anchor link
In het stukje van @Ozzie is het verstandig om eerst het een en ander te valideren ja :).
 
Ozzie PHP

Ozzie PHP

11/02/2019 22:55:00
Quote Anchor link
Dat spreekt voor zich. Furio draait al wat jaartjes mee en ik ga er vanuit dat hij dat zelf ook wel weet.
 
Furio Scripting

Furio Scripting

11/02/2019 23:52:03
Quote Anchor link
Heel erg bedankt allemaal en met name Ozzie! Alles werkt naar behoren en uiteraard zal de user input gevalideerd worden.
 
Ozzie PHP

Ozzie PHP

12/02/2019 00:44:15
Quote Anchor link
Graag gedaan ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.