Zoekopdracht met meerdere waarden
Ik ben een beetje aan het pieren met een zoekfunctie die resultaten moet weergeven naar aanleiding van het kiezen van 0-N waarden uit de ene selectbox en 0-N waarden uit de tweede selectbox.
Het betreft een zoekfunctie voor een formulier welke actiepunten bevat. In het formulier worden de actie, de actiehouder, de status en de datum ingevuld en vervolgens opgeslagen in de tabel "action".
De selectboxen worden gegenereerd uit 2 verschillende tabellen. De values van de opties worden, bij het opslaan van het formulier, opgeslagen in de tabel "action"
Dit zijn mijn 2 selectboxen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<select id="" name="search_actionholder[]" multiple="multiple" size="4" style="width:250px">
<option value="naam1">Jan</option>
<option value="naam2">Piet</option>
<option value="naam3">Karel</option>
<option value="naam4">Henk</option>
<option value="naam5">Gerard</option>
<option value="naam6">Erik</option>
</select>
<option value="naam1">Jan</option>
<option value="naam2">Piet</option>
<option value="naam3">Karel</option>
<option value="naam4">Henk</option>
<option value="naam5">Gerard</option>
<option value="naam6">Erik</option>
</select>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<select id="" name="search_status[]" multiple="multiple" size="4" style="width:250px">
<option value="N">Nieuw</option>
<option value="O">Open</option>
<option value="G">Gereed</option>
<option value="V">Vervallen</option>
</select>
<option value="N">Nieuw</option>
<option value="O">Open</option>
<option value="G">Gereed</option>
<option value="V">Vervallen</option>
</select>
De volgende code heb ik reeds en die werkt bij 0 en 1 resultaat uit de selectboxen. (code is nog erg simpel omdat ik eerst aan het pieren ben, straks als alles werkt zal ik hem aanpassen)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if (isset($_POST['search_submit']))
{
echo "<b>gezocht:</b><br />";
// zet een komma tussen de geselecteerde resultaten in de array
$search_actionholder = @implode(", ",$_POST['search_actionholder']);
// zet een komma tussen de geselecteerde resultaten in de array
$search_status = @implode(", ",$_POST['search_status']);
// laat de geselecteerde resultaten zien
echo $search_actionholder."<br />";
echo $search_status."<br />";
$sql = "SELECT * FROM action
WHERE (person_value LIKE '%".$search_actionholder."%' OR person_value = 'ALL')
AND (status_value LIKE '%".$search_status."%' OR status_value = 'ALL')
ORDER BY action_id DESC";
$test = mysql_query($sql);
// laat de resultaten zien
while($row=mysql_fetch_array($test))
{
echo $row['action']."<br />\n";
}
}
?>
if (isset($_POST['search_submit']))
{
echo "<b>gezocht:</b><br />";
// zet een komma tussen de geselecteerde resultaten in de array
$search_actionholder = @implode(", ",$_POST['search_actionholder']);
// zet een komma tussen de geselecteerde resultaten in de array
$search_status = @implode(", ",$_POST['search_status']);
// laat de geselecteerde resultaten zien
echo $search_actionholder."<br />";
echo $search_status."<br />";
$sql = "SELECT * FROM action
WHERE (person_value LIKE '%".$search_actionholder."%' OR person_value = 'ALL')
AND (status_value LIKE '%".$search_status."%' OR status_value = 'ALL')
ORDER BY action_id DESC";
$test = mysql_query($sql);
// laat de resultaten zien
while($row=mysql_fetch_array($test))
{
echo $row['action']."<br />\n";
}
}
?>
Dit werkt dus voor 0 geselecteerde opties, dan laat hij alle resultaten zien. Het werkt ook wanneer ik bijvoorbeeld in de eerste lijst "Jan" kies en in de tweede lijst "Nieuw", dan zie ik namelijk alle resultaten van actiepunten die op naam van "Jan" staan en die de status "Nieuw" hebben.
Wanneer ik bijvoorbeeld "Jan" en "Erik" selecteer, dan krijg ik geen resultaten, ook niet als ik er 1 of 2 statussen bij selecteer.
Ik hoop dat iemand mij kan helpen. In ieder geval bedankt voor de moeite.
Mvg
Wim
Er zijn nog geen reacties op dit bericht.