Zoekfunctie door middel van checkboxes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arjen van Putten

Arjen van Putten

12/03/2007 12:42:00
Quote Anchor link
Hallo mensen,

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)
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
<?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)
    {

    ?>

<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Camping</td><td>Plaats</td>
</tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
      while ($row = mysql_fetch_array($res))
      {

    ?>

<tr>
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['titel'] ?>
</td><td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['plaats'] ?>
</td>
</tr>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
      }
      ?>

</table>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    }
  }

?>


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
 
PHP hulp

PHP hulp

16/06/2024 08:54:24
 
Robert Deiman

Robert Deiman

12/03/2007 13:14:00
Quote Anchor link
Fout gevonden:

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
 
Arjen van Putten

Arjen van Putten

12/03/2007 13:47:00
Quote Anchor link
Bedankt, dit werkt nu!

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)
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
<?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;

?>
Gewijzigd op 01/01/1970 01:00:00 door Arjen van Putten
 
Arjen van Putten

Arjen van Putten

12/03/2007 14:15:00
Quote Anchor link
Sorry, ik zie dat ik een denkfout maak. Het is natuurlijk veel handiger om het gedeelte dat optioneel is gewoon leeg te laten.
 
Rudie dirkx

rudie dirkx

12/03/2007 14:21:00
Quote Anchor link
Je doet alles dubbel, het enige verschil van elke dubbele is het AND of WHERE. Dat kan een stuk makkelijker en korter.
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

if ( isset($_POST['fiets']) )
{

    $arrVoorwaarden[] = 'fiets = 1';
}


?>


En op t eind:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

if ( 0 < count($arrVoorwaarden) )
{

    $szVoorwaarden = "WHERE " . implode(" AND ", $arrVoorwaarden);
}

else
{
    $szVoorwaarden = "";
}

$szQuery = "SELECT * FROM nieuws" . $szVoorwaarden;

?>
 
Arjen van Putten

Arjen van Putten

12/03/2007 16:47:00
Quote Anchor link
haha, ik ben nog niet zo lang begonnen met php dus op dat idee was ik nog niet gekomen. Ik heb hem nu wel werkend, de manier die jij gebruikt is natuurlijk veel handiger om aan te leren.

bedankt! :)
 
Arjen van Putten

Arjen van Putten

12/03/2007 17:03:00
Quote Anchor link
Ik moet trouwens het toch wel per checkbox controleren? dus het bovenste stukje voor elke box herhalen. Of kan dit ook nog korter?
 



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.