sql query opbouwen met checkboxen
Even een inleiding:
Ik heb een database waarin de waarde van checkboxen worden opgeslagen. Ik heb zo een kolom voor elke taal ( nederlands, frans, duits..). Als de checkbox aangevinkt is staat er een 1 anders een 0.
Nu wil ik een zoekformulier maken (weer met behulp van checkboxen) waarmee het volgende kan gedaan worden. Als ik bijvoorbeeld op frans wil zoeken, wil ik de records zien waarbij frans geslecteerd is maar ook nederlands in combinatie met frans of andere talen in combinatie met frans.
Iemand een hint, tutorial ofzo hoe ik hieraan begin?
ik heb het volgende:
een tabel met hierin een kolom naam, adres,nederlands, frans, duits...
De talen zijn gebonden aan een checkbox (via 1 en 0).
Nu wil ik de namen zoeken die bijvoorbeeld frans spreken. Dit wil dus zeggen alleen frans en ook mensen die frans en nederlands spreken.
<input type="checkbox" name="searchned" value="1" >Nederlands
<input type="checkbox" name="searchfrans" value="1" >Frans
<input type="checkbox" name="searchduits" value="1" >Duits
<input type="checkbox" name="searchspaans" value="1" >Spaans
iemand een idee?
Code (php)
1
2
3
4
2
3
4
<input type="checkbox" name="taal[]" value="nl" >Nederlands
<input type="checkbox" name="taal[]" value="fr" >Frans
<input type="checkbox" name="taal[]" value="de" >Duits
<input type="checkbox" name="taal[]" value="es" >Spaans
<input type="checkbox" name="taal[]" value="fr" >Frans
<input type="checkbox" name="taal[]" value="de" >Duits
<input type="checkbox" name="taal[]" value="es" >Spaans
Wanneer je nu het formulier verstuurd, krijg je de array $_POST['taal'] binnen. Daarin staan de geselecteerde waardes, bv. 'nl' en 'es'. Het is dus duidelijk dat Nederlands en Spaans zijn geselecteerd.
Met een foreach-lus kun je de array eenvoudig doorlopen.
En om zo min mogelijk querys te doen (word hij toch sneller van, of ben ik nou weer heel vaag...?) kan je het beste de foreachloop zoiets doen (vind ik iig handig):
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
if (isset($_POST['taal'])) {
foreach ($_POST['taal'] as $value) {
$talen[] = "taal = '".$value."'"; // even beredeneerd vanuit een query, die vaak met double quotes gaat
}
$sql = "SELECT kolommen FROM tabel WHERE (". implode(' OR ', $talen).")";
// iets als: SELECT kolommen FROM tabel WHERE (taal = 'nl' OR taal = 'de')
// Het staat tussen haakjes zodat je er nog een 'AND' ofzo bij kan doen..
}
foreach ($_POST['taal'] as $value) {
$talen[] = "taal = '".$value."'"; // even beredeneerd vanuit een query, die vaak met double quotes gaat
}
$sql = "SELECT kolommen FROM tabel WHERE (". implode(' OR ', $talen).")";
// iets als: SELECT kolommen FROM tabel WHERE (taal = 'nl' OR taal = 'de')
// Het staat tussen haakjes zodat je er nog een 'AND' ofzo bij kan doen..
}
Bijkomend een vraagje,
In een veld (refcode) worden de waarden van verschillende checkboxen opgeslagen, gescheiden door een #.
vb: #301#304#25#369#85
vb: #304#305#369#85
nu wil ik de records opvragen waar bijvoorbeeld #25 instaat EN bijvoorbeeld #301 in het veld refcode
Is dit mogelijk?