Query opmaken aan de hand van checkboxes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dave L

Dave L

13/09/2011 11:16:23
Quote Anchor link
Ik krijg het maar niet voor elkaar om een zoekopdracht te genereren die op een ingevulde term zoekt. DAN moet hij zoeken in bepaalde kollommen in een MySQL database aan de hand van de geselecteerde checkboxes.

Ik heb 1 input field: zoekterm
Ik heb 3 checkboxes genaamd: merk,type,bouwjaar

Wat is een slimme manier om mijn query op te bouwen aan de hand van de selecties ?

Ik heb nu dus 3 queries gemaakt. Deze worden uitgevoerd indien de corresponderende checkbox is aangevinkt. Per aangevinkte checkbox dus een query. Maar hier loop ik dus tegen het probleem aan dat hij uiteraard dubbele dingen vind.

Voorbeelden van de queries:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql_merk
= mysql_query("SELECT merk, type, modeljaar FROM kavels WHERE merk LIKE '%".$zoekterm."%'");

$sql_type = mysql_query("SELECT merk, type, modeljaar FROM kavels WHERE type LIKE '%".$zoekterm."%'");

$sql_bouwjaar = mysql_query("SELECT merk, type, modeljaar FROM kavels WHERE modeljaar LIKE '%".$zoekterm."%'");
?>


Ik kom er maar niet uit...

Toevoeging op 13/09/2011 11:23:08:

Ok. heb een tijdelijke oplossing. Ik trek nu alleen de id's van de gevonden objecten uit de database. Deze zet ik in een array. Deze array controleer ik op duplicaten en verwijder eventuele duplicaten.

Dan nieuwe query draaien met de waardes uit de 'cleane' array. Dit is natuurlijk niet echt een top oplossing, maar werkt wel. Alleen uit het oogpunt van niet teveel queries draaien is dit een nogal matige oplossing...
 
PHP hulp

PHP hulp

29/03/2024 08:30:37
 
Remco van Arkelen

Remco van Arkelen

13/09/2011 11:29:54
Quote Anchor link
Controleer eerst welke checkboxen zijn aangevinkt en stel op basis daarvan een "WHERE clause" op, beetje pseudo en ik zou wel nadenken over wat controles, beveiliging en een iets generiekere oplossing:

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
<?php
$wheres
= array();
if( isset( $_POST['checkbox_merk'] ) )
{

  $wheres[] = 'merk LIKE %zoekterm%';
}


if( isset( $_POST['checkbox_type'] ) )
{

  $wheres[] = 'type LIKE %zoekterm%';
}


if( isset( $_POST['checkbox_bouwjaar'] ) )
{

  $wheres[] = 'bouwjaar LIKE %zoekterm%';
}


// Plak alle voorwaarden aan elkaar
$where = implode( ' OR ', $wheres );

// En vervolgens
SELECT
  merk,
  type,
  modeljaar
FROM kavels
WHERE
(
  $where
)
?>
 
Dave L

Dave L

13/09/2011 12:16:17
Quote Anchor link
Bedankt man! Was ook al aan het denken in de richting van query aanvulling met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(isset( $_POST['merk'] )) {

    $query .= "OR merk LIKE %zoekterm%";
}

?>


Maar jou manier is toch net ff iets strakker en minder werk. SUPER. Bedankt man. Pluim voor jou! Zat echt vast op dit stuk!

Hier mijn volledige 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
32
33
34
35
36
37
38
39
40
41
<?php
if($_SERVER['REQUEST_METHOD'] === "POST" && isset($_POST['zoeken']))    {
    $zoekfunctie = true;
    $zoekterm = mysql_real_escape_string($_POST['zoekterm']);
    
    //definieer begin van query
    $sql_zoek = "SELECT merk, type, modeljaar FROM kavels WHERE ";
    
    //array aanmaken voor zoektermen MySQL query (%LIKE%)
    $wheres = array();
    
    if( isset( $_POST['merk'] ) )
    {

      $wheres[] = "merk LIKE '%".$zoekterm."%'";
    }

    
    if( isset( $_POST['type'] ) )
    {

      $wheres[] = "type LIKE '%".$zoekterm."%'";
    }

    
    if( isset( $_POST['bouwjaar'] ) )
    {

      $wheres[] = "modeljaar LIKE '%".$zoekterm."%'";
    }

    
    // Plak alle voorwaarden aan elkaar
    $where = implode( ' OR ', $wheres );
    
    //maak query compleet
    $sql_zoek .= $where;
        
    $res_zoek = mysql_query($sql_zoek);
    
    while($resultaat = mysql_fetch_assoc($res_zoek)) {
        echo $resultaat['merk']." ".$resultaat['type']." ".$resultaat['modeljaar'];    
    }
    
}


?>


Toevoeging op 13/09/2011 12:17:29:

Script nog niet echt veilig uiteraard...
 



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.