Zoekfunctie door middel van checkboxes
Ik probeer aan de hand van een forum post van Jan Koehoorn (http://www.phphulp.nl/forum/showtopic.php?id=13062&cat=2&replies=0), een zoekfunctie te maken. Het enige verschil met deze functie is dat ik geen dropdown -menu gebruik.
Als ik 1 box aan vink, dat doet de functie het prima. Maar zodra ik bijvoorbeeld de checkboxen Snackbar en fiets selecteer krijg ik de volgende error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND fiets = 1' at line 3
Ik gebruik de volgende code:
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
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
<?php
include ('inc/header.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset ($_POST['asci'])) {
if ($and) {
$voorwaarden = ' AND asci = 1';
}
else {
$voorwaarden = 'WHERE asci = 1';
$and = true;
}
}
if (isset ($_POST['anwb'])) {
if ($and) {
$voorwaarden = ' AND anwb = 1';
}
else {
$voorwaarden = 'WHERE anwb = 1';
$and = true;
}
}
if (isset ($_POST['snk'])) {
if ($and) {
$voorwaarden = ' AND snk = 1';
}
else {
$voorwaarden = 'WHERE snk = 1';
$and = true;
}
}
if (isset ($_POST['svr'])) {
if ($and) {
$voorwaarden = ' AND svr = 1';
}
else {
$voorwaarden = 'WHERE svr = 1';
$and = true;
}
}
if (isset ($_POST['vekabo'])) {
if ($and) {
$voorwaarden = ' AND vekabo = 1';
}
else {
$voorwaarden = 'WHERE vekabo = 1';
$and = true;
}
}
if (isset ($_POST['kind'])) {
if ($and) {
$voorwaarden = ' AND kindvriendelijk = 1';
}
else {
$voorwaarden = 'WHERE kindvriendelijk = 1';
$and = true;
}
}
if (isset ($_POST['elec'])) {
if ($and) {
$voorwaarden = ' AND elec = 1';
}
else {
$voorwaarden = 'WHERE elec = 1';
$and = true;
}
}
if (isset ($_POST['huisdier'])) {
if ($and) {
$voorwaarden = ' AND huisdier = 1';
}
else {
$voorwaarden = 'WHERE huisdier = 1';
$and = true;
}
}
if (isset ($_POST['snackbar'])) {
if ($and) {
$voorwaarden = ' AND snackbar = 1';
}
else {
$voorwaarden = 'WHERE snackbar = 1';
$and = true;
}
}
if (isset ($_POST['fiets'])) {
if ($and) {
$voorwaarden = ' AND fiets = 1';
}
else {
$voorwaarden = 'WHERE fiets = 1';
$and = true;
}
}
$sql = "
SELECT *
FROM nieuws
" . $voorwaarden;
echo $sql;
// hierna je query uitvoeren
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
?>
include ('inc/header.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset ($_POST['asci'])) {
if ($and) {
$voorwaarden = ' AND asci = 1';
}
else {
$voorwaarden = 'WHERE asci = 1';
$and = true;
}
}
if (isset ($_POST['anwb'])) {
if ($and) {
$voorwaarden = ' AND anwb = 1';
}
else {
$voorwaarden = 'WHERE anwb = 1';
$and = true;
}
}
if (isset ($_POST['snk'])) {
if ($and) {
$voorwaarden = ' AND snk = 1';
}
else {
$voorwaarden = 'WHERE snk = 1';
$and = true;
}
}
if (isset ($_POST['svr'])) {
if ($and) {
$voorwaarden = ' AND svr = 1';
}
else {
$voorwaarden = 'WHERE svr = 1';
$and = true;
}
}
if (isset ($_POST['vekabo'])) {
if ($and) {
$voorwaarden = ' AND vekabo = 1';
}
else {
$voorwaarden = 'WHERE vekabo = 1';
$and = true;
}
}
if (isset ($_POST['kind'])) {
if ($and) {
$voorwaarden = ' AND kindvriendelijk = 1';
}
else {
$voorwaarden = 'WHERE kindvriendelijk = 1';
$and = true;
}
}
if (isset ($_POST['elec'])) {
if ($and) {
$voorwaarden = ' AND elec = 1';
}
else {
$voorwaarden = 'WHERE elec = 1';
$and = true;
}
}
if (isset ($_POST['huisdier'])) {
if ($and) {
$voorwaarden = ' AND huisdier = 1';
}
else {
$voorwaarden = 'WHERE huisdier = 1';
$and = true;
}
}
if (isset ($_POST['snackbar'])) {
if ($and) {
$voorwaarden = ' AND snackbar = 1';
}
else {
$voorwaarden = 'WHERE snackbar = 1';
$and = true;
}
}
if (isset ($_POST['fiets'])) {
if ($and) {
$voorwaarden = ' AND fiets = 1';
}
else {
$voorwaarden = 'WHERE fiets = 1';
$and = true;
}
}
$sql = "
SELECT *
FROM nieuws
" . $voorwaarden;
echo $sql;
// hierna je query uitvoeren
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) >= 1)
{
?>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Camping</td><td>Plaats</td>
</tr>
<tr>
<td></td><td></td>
</tr>
</table>
als ik 1 aanvink is de sql code bv:
SELECT * FROM nieuws WHERE anwb = 1
als ik er 2 aanvik is de sql code bv:
SELECT * FROM nieuws AND anwb = 1
De fout zit er dus in dat hij het 2e gedeelte er niet juist achter plaatst.
Weet iemand wat ik nog moet toevoegen/veranderen?
Groeten,
Arjen
Gewijzigd op 01/01/1970 01:00:00 door Arjen van Putten
Jij zet als ($and = true) elke keer de variabele $voorwaarden opnieuw, door alleen = te gebruiken. Bij elke keer dat je AND gebruikt, moet je .= (punt is) gebruiken, om daar gegevens aan toe te voegen. Dat betekend wel dat je $voorwaarden eerst geïnitialiseerd moet hebben ($voorwaarden='';) om evt errors te voorkomen.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Ik zit nu alleen met een ander probleem.
Ik wil dat de velden asci, anwb, snk, svr en vekabo optioneel zijn. Maar als bijvoorbeeld snackbar en fiets worden aan gevinkt, moeten deze er perse beiden inzitten.
Ik dacht dat ik dit door middel van de volgende aanpassing kon oplossen, maar dat lijkt niet te lukken:
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
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset ($_POST['asci'])) {
if ($and) {
$voorwaarden .= ' OR asci = 1';
}
else {
$voorwaarden = 'WHERE asci = 1';
$and = true;
}
}
if (isset ($_POST['anwb'])) {
if ($and) {
$voorwaarden .= ' OR anwb = 1';
}
else {
$voorwaarden = 'WHERE anwb = 1';
$and = true;
}
}
if (isset ($_POST['snk'])) {
if ($and) {
$voorwaarden .= ' OR snk = 1';
}
else {
$voorwaarden = 'WHERE snk = 1';
$and = true;
}
}
if (isset ($_POST['svr'])) {
if ($and) {
$voorwaarden .= ' OR svr = 1';
}
else {
$voorwaarden = 'WHERE svr = 1';
$and = true;
}
}
if (isset ($_POST['vekabo'])) {
if ($and) {
$voorwaarden .= ' OR vekabo = 1';
}
else {
$voorwaarden = 'WHERE vekabo = 1';
$and = true;
}
}
if (isset ($_POST['kind'])) {
if ($and) {
$voorwaarden .= ' AND kindvriendelijk = 1';
}
else {
$voorwaarden = 'WHERE kindvriendelijk = 1';
$and = true;
}
}
if (isset ($_POST['elec'])) {
if ($and) {
$voorwaarden .= ' AND elec = 1';
}
else {
$voorwaarden = 'WHERE elec = 1';
$and = true;
}
}
if (isset ($_POST['huisdier'])) {
if ($and) {
$voorwaarden .= ' AND huisdier = 1';
}
else {
$voorwaarden = 'WHERE huisdier = 1';
$and = true;
}
}
if (isset ($_POST['snackbar'])) {
if ($and) {
$voorwaarden .= ' AND snackbar = 1';
}
else {
$voorwaarden = 'WHERE snackbar = 1';
$and = true;
}
}
if (isset ($_POST['fiets'])) {
if ($and) {
$voorwaarden .= ' AND fiets = 1';
}
else {
$voorwaarden = 'WHERE fiets = 1';
$and = true;
}
}
$sql = "
SELECT *
FROM nieuws
" . $voorwaarden;
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset ($_POST['asci'])) {
if ($and) {
$voorwaarden .= ' OR asci = 1';
}
else {
$voorwaarden = 'WHERE asci = 1';
$and = true;
}
}
if (isset ($_POST['anwb'])) {
if ($and) {
$voorwaarden .= ' OR anwb = 1';
}
else {
$voorwaarden = 'WHERE anwb = 1';
$and = true;
}
}
if (isset ($_POST['snk'])) {
if ($and) {
$voorwaarden .= ' OR snk = 1';
}
else {
$voorwaarden = 'WHERE snk = 1';
$and = true;
}
}
if (isset ($_POST['svr'])) {
if ($and) {
$voorwaarden .= ' OR svr = 1';
}
else {
$voorwaarden = 'WHERE svr = 1';
$and = true;
}
}
if (isset ($_POST['vekabo'])) {
if ($and) {
$voorwaarden .= ' OR vekabo = 1';
}
else {
$voorwaarden = 'WHERE vekabo = 1';
$and = true;
}
}
if (isset ($_POST['kind'])) {
if ($and) {
$voorwaarden .= ' AND kindvriendelijk = 1';
}
else {
$voorwaarden = 'WHERE kindvriendelijk = 1';
$and = true;
}
}
if (isset ($_POST['elec'])) {
if ($and) {
$voorwaarden .= ' AND elec = 1';
}
else {
$voorwaarden = 'WHERE elec = 1';
$and = true;
}
}
if (isset ($_POST['huisdier'])) {
if ($and) {
$voorwaarden .= ' AND huisdier = 1';
}
else {
$voorwaarden = 'WHERE huisdier = 1';
$and = true;
}
}
if (isset ($_POST['snackbar'])) {
if ($and) {
$voorwaarden .= ' AND snackbar = 1';
}
else {
$voorwaarden = 'WHERE snackbar = 1';
$and = true;
}
}
if (isset ($_POST['fiets'])) {
if ($and) {
$voorwaarden .= ' AND fiets = 1';
}
else {
$voorwaarden = 'WHERE fiets = 1';
$and = true;
}
}
$sql = "
SELECT *
FROM nieuws
" . $voorwaarden;
?>
Gewijzigd op 01/01/1970 01:00:00 door Arjen van Putten
Sorry, ik zie dat ik een denkfout maak. Het is natuurlijk veel handiger om het gedeelte dat optioneel is gewoon leeg te laten.
Het idee van je is wel leuk :) Maar als je nou alle voorwaarden in een array zet (zonder AND of WHERE, gewoon alleen "fiets = 1") en op t eind bekijkt of er minstens 1 (als er minstens 1 aangevinkt moet zijn) aangevinkt is en ze dan aan elkaar plakt met AND ertussen... Klaar
Dus ipv wat jij steeds doet:
En op t eind:
bedankt! :)
Ik moet trouwens het toch wel per checkbox controleren? dus het bovenste stukje voor elke box herhalen. Of kan dit ook nog korter?