Kolom bevat 1 van de checkbox waarde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donovan -

Donovan -

13/04/2019 18:30:58
Quote Anchor link
Hoi!

Ik heb op een pagina een 8 tal checkboxen staan met kleuren. Voor het gemak heb ik die in een array staan om ze gecheckt te houden zodra ze daar in staan.

In een tabel heb ik een set-kolom genaamd 'Kleuren', om 1 of meerdere waardes van die 8 kleuren te selecteren en daar in een rij te plaatsen, die niet afwijken van die 8. Wat ik wil is als bijvoorbeeld "Geel" is geselecteerd, dan wil ik alle rijen die in ieder geval "Geel" hebben als waarde daar. Heb een 2 tal opties geprobeerd.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$kleuren = array();    
$filter_c = " Kleuren ".implode(" LIKE ",$kleuren)." ";
// OF
$filter_c = " Kleuren IN (".implode(", ",$kleuren).") ";        


Echter krijg ik bij beiden een foutmelding: Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

Ik heb nog een ander deel van de query erop staan, dat werkt prima, zolang ik maar het deel van de $filter_c eruit laat. Daar ligt het dus niet aan. Hoe kan ik dit het handigst oplossen?

Dank!
Gewijzigd op 14/04/2019 17:15:11 door Donovan -
 
PHP hulp

PHP hulp

22/04/2019 23:05:04
Honeypot
 
- Ariën -
Beheerder

- Ariën -

13/04/2019 18:48:54
Quote Anchor link
Laat je relevante code eens zien.
Ik vermoed een foute query.
 
Donovan -

Donovan -

13/04/2019 20:23:05
Quote Anchor link
- Ariën - op 13/04/2019 18:48:54:
Laat je relevante code eens zien.
Ik vermoed een foute query.


Das best gek. Zonder het kleuren deel werkt het perfect namelijk. Ik heb hier alleen nog niet $filter_C in de SQL gezet, omdat die dus niet werkt.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
    function product_filter()
    {
    
        require_once("dbcontroller.php");
        $db_handle = new DBController();
    
        if ($_SERVER['REQUEST_METHOD'] == 'POST')
        {

            $filter_r = array();
            if(!empty($_POST['kleuren']))
            {
    
                $kleuren = array();
                foreach ($_POST['kleuren'] as $kleur)
                {

                    $kleuren[] = $kleur;
                }

                
                // $filter_c = " Kleuren IN (".implode(", ",$kleuren).") ";
                // $filter_c = " Kleuren ".implode(" LIKE ",$kleuren)." ";

            }
            
            else {$filter_c = "";}
            
            if(!empty($_GET['categorie']))
            {

                $filter_r[] = " categorie = '".$_GET['categorie']."' " ;
            }

            if($_POST['MinP'] > -1) {
                $filter_r[] = " prijs_nieuw BETWEEN ".$db_handle->quote($_POST['MinP']) . " AND " . $db_handle->quote($_POST['MaxP'])." ";  
            }

            if($_POST['MinL'] > -1) {
                $filter_r[] = " lengte BETWEEN " .$db_handle->quote($_POST['MinL']) . " AND " . $db_handle->quote($_POST['MaxL'])." ";
            }

            if($_POST['MinH'] > -1) {
                $filter_r[] = " hoogte BETWEEN ".$db_handle->quote($_POST['MinH']) . " AND " . $db_handle->quote($_POST['MaxH'])." ";
            }

            if($_POST['MinB'] > -1) {
                $filter_r[] = " breedte BETWEEN ".$db_handle->quote($_POST['MinB']) . " AND " . $db_handle->quote($_POST['MaxB'])." ";
            }

            if($_POST['MinW'] > -1) {
                $filter_r[] = " gewicht BETWEEN ".$db_handle->quote($_POST['MinW']) . " AND " . $db_handle->quote($_POST['MaxW'])." ";
            }


            if($_POST['Sorteren'] > 0) {
                $filter_s;
              if ($_POST['Sorteren'] == "1")
              {

                $filter_s = " ORDER BY naam ASC ";
              }

              if ($_POST['Sorteren'] == "2")
              {

                $filter_s = " ORDER BY naam DESC  ";
              }

              if ($_POST['Sorteren'] == "3")
              {

                $filter_s = " ORDER BY prijs_nieuw ASC ";
              }

              if ($_POST['Sorteren'] == "4")
              {

                $filter_s = " ORDER BY prijs_nieuw DESC ";
              }
            }
    

        if (count($filter_r) > 0)
        {
    
          $product_array = $db_handle->runQuery('SELECT * FROM producten WHERE '.implode("AND",$filter_r).$filter_s);
        }
    }
[
/code]
 
Adoptive Solution

Adoptive Solution

13/04/2019 21:42:55
Quote Anchor link
Zou het zo moeten?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$filter_c
= " AND Kleuren IN (".implode(", ",$kleuren).") ";
// OF DEZE
$filter_c = " AND Kleuren ".implode(" LIKE ",$kleuren)." ";

// DAN DEZE QUERY

'SELECT * FROM producten WHERE ' . implode("AND",$filter_r) . $filter_c . $filter_s

?>


Handig is misschien om de query eerst samen te stellen in een variable en die variable te echo'en zodat je kan zien hoe het eruit ziet. Dan hoef je nooit verbaasd te zijn.
 
- SanThe -

- SanThe -

13/04/2019 22:05:10
Quote Anchor link
`
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$filter_c
= " AND Kleuren IN ('".implode("', '",$kleuren)."') ";
?>

Die LIKE gaat sowieso niet werken lijkt mij.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2019 02:39:07
Quote Anchor link
Zouden er geen spaties voor en na de AND moeten staan in die implode? Dump anders de SQL-string eens voordat je de query uitvoert.
 
Donovan -

Donovan -

14/04/2019 15:56:04
Quote Anchor link
Adoptive Solution op 13/04/2019 21:42:55:
Zou het zo moeten?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$filter_c
= " AND Kleuren IN (".implode(", ",$kleuren).") ";
// OF DEZE
$filter_c = " AND Kleuren ".implode(" LIKE ",$kleuren)." ";

// DAN DEZE QUERY

'SELECT * FROM producten WHERE ' . implode("AND",$filter_r) . $filter_c . $filter_s

?>


Handig is misschien om de query eerst samen te stellen in een variable en die variable te echo'en zodat je kan zien hoe het eruit ziet. Dan hoef je nooit verbaasd te zijn.


Ik echo'm nu via

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
        if(isset($_POST['kleuren'])){ echo "<pre>Kleuren filter ".print_r($kleuren, true)."</pre>";}
        echo "----------------------------------------------------------------------------------------------------";
        echo "SQL = ".('SELECT * FROM producten WHERE '.implode("AND",$filter_r) . $filter_c . $filter_s);


Toevoeging op 14/04/2019 17:16:07:

- SanThe - op 13/04/2019 22:05:10:
`
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$filter_c
= " AND Kleuren IN ('".implode("', '",$kleuren)."') ";
?>

Die LIKE gaat sowieso niet werken lijkt mij.


Oke dit geeft in ieder geval geen foutmelding(en). Alleen als ik nu de kleur "groen" aanvink welke ik niet heb, krijg ik nog steeds alle producten te zien?>
 



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.