Zoekfunctie met checkbox
Het is bedoeld voor een soort telefoonboek. Er moeten 3 checkboxen inkomen welke het zoeken beperkt. Denk hierbij aan alleen zoeken in nederland, alleen zoeken in belgie etc.
Kun jij mij helpen?
tut zoek formulier
Gewijzigd op 01/01/1970 01:00:00 door RvW Of toch niet
rvw schreef op 10.03.2009 15:03:
in je query met LIMIT werken? (en voor de limit dan de waarde(s) gebruiken van de checkbox...
LIMIT is om het aantal op te halen rijen te limiteren. Niet voor zoiets.
@rick
Ik neem aan dat een zoekterm verplicht is, dus dat je al hebt:
Wat je dus bijvoorbeeld zou kunnen doen, is de query dynamisch maken:
Je checkboxen doe je zo, je query kan je dan dynamisch uitbreiden.
Code (php)
1
2
3
2
3
<input type="checkbox" name="land[]" value="belgie"/>Belgi
<input type="checkbox" name="land[]" value="nederland"/>Nederland
<input type="checkbox" name="land[]" value="luxemburg"/>Luxemburg
<input type="checkbox" name="land[]" value="nederland"/>Nederland
<input type="checkbox" name="land[]" value="luxemburg"/>Luxemburg
Hieronder bouw je de query op:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$where_clause = '';
if(!empty($_POST['land'])){
// er is minimaal 1 land geselecteerd
foreach($_POST['land'] as $key => $value){
$where_clause .= " AND land='".$value."'";
}
}
//hieronder de query zoals je die kan maken:
$query = ".... WHERE telnr LIKE '%".$zoekterm."%' ".$where_clause." LIMIT 0,10";
?>
$where_clause = '';
if(!empty($_POST['land'])){
// er is minimaal 1 land geselecteerd
foreach($_POST['land'] as $key => $value){
$where_clause .= " AND land='".$value."'";
}
}
//hieronder de query zoals je die kan maken:
$query = ".... WHERE telnr LIKE '%".$zoekterm."%' ".$where_clause." LIMIT 0,10";
?>
Die limit hoeft daar niet te staan, maar is meer om aan te geven wat de positie is van je WHERE clause.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Alleen wat wordt er precies met where_clause bedoeld?
Gewijzigd op 01/01/1970 01:00:00 door rick
De voorwaarden voor je query worden met bovengenoemde voorbeeldcode dynamisch opgebouwd, afhankelijk van wat iemand heeft aangevinkt.
Beste Rick: zou je nu jou script hier kunnen plaatsen ? Ik heb hetzelfde probleem . Ik zou graag willen weten of het nu werkt en met welke variabelen jij dat hebt gedaan. Ik heb ook een database waar ik moet zoeken binnen bepaalde geselecteerde landen.
Zie hieronder mijn script:
home.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<h2 class="title">Telefoonnummers zoeken</h2>
<form method="post" name="search-form" action="index.php?pagina=zoeken">
<input type="text" name="zoek" />
<Select name="field">
<Option value="naam">naam</option>
<Option value="afdeling">afdeling</option>
<Option value="inlog">inlognaam</option>
</Select><br>
<input type="checkbox" name="check[]" value="intern"/>Interne nummers<br>
<input type="checkbox" name="check[]" value="buitenlijn"/>Directe buitenlijn<br>
<input type="checkbox" name="check[]" value="gsm"/>GSM
<BR><BR>
<input type="hidden" name="searching" value="yes" />
<input type="submit" id="submit" value="zoeken" />
</form>
</html>
<h2 class="title">Telefoonnummers zoeken</h2>
<form method="post" name="search-form" action="index.php?pagina=zoeken">
<input type="text" name="zoek" />
<Select name="field">
<Option value="naam">naam</option>
<Option value="afdeling">afdeling</option>
<Option value="inlog">inlognaam</option>
</Select><br>
<input type="checkbox" name="check[]" value="intern"/>Interne nummers<br>
<input type="checkbox" name="check[]" value="buitenlijn"/>Directe buitenlijn<br>
<input type="checkbox" name="check[]" value="gsm"/>GSM
<BR><BR>
<input type="hidden" name="searching" value="yes" />
<input type="submit" id="submit" value="zoeken" />
</form>
</html>
zoek.php
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
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php
error_reporting(E_ALL ^ E_NOTICE);
//database connectie
include('dbcon.php');
$zoekterm = $_POST['zoek'];
$terug = "<BR><A HREF=\"index.php?pagina=home\">Terug</A>";
//controle zoekterm ingevuld
if ($searching =="yes")
{
echo "<h2>Zoekresultaten:</h2>";
echo "<b>Gezocht naar: </b>" .$zoekterm."<br>";
if ($_POST['zoek'] == "")
{
echo "<BR>Voer een zoekterm in aub.";
echo $terug;
exit;
}
if ($_POST['check'] == "")
{
echo "<BR>Vul een checkbox in.";
echo $terug;
exit;
}
//Zoekfunctie inclusief checkbox controle
$checkboxes = $_POST['check'];
foreach ($checkboxes as $check) {
///////////////////
//Externe nummers//
///////////////////
if ($check == 'buitenlijn'){
$result1 = mysql_query("SELECT * FROM buitenlijn WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches1=mysql_num_rows($result1);
if ($anymatches1 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TD WIDTH="180"><b>Directe buitenlijn telefoonnummers:</b></TD>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Groep</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result1 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['groep']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches1 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij directe buitenlijn nummers.";
}}
///////////////////
//Interne nummers//
///////////////////
if ($check == 'intern'){
$result2 = mysql_query("SELECT * FROM intern WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches2=mysql_num_rows($result2);
if ($anymatches2 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><b>Interne nummers:</b></TD>
</TR>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Groep</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result2 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['groep']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches2 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij interne nummers.";
}}
///////////////
//GSM nummers//
///////////////
if ($check == 'gsm'){
$result3 = mysql_query("SELECT * FROM gsm WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches3=mysql_num_rows($result3);
if ($anymatches3 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><b>GSM nummers:</b></TD>
</TR>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Intern verkort nummer</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result3 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['internnummer']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches3 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij de GSM nummers.";
}}
}
echo $terug;
}
?>
error_reporting(E_ALL ^ E_NOTICE);
//database connectie
include('dbcon.php');
$zoekterm = $_POST['zoek'];
$terug = "<BR><A HREF=\"index.php?pagina=home\">Terug</A>";
//controle zoekterm ingevuld
if ($searching =="yes")
{
echo "<h2>Zoekresultaten:</h2>";
echo "<b>Gezocht naar: </b>" .$zoekterm."<br>";
if ($_POST['zoek'] == "")
{
echo "<BR>Voer een zoekterm in aub.";
echo $terug;
exit;
}
if ($_POST['check'] == "")
{
echo "<BR>Vul een checkbox in.";
echo $terug;
exit;
}
//Zoekfunctie inclusief checkbox controle
$checkboxes = $_POST['check'];
foreach ($checkboxes as $check) {
///////////////////
//Externe nummers//
///////////////////
if ($check == 'buitenlijn'){
$result1 = mysql_query("SELECT * FROM buitenlijn WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches1=mysql_num_rows($result1);
if ($anymatches1 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TD WIDTH="180"><b>Directe buitenlijn telefoonnummers:</b></TD>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Groep</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result1 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['groep']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches1 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij directe buitenlijn nummers.";
}}
///////////////////
//Interne nummers//
///////////////////
if ($check == 'intern'){
$result2 = mysql_query("SELECT * FROM intern WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches2=mysql_num_rows($result2);
if ($anymatches2 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><b>Interne nummers:</b></TD>
</TR>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Groep</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result2 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['groep']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches2 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij interne nummers.";
}}
///////////////
//GSM nummers//
///////////////
if ($check == 'gsm'){
$result3 = mysql_query("SELECT * FROM gsm WHERE upper($field) LIKE '%$zoekterm%' ORDER BY naam ASC");
//Resultaat controle
$anymatches3=mysql_num_rows($result3);
if ($anymatches3 >=1){
?>
<BR>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><b>GSM nummers:</b></TD>
</TR>
<TR>
<TD WIDTH="180"><b>Naam</b></TD>
<TD WIDTH="140"><b>Telefoonnummer</b></TD>
<TD WIDTH="100"><b>Inlognaam</b></TD>
<TD WIDTH="250"><b>Afdeling</b></TD>
<TD WIDTH="180"><b>Intern verkort nummer</b></TD>
</TR></TABLE>
<?php
while($row2 = mysql_fetch_array( $result3 )) {
?>
<TABLE BORDER="0" ALIGN="center">
<TR>
<TD WIDTH="180"><?php echo $row2['naam']; ?></TD>
<TD WIDTH="140"><?php echo $row2['nummer']; ?></TD>
<TD WIDTH="100"><?php echo $row2['inlog']; ?></TD>
<TD WIDTH="250"><?php echo $row2['afdeling']; ?></TD>
<TD WIDTH="180"><?php echo $row2['internnummer']; ?></TD>
</TR>
</TABLE>
<?php
}}
//Geen resultaat melding
if ($anymatches3 == 0)
{
echo "<BR>Sorry, zijn geen zoeksresultaten gevonden bij de GSM nummers.";
}}
}
echo $terug;
}
?>
Bij de option values zie ik naam, afdeling en inlognaam
Bij input types: interne nummers, buitenlijn en gsm
Kun je heel kort uitleggen hoe het werkt ? Ik twijfel nu of mijn form hetzelfde doel nastreeft……..
Ik wil dusdanig zoeken dat hij aan per sé meerdere voorwaarden moet voldoen.
In mijn geval:
Ik zoek vacatures en moet voldoen aan LAND (frankrijk, belgie, duitsland) en REGIO (brabant, gelderland, sauerland, provence) en aan SOORT WERK (technisch, verkoop, marketing).
Dus b.v. ik zoek een vacature in: Frankrijk, in de regio provence en moet verkoop zijn.
Volgens mij is het principe van jou database in de basis gelijk ? Of zit ik abuis ? Wil het ff zeker weten voordat ik weer alles ga hercodere in php.
Alvast bedankt!
Maar waar gebruik je dan de checkboxen voor ? Is dat meer bedoeld om wat je wilt gaan weergeven ?
B.v. ik typ in ‘Piet’ in het keuzelijstje selecteer ik dan ‘naam’
Vervolgens vink ik Interne nummers en GSM-nummers aan.
Krijg ik dan van Piet zijn interne en gsm nummer te zien maar niet zijn externe nummer ?
Klopt precies zoals je het beschrijft. De checkbox is voornamelijk bedoeld omdat ik 3 tabellen in mijn database heb gsm, buitenlijn en intern. Door de checkbox is het mogelijk om in alle drie de tabellen te zoeken. Het is een telefoonlijst voor een bedrijf, waardoor er vaak gezocht wordt naar een bepaald nummer van een bepaald persoon. Daarom heb ik deze 3 tabellen gescheiden van elkaar. Dit leek mij de makkelijkste en handigste manier.
oké: dit is toch niet echt wat ik zoek helaas. Thanks: ik ga gewoon verder zoeken.
okee nou succes ieder geval