Zoekfunctie met checkbox

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick

rick

10/03/2009 14:47:00
Quote Anchor link
Ik ben op zoek naar een uitgebreid zoekfunctie welke kan zoeken in een MySQL database.
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?
 
PHP hulp

PHP hulp

06/11/2024 00:54:44
 
RvW Of toch niet

RvW Of toch niet

10/03/2009 15:03:00
Quote Anchor link
tut zoek formulier
Gewijzigd op 01/01/1970 01:00:00 door RvW Of toch niet
 
Rick

rick

10/03/2009 15:12:00
Quote Anchor link
Heb ik allang gezocht, maar nergens staat wat, vandaar dat ik hier hulp zoek.
rvw schreef op 10.03.2009 15:03:
 
Tamara

Tamara

10/03/2009 15:13:00
Quote Anchor link
in je query met LIMIT werken? (en voor de limit dan de waarde(s) gebruiken van de checkbox...
 
Robert Deiman

Robert Deiman

10/03/2009 16:38:00
Quote Anchor link
@Tamara
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= ".... WHERE telnr LIKE '%".$zoekterm."%' ";
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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


Hieronder bouw je de query op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
?>

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
 
Rick

rick

11/03/2009 07:59:00
Quote Anchor link
Bedankt Robert ,
Alleen wat wordt er precies met where_clause bedoeld?
Gewijzigd op 01/01/1970 01:00:00 door rick
 
Robert Deiman

Robert Deiman

12/03/2009 07:41:00
Quote Anchor link
De where clause in SLQ is datgene wat na de WHERE komt in SQL, en voor de daarna komende SQL commando's (alles wat voorwaarde is voor de query zeg maar)
De voorwaarden voor je query worden met bovengenoemde voorbeeldcode dynamisch opgebouwd, afhankelijk van wat iemand heeft aangevinkt.
 
Jjriet petersen

jjriet petersen

25/03/2009 12:23:00
Quote Anchor link
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.
 
Rick

rick

25/03/2009 12:35:00
Quote Anchor link
@jjriet: Het werkt nu allemaal zoals ik wil. Ik hoop dat je er ook wat aan heb.

Zie hieronder mijn script:

home.php
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
<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)
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
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;
}

?>
 
Jjriet petersen

jjriet petersen

25/03/2009 13:48:00
Quote Anchor link
Ik snap nu alléén even de opbouw niet meer zo goed. Wat zoek precies met jou form ?
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!
 
Rick

rick

25/03/2009 14:04:00
Quote Anchor link
Ik heb ff snel het script online gezet. De zoekfunctie werkt hier goed en de rest niet, maar is ook niet belangrijk voor jou.

www.rickvanderheiden.nl/telefoonlijst

Ik hoop dat je hier wat wijzer van wordt.
 
Jjriet petersen

jjriet petersen

25/03/2009 14:19:00
Quote Anchor link
Thanks:

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 ?
 
Rick

rick

25/03/2009 14:51:00
Quote Anchor link
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.
 
Jjriet petersen

jjriet petersen

25/03/2009 15:08:00
Quote Anchor link
oké: dit is toch niet echt wat ik zoek helaas. Thanks: ik ga gewoon verder zoeken.
 
Rick

rick

25/03/2009 15:41:00
Quote Anchor link
okee nou succes ieder geval
 



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.