Selectie uit de database op basis van dropdownlist

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gert Mallegrom

Gert Mallegrom

11/08/2006 19:26:00
Quote Anchor link
Beste,

Ik heb een database met 3 verschillende tabellen. Nu heb ik een query die op basis van 3 dropdownlisten zoekt. Alleen werkt die query niet wanneer ik maar 1 dropdownlist selecteer om te zoeken.

Wie kan me verder helpen.

Zie hieronder voor het betreffende stuk code. (de totale pagina is groter)

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
<?php  
if (!empty($_POST)) {  

$query2 = "SELECT schoenen.id,merken.merknaam, schoenen.merk_id, schoenen.schoennaam,  
schoenen.thumb, schoenen.prijs, schoenen.norm_id, schoenen.soort_id, schoenen.maat_kl,  
schoenen.maat_gr, normen.normcode, soorten.soortnaam  
FROM schoenen, merken, normen, soorten  
WHERE schoenen.merk_id='"
. $_POST["merk_id"] . "'  
AND schoenen.soort_id='"
. $_POST["soort_id"] . "'  
AND schoenen.norm_id='"
. $_POST["norm_id"] . "'  
AND merken.id=schoenen.merk_id  
AND normen.id=schoenen.norm_id  
AND soorten.id=schoenen.soort_id"
;  
$result2 = mysql_query($query2) or die ("Fout: ". mysql_error());  
$aantal = mysql_num_rows($result2);  
}
  
?>

<table width=560 height="50" align="center" background="images/bg_zoek.gif" class="tekst">
<tr>
<td valign="middle"> &nbsp;Zoek op:</td>
<td valign="middle"><form name="form1" method="post" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SERVER["PHP_SELF"]);?>
">
<select name="merk_id">
<option selected="selected" value="">Alle merken</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php  
      $query
="SELECT id, merknaam FROM merken ORDER BY id";  
      // ---- einde initialisatie  
      $result = mysql_query($query) or die (mysql_error());  
      while (list($id, $merknaam) = mysql_fetch_row($result)){  
      echo "<option value='" . $id . "'>" . $merknaam . "</option>";  
      }
    
      ?>

</select>
</td>
<td valign="middle"><select name="soort_id">
<option selected="selected" value="">Alle soorten</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php  
      $query
="SELECT * FROM soorten ORDER BY id";  
      // ---- einde initialisatie  
      $result = mysql_query($query) or die (mysql_error());  
      while (list($id, $soortnaam) = mysql_fetch_row($result)){  
      echo "<option value='" . $id . "'>" . $soortnaam . "</option>";  
      }
    
      ?>

</select></td>
<td valign="middle"><select name="norm_id">
<option selected="selected" value="">Alle normen</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php $query="SELECT * FROM normen ORDER BY id";  
    // ---- einde initialisatie  
    $result = mysql_query($query) or die (mysql_error());  
    while (list($id, $normcode) = mysql_fetch_row($result)){  
    echo "<option value='" . $id . "'>" . $normcode . "</option>"; }    
    ?>

</select></td>
<td valign="middle"><input name="Submit" type="submit" id="Submit" value="Zoek" />
</td>
</tr>
</table>
 
PHP hulp

PHP hulp

30/04/2024 12:19:59
 
Frank -

Frank -

11/08/2006 19:32:00
Quote Anchor link
Vraagje: Waarom staat de php-code en de html-code lukraak door elkaar heen? Database-aanroepen, business-logica en presentatie hebben niet zo heel erg veel met elkaar te maken. Ga je maar eens verdiepen in 3-tier.

In de query aan het begin van je code, gebruik je AND om de diverse soorten input in de WHERE op te nemen. Ik kan me voorstellen dat dit OR's moeten zijn. Maar ik heb me er niet in verdiept, je zal er zelf even in moeten duiken. Kijk eerst eens welke queries je wilt maken en ga dan pas kijken hoe je dit met php moet oplossen.
 
Klaasjan Boven

Klaasjan Boven

11/08/2006 20:27:00
Quote Anchor link
en probeer je sqlletjes duidelijk uit te schrijven
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
<?php
[code]<?php  
if (!empty($_POST)) {  

$query2 = "
SELECT
     a.id,
     b.merknaam,      
     a.merk_id,
     b.schoennaam,  
     a.thumb,
     a.prijs,
     a.norm_id,
     a.soort_id,
     a.maat_kl,  
     a.maat_gr,
     c.normcode,
     d.soortnaam  
FROM
  schoenen AS a,
  merken    AS b,
  normen    AS c,
  soorten    AS d  
WHERE
    a.merk_id='"
. $_POST["merk_id"] . "'  
AND
   a.soort_id='"
. $_POST["soort_id"] . "'  
AND
   a.norm_id='"
. $_POST["norm_id"] . "'  
AND
   b.id=a.merk_id  
AND
  c.id=a.norm_id  
AND
  c.id=a.soort_id"
;

?>



en met ALIASSEN kun je veel typwerk besparen
 
Gert Mallegrom

Gert Mallegrom

12/08/2006 14:15:00
Quote Anchor link
ok, bedankt. Ga ik verwerken.
Alleen mijn vraag is nog niet opgelost.
 
Frank -

Frank -

12/08/2006 16:44:00
Quote Anchor link
Zo ziet jouw voorwaarde er uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
WHERE
    a.merk_id='" . $_POST["merk_id"] . "'  
AND
   a.soort_id='" . $_POST["soort_id"] . "'  
AND
   a.norm_id='" . $_POST["norm_id"] . "'  
AND
   b.id=a.merk_id  
AND
  c.id=a.norm_id  
AND
  c.id=a.soort_id"

De query werkt uitstekend, ook wanneer je slechts 1 selectie maakt. Het probleem is alleen dat je dan geen records hebt die aan de volledige voorwaarde (dus inclusief de niet-geselecteerde velden) voldoen.

Je hebt nu keihard 3 variabelen in de query staan terwijl je niet weet of je wel met 3 variabelen gaat zoeken. Kortom, kijk eerst welke variabelen je hebt en ga dan pas de voorwaarden in de query opstellen. Je krijgt dus een dynamische query.

Ga er eens mee stoeien en laat straks eens zien wat er uit de bus is gekomen.

Succes!
 
Gert Mallegrom

Gert Mallegrom

14/08/2006 13:14:00
Quote Anchor link
Ik ben intussen een stukje verder, maar blijf worstelen met de 9 varianten die mogelijk zijn.

Is dat niet anders op te lossen?

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

$a
= $_POST["merk_id"];
$b = $_POST["soort_id"];
$c = $_POST["norm_id"];

if (isset ($a)) {

if ($a == 0 && $b == 0 && $c == 0) {
$query2 = "
SELECT
     a.id,
     b.merknaam,      
     a.merk_id,
     a.schoennaam,  
     a.thumb,
     a.prijs,
     a.norm_id,
     a.soort_id,
     a.maat_kl,  
     a.maat_gr,
     c.normcode,
     d.soortnaam  
FROM
  schoenen AS a,
  merken    AS b,
  normen    AS c,
  soorten    AS d  
WHERE
   b.id=a.merk_id  
AND
  c.id=a.norm_id  
AND
  d.id=a.soort_id"
;
  
}
else {

if ($a == 0) {
$query_var =  "
AND
   a.soort_id='"
. $b . "'  
AND
   a.norm_id='"
. $c . "'";
  
}
elseif ($b == 0) {
$query_var =  "
AND  
  a.merk_id='"
. $a . "'  
AND
   a.norm_id='"
. $c . "'";

}
elseif ($c == 0) {
$query_var =  "
AND  
  a.merk_id='"
. $a . "'  
AND
   a.soort_id='"
. $b . "'";

}


if (isset($query_var)) {

$query2 = "
SELECT
     a.id,
     b.merknaam,      
     a.merk_id,
     a.schoennaam,  
     a.thumb,
     a.prijs,
     a.norm_id,
     a.soort_id,
     a.maat_kl,  
     a.maat_gr,
     c.normcode,
     d.soortnaam  
FROM
  schoenen AS a,
  merken    AS b,
  normen    AS c,
  soorten    AS d  
WHERE
  b.id=a.merk_id  
AND
  c.id=a.norm_id  
AND
  d.id=a.soort_id"

  
. $query_var;
  
}  
}


?>
Gewijzigd op 01/01/1970 01:00:00 door Gert Mallegrom
 
Gert Mallegrom

Gert Mallegrom

14/08/2006 15:38:00
Quote Anchor link
Het werkt. Bedankt voor de adviezen:

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

$a
= $_POST["merk_id"];
$b = $_POST["soort_id"];
$c = $_POST["norm_id"];

if (isset ($a)) {
    if ($a == 0 && $b == 0 && $c == 0) {
    $query2 = "
    SELECT
        a.id,
         b.merknaam,      
        a.merk_id,
        a.schoennaam,  
        a.thumb,
        a.prijs,
         a.norm_id,
        a.soort_id,
        a.maat_kl,  
        a.maat_gr,
        c.normcode,
            d.soortnaam  
    FROM
          schoenen AS a,
        merken    AS b,
        normen    AS c,
        soorten    AS d  
    WHERE
           b.id=a.merk_id  
    AND
          c.id=a.norm_id  
    AND
        d.id=a.soort_id"
;
  
    }
else {

    $query_var1 = " AND  
      a.merk_id='"
. $a . "'";
  
    $query_var2 = " AND
       a.soort_id='"
. $b . "'";

    $query_var3 = " AND
       a.norm_id='"
. $c . "'";

 
    if ($a == 0) {
    unset($query_var1);
    }


    if ($b == 0) {
    unset($query_var2);
    }

    
    if ($c == 0) {
    unset($query_var3);
    }


    $query_var = $query_var1 . $query_var2 . $query_var3;

    if (isset($query_var)) {
    $query2 = "
        SELECT
            a.id,
            b.merknaam,      
            a.merk_id,
            a.schoennaam,  
            a.thumb,
            a.prijs,
            a.norm_id,
            a.soort_id,
            a.maat_kl,  
            a.maat_gr,
            c.normcode,
            d.soortnaam  
        FROM
            schoenen AS a,
            merken    AS b,
            normen    AS c,
            soorten    AS d  
        WHERE
            b.id=a.merk_id  
        AND
            c.id=a.norm_id  
        AND     
            d.id=a.soort_id"

  
        . $query_var;
    }  
    }
    
?>
 
Hipska BE

Hipska BE

14/08/2006 15:52:00
Quote Anchor link
eerst maak je query var aan en dan ga je ze weer wissen.

Dit kan sneller en simpeler door dit te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
if($a != 0){
$query_var1 = " AND  
      a.merk_id='"
. $a . "'";
}

?>

Edit:
en die hele query kan je ook maken dat hij er maar 1 keer hoeft te staan .. (handiger bij latere aanpassingen in tabellen)
als je wil maak ik wel even dat gedeelte van je script opnieuw.
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
 
Gert Mallegrom

Gert Mallegrom

14/08/2006 20:51:00
Quote Anchor link
Nou als dat zou kunnen.
Overigens is het nog weer wat complexer geworden, omdat ik ook nog zoeken op een trefwoord heb toegevoegd.

Hieronder de complete 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
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<?php

$check
= $_POST["aanroep"];
$zoek = $_POST["zoek"];
$a = $_POST["merk_id"];
$b = $_POST["soort_id"];
$c = $_POST["norm_id"];

if ($check == 1) {

    if (isset($_POST["zoek"]) ) {
    
    
        
    if (trim($_POST['zoek'])!= "") {
    $zoek_var = " AND
           a.omschrijving
        LIKE
        '%"
. $zoek . "%'";
    }

        
    if ($a != 0){
    $query_var1 = " AND  
    a.merk_id='"
. $a . "'";
    }


    if ($b != 0) {
    $query_var2 = " AND
       a.soort_id='"
. $b . "'
    "
;
    }


    if ($c != 0) {
    $query_var3 = " AND
       a.norm_id='"
. $c . "'
    "
;
    }


     $query_var = $query_var1 . $query_var2 . $query_var3 . $zoek_var;

    $query = "
        SELECT
            a.id,
            b.merknaam,      
            a.merk_id,
            a.schoennaam,  
            a.thumb,
            a.prijs,
            a.norm_id,
            a.soort_id,
            a.maat_kl,  
            a.maat_gr,
            c.normcode,
            d.soortnaam  
        FROM
            schoenen AS a,
            merken    AS b,
            normen    AS c,
            soorten    AS d  
        WHERE
            b.id=a.merk_id  
        AND
            c.id=a.norm_id  
        AND     
            d.id=a.soort_id"

  
        . $query_var;
                
      }
elseif ($a == 0 && $b == 0 && $c == 0) {
      $query = "
      SELECT
        a.id,
         a.omschrijving,
        b.merknaam,      
        a.merk_id,
        a.schoennaam,  
        a.thumb,
        a.prijs,
         a.norm_id,
        a.soort_id,
        a.maat_kl,  
        a.maat_gr,
        c.normcode,
            d.soortnaam
          
      FROM
          schoenen AS a,
        merken    AS b,
        normen    AS c,
        soorten    AS d  
      WHERE
           b.id=a.merk_id  
      AND
          c.id=a.norm_id  
      AND
        d.id=a.soort_id"
;
      
    }
    


$result = mysql_query($query) or die ("Fout: ". mysql_error());
$aantal = mysql_num_rows($result);

$teller = 0;
    if ($aantal == 0) {
    echo "<br><span class=tekst>Uw zoekopdracht levert geen resultaat. Probeer het nogmaals.<span>";
    }
else {
    echo "<br><span class=tekst>Uw zoekopdracht levert " . $aantal . " producten op<span><br>
    <table CELLSPACING=30><tr>"
;
        while ($row = mysql_fetch_assoc($result)) {

          $path = "uploads/" . $row['thumb'];
  
        echo "<td>
        
        <TABLE WIDTH=340 BORDER=0 CELLPADDING=0 CELLSPACING=0 class=tekst>
    <TR>
        <TD ROWSPAN=3>
            <IMG SRC='images/kader_01.gif' WIDTH=7 HEIGHT=122></TD>
        <TD COLSPAN=2>
            <IMG SRC='images/kader_02.gif' WIDTH=146 HEIGHT=7 ></TD>
        <TD COLSPAN=3 ROWSPAN=2>
            <IMG SRC='images/kader_03.gif' WIDTH=187 HEIGHT=19 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=7 ></TD>
    </TR>
    <TR>
        <TD COLSPAN=2 ROWSPAN=2 background='images/kader_04.gif' WIDTH=146 HEIGHT=115>
            <img src='"
. $path . "'></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=12 ></TD>
    </TR>
    <TR>
        <TD ROWSPAN=2>
            <IMG SRC='images/kader_05.gif' WIDTH=7 HEIGHT=110 ></TD>
        <TD ROWSPAN=3 background='images/kader_06.gif' WIDTH=174 HEIGHT=213 style=padding-left:15;padding-right:15;style=padding-bottom:20;>
        
            <strong>"
. $row['merknaam'] . " / " . $row['schoennaam'] . "</strong><br><br>
            Type: "
. $row['soortnaam'] . "<br><br>
            Norm: "
. $row['normcode'] . " <br><br>
            Maten: "
. $row['maat_kl'] . "-" . $row['maat_gr'] . "
            <br><br><br><br>
            <div align=right valign=bottom>
            <a href=\"producten_omschrijving.php?id="
. $row['id'] . "\"><img src=\"images/meerinfo_product.gif\" border=0></a></div>
            </TD>
        <TD ROWSPAN=4>
            <IMG SRC='images/kader_07.gif' WIDTH=6 HEIGHT=220 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=103 ></TD>
    </TR>
    <TR>
        <TD COLSPAN=2 ROWSPAN=3>
            <IMG SRC='images/kader_08.gif' WIDTH=23 HEIGHT=117 ></TD>
        <TD>
            <IMG SRC='images/kader_09.gif' WIDTH=130 HEIGHT=7 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=7 ></TD>
    </TR>
    <TR>
        <TD COLSPAN=2 background='images/kader_10.gif' WIDTH=137 HEIGHT=103 align=center style=padding-bottom:15;>
        <span class=prijs>&#8364; "
. $row['prijs'] . "</span><br> incl. BTW & verzendkosten    
        <br><br><div valign=bottom>
            <img src=\"images/bestel_direct.gif\"></div></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=103 ></TD>
    </TR>
    <TR>
        <TD COLSPAN=3>
            <IMG SRC='images/kader_11.gif' WIDTH=311 HEIGHT=7 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=1 HEIGHT=7 ></TD>
    </TR>
    <TR>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=7 HEIGHT=1 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=16 HEIGHT=1 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=130 HEIGHT=1 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=7 HEIGHT=1 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=174 HEIGHT=1 ></TD>
        <TD>
            <IMG SRC='images/spacer.gif' WIDTH=6 HEIGHT=1 ></TD>
        <TD></TD>
    </TR>
</TABLE><br></td>"
;
        $teller = $teller + 1;
            if ($teller==2) {
            echo "</tr><tr>";
            $teller=0;
            }
        }

    echo "</table>";
    }
    
    
}
else { ?>


<table width=560 height=50 align="center" background="images/bg_zoek.gif" class="tekst">
<tr>
<form name="form1" method="post" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SERVER["PHP_SELF"]);?>
">
<td valign="middle"> &nbsp;Zoek op:</td>
<td valign="middle"><input name="zoek" type="text" size="20" maxlength="30" />
<select name="merk_id">
<option selected="selected" value=0>Alle merken</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
        $query
="SELECT id, merknaam FROM merken ORDER BY id";
        // ---- einde initialisatie
        $result = mysql_query($query) or die (mysql_error());
        while (list($id, $merknaam) = mysql_fetch_row($result)){
        echo "<option value='" . $id . "'>" . $merknaam . "</option>";
        }
  
        ?>

</select>
</td>
<td valign="middle">
<select name="soort_id">
<option selected="selected" value=0>Alle soorten</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
        $query
="SELECT * FROM soorten ORDER BY id";
        // ---- einde initialisatie
        $result = mysql_query($query) or die (mysql_error());
        while (list($id, $soortnaam) = mysql_fetch_row($result)){
        echo "<option value='" . $id . "'>" . $soortnaam . "</option>";
        }
  
        ?>

</select>
</td>
<td valign="middle">
<select name="norm_id">
<option selected="selected" value=0>Alle normen</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php $query="SELECT * FROM normen ORDER BY id";
        // ---- einde initialisatie
        $result = mysql_query($query) or die (mysql_error());
        while (list($id, $normcode) = mysql_fetch_row($result)){
        echo "<option value='" . $id . "'>" . $normcode . "</option>"; }  
        ?>

</select>
</td>
<td valign="middle">
<input name="aanroep" type="hidden" value="1" />
<input name="Submit" type="submit" id="Submit" value="Zoek" />
</td>
</form>
</tr>
</table>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php


}
?>
Gewijzigd op 01/01/1970 01:00:00 door Gert Mallegrom
 



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.