Ik heb een dropdown menu gemaakt.

Als je een keuze maakt moeten de gegevens op de pagina verschijnen.

Ik krijg foutmeldingen en het lukt me niet om die weg te krijgen.

Code van het dropdownmenu en een stukje om het resultaat te laten zien.

<?php
<div class="categorie" id="categorie">
<?php
$query = "SELECT cat_naam FROM categorie ORDER BY cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
echo '<form method="POST">';
echo '<select name="categorie">';

while ($row = mysql_fetch_object($result)){
echo '<option value="'.$row->cat_naam.'">'.$row->cat_naam.'</option>';
}
echo '</select>';
echo '<input name="submit" type="submit" value="Ga" />';
echo '</form>';
?>
</div>

<div class="menurechts" id="menurechts"></div>

<div class="inhoud" id="inhoud">
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Ga') {

$sql = 'SELECT * FROM linken WHERE cat_naam = '.$_POST['categorie'].'';
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de categorie niet weergeven, probeer het later opnieuw.");


$teller = 0;
$list_completed = false;
echo '<table align="center"><tr>';
$kolommen = 3;
while ($row = mysql_fetch_assoc($res)) {
?>

Foutmelding 1: Sorry maar ik kan de categorie niet weergeven, probeer het later opnieuw.

Foutmelding 2: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource on line 56 (is de onderste regel uit bovenstaande code)

Tabellen:



Geef in je trigger_error() ook een mysql_error() mee, op die manier weet je ook waar de fout in de query zit. Want dat is waar het fout gaat, de 2e query.
Dan is dit nu de tweede foutmelding:

on line 56
Unknown column 'Diverse' in 'where clause'

Ik zeg toch eigenlijk nergens dat de kolom naam zo moet heten?

Ik weet niet of het wat uit gaat maken, maar zet eens dubbele quotes om je query en enkele quotes binnen je query om de variabele:

<?php
$sql = "SELECT * FROM linken WHERE cat_naam = '".$_POST['categorie']."'";
?>

ps. Wat ik me afvraag? Waarom heb je in de tabel 'linken' de kolom 'cat_naam' staan? Je hebt een aparte tabel voor de categorieën zoals het hoort, dus in de tabel 'linken' zou je alleen een id van een categorie moeten hebben...
Je was de ' <-- om je waarde vergeten. Zoals Blanche het heeft gedaan moet het werken. Maar het hoeven niet persee dubbele quotes te zijn, dit kan ook:
<?php
$sql = 'SELECT * FROM linken WHERE cat_naam = \''.$_POST['categorie'].'\'';
?>
Dit vind ik er onoverzichtelijk uitzien, dus vind ik de oplossing van Blanche beter. Ik wil bij de oplossing die ik gaf alleen aanduiden waar je fout aan lag.

Even iets anders (nu we toch bezig zijn), waarom haal je alles op (*) heb je echt alles nodig? Haal alleen gegevens op die je nodig hebt.
@Blanche

Dit werkt inderdaad, bedankt. Nu weer verder....

@Jordy

Ik heb inderdaad alles nodig
Ik krijg deze foutmelding als ik object gebruik:

Fatal error: Cannot use object of type stdClass as array in

Hier zie je wel alle gegevens die ik wil zien op het scherm.

Als ik object in assoc wijzig zie ik ineens geen gegevens meer op het scherm.


De layout is gewijzigd en de code ziet er nu zo uit.

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Ga') {

$sql = "SELECT * FROM linken WHERE cat_naam = '".$_POST['categorie']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de categorie niet weergeven, probeer het later opnieuw.");
echo '<table width="120" align="left" cellspacing="2" cellpadding="0">';
echo '<tr>';
$kolommen = 3;

while ($row = mysql_fetch_object($res)or die (mysql_error())){
echo '<td class="kopje"><h2>' . $_POST['categorie'] . '&nbsp;kadobonnen</h2></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td><img src="'.$row->link_plaatje.'" border="0"></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td>'.$row->link_omschrijving.'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td>'.$row->link_prijs.'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td><a href="uit.php?kadobon=' . $row['link_id'] . '" target="_blank" title="Naar de kadobon">Naar de kadobon</a><br></td>';
echo '</tr>'.PHP_EOL;



$counter++;
if($counter==$kolommen)
{
echo '</table><table align="center"><tr>';
$counter = 0;
}

}
echo '</table>'.PHP_EOL;
}

?>
Je moet wel consitent blijven. Als je mysql_fetch_object() gebruikt moet je de notatie $row->kolom hanteren. Gebruik je mysql_fetch_assoc() dan vraag je de variabelen op met $row['kolom'].

Je gebruik nu beide door elkaar, de fout zit hem op regel 23 in bovenstaande code.
@Blanche

Jeetje zeg, nooit geweten.
Ik gebruikte altijd $row->kolom en iemand waar ik een code van heb gebruikt gebruikte inderdaad $row['kolom']

Ik dacht dat dat gewoon een voorkeur was van diegene.
Ha, alweer wat geleerd.

Nou maar weer verder dan met het script......
NIEUW

Hoe maak je meerdere dropdown menu's onder elkaar?

Ik heb de "input-name" al een paar keer gewijzigd maar het lukt niet.

Het bovenste menu werkt wel maar de tweede niet.

<?php
<div class="categorie" id="categorie">
<?php
$query = "SELECT cat_naam FROM categorie ORDER BY cat_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de categorieën niet weergeven");
echo '<form method="POST">';
echo '<select name="categorie">';

while ($row = mysql_fetch_assoc($result)){
echo '<option value="'.$row['cat_naam'] .'">'.$row['cat_naam'].'</option>';
}
echo '</select>';
echo '<input name="submit" type="submit" value="Ga" />';
echo '</form>';
?>
</div> <!-- einde div categorie in het menulinks-->
<h1>Groep</h1>

<div class="groep" id="groep">
<?php
$query = "SELECT groep_naam FROM groep ORDER BY groep_naam";
$result = mysql_query($query) or die ("Sorry maar ik kan de groepen niet weergeven");
echo '<form method="POST">';
echo '<select name="groepen">';

while ($row = mysql_fetch_assoc($result)){
echo '<option value="'.$row['groep_naam'] .'">'.$row['groep_naam'].'</option>';
}
echo '</select>';
echo '<input name="submit" type="submit" value="Ga" />';
echo '</form>';
?>
</div> <!-- einde div groep in menulinks -->
</div> <!-- einde div menulinks -->
?>

<?php
<div class="tabelkadobonnen" id="tabelkadobonnen">
<?php
//de tabel voor categorie
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Ga') {
$sql = "SELECT cat_naam FROM linken WHERE cat_naam = '".$_POST['categorie']."'";
echo '<h1>' . $_POST['categorie'] . '&nbsp;kadobonnen</h1>';

$sql = "SELECT * FROM linken WHERE cat_naam = '".$_POST['categorie']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de categorie niet weergeven, probeer het later opnieuw.");

echo '<table width="100%" class="tabelgroot" align="center" cellspacing="0" cellpadding="0">';
echo '<tr><td valign="top" align="center">';
$kolommen = 3;

while ($row = mysql_fetch_assoc($res)or die (mysql_error())){
echo '<table class="kadobon" align="left" width="">';
echo '<tr>';
echo '<td width="120" height="90"><img src="'.$row['link_plaatje'].'" border="0"></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="naam">'.$row['link_naam'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="omschrijving">'.$row['link_omschrijving'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="prijs">'.$row['link_prijs'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="linkbon"><a href="kadobon.php?kadobon=' . $row['link_id'] . '" target="_blank" ><img src="plaatjes/kadobon.gif" border="0" alt="Meteen naar de kadobon" title="Meteen naar de kadobon" /></a>&nbsp;/&nbsp;<a href="website.php?website=' . $row['link_id'] . '" target="_blank" ><img src="plaatjes/website.gif" border="0" alt="Naar de website" title="Naar de website" /></a></td>';
echo '</tr></table>';



$counter++;
if($counter==$kolommen)
{
echo '</tr></table><table align="left" width="120"><tr>';
$counter = 0;
}

}
echo '</tr></table>'.PHP_EOL;
}
//de tabel voor groepen

if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'Ga') {
$sql = "SELECT * FROM linken WHERE groep_naam = '".$_POST['groepen']."'";
echo '<h1>' . $_POST['groepen'] . '&nbsp;kadobonnen</h1>';

$sql = "SELECT * FROM linken WHERE groep_naam = '".$_POST['groep']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de groepen niet weergeven, probeer het later opnieuw.");

echo '<table width="100%" class="tabelgroot" align="center" cellspacing="0" cellpadding="0">';
echo '<tr><td valign="top" align="center">';
$kolommen = 3;

while ($row = mysql_fetch_assoc($res)or die (mysql_error())){
echo '<table class="kadobon" align="left" width="">';
echo '<tr>';
echo '<td width="120" height="90"><img src="'.$row['link_plaatje'].'" border="0"></td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="naam">'.$row['link_naam'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="omschrijving">'.$row['link_omschrijving'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="prijs">'.$row['link_prijs'].'</td>';
echo '</tr>'.PHP_EOL;
echo '<tr>';
echo '<td class="linkbon"><a href="kadobon.php?kadobon=' . $row['link_id'] . '" target="_blank" ><img src="plaatjes/kadobon.gif" border="0" alt="Meteen naar de kadobon" title="Meteen naar de kadobon" /></a>&nbsp;/&nbsp;<a href="website.php?website=' . $row['link_id'] . '" target="_blank" ><img src="plaatjes/website.gif" border="0" alt="Naar de website" title="Naar de website" /></a></td>';
echo '</tr></table>';



$counter++;
if($counter==$kolommen)
{
echo '</tr></table><table align="left" width="120"><tr>';
$counter = 0;
}

}
echo '</tr></table>'.PHP_EOL;
}

//einde tabel voor groepen

?>
</div> <!-- einde div tabelkadobonnen in de inhoud -->
?>
Ik ben er al achter gekomen.

Op de submit knop heb ik bij allebei "Ga" staan.
Dit had ik als test even gewijzigd en toen deed hij het wel.

Om er voor te zorgen dat ze het allebei doen heb ik er een image ingezet en de value-knop heb ik verschillende namen gegeven.

Hopelijk is dit goed of heb ik weer iets verzonnen dat niet correct is.

Reageren