login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Keuzelijst vullen vanuit Mysql-tabel

Offline tonidegroof - 15/02/2008 11:57
Avatar van tonidegroofNieuw lid Ik heb een keuzelijst die veel te lang wordt. Ik wil graag een systeem maken dat uit 2 keuzelijsten bestaat:

Keuzelijst 1 bevat een aantal hoofdcategoriën. Afhankelijk van de gekozen hoofdcategorie wordt een tweede keuzelijst gevuld, waar de keuze dan meer kan worden verfijnd.

Ik wou een extra tabel aanmaken in Mysql met een veld Hoofdrubriek en een veld Subrubrieken, maar ik weet niet hoe ik er verder mee moet werken.

Ik ben een beginneling, dus graag een beetje gedetailleerde uitleg.

12 antwoorden

Gesponsorde links
Offline Abbas - 15/02/2008 12:01
Avatar van Abbas Gouden medaille

Crew .NET
Je begint met een query om de hoofdcategorieën op te halen en die steek je in de keuzelijst en dan voer je in het onChange-event van die lijst een nieuwe query uit met dan een WHERE om de subcategorieën van de gekozen hoofdcategorie in de lijst te kunnen zetten.
Offline tonidegroof - 15/02/2008 12:07
Avatar van tonidegroof Nieuw lid Hoe steek ik het resultaat van die query in de keuzelijst?
Wat is het onChange-event?
Offline Martijn - 15/02/2008 12:21 (laatste wijziging 15/02/2008 12:27)
Avatar van Martijn Crew PHP dat is een mooie manier, maar lastig als je net begint.

Iets wat een klik of 2 meer kost, maar makkelijker is, is een tabel nemen met je hoofdcategorie , en een tabel met daarin subcategoriën, maar ook hoofd categoriën.

wat je dan doet, is met een SELECT query de categorien van je hoofdtabel selecteren, en die dan neerzetten in bijvoorbeeld een dropdown menuutje. Dan heb je dus al je hoofdcategoriën.

Dat dropdown menuutje geeft je als name bv hoofdcat, en elke optie geeft je dezelfde value als hoe je het hebt opgeslagen.

Dan doe je weer een select query, maar nu in tabel 2, en met WHERE hoofdcat=$_POST['hoofdcat'].

het is een beetje lastig uit te leggen als je beginner bent 

snel voorbeeldje:
  1. $zoekHoofdCat=mysql_query("SELECT hoofdcat FROM tabel 1") or die(mysql_error());
  2. $telHcat=mysql_num_rows($zoekHoofdCat);
  3.  
  4. if($telHcat==0){echo"Er zijn geen hoofdcategoriën geselecteerd";}
  5. else{
  6. echo"Kies je hoofdcategorie aub: <select name=hoofdcat><option></option>";
  7.  
  8. while($hoi=mysql_fetch_array($zoekHoofdCat)){ echo"<option value=$hoi[0]>$hoi[0]</option>";}
  9. echo"</select>";
Offline bertvanhees - 15/02/2008 13:27
Avatar van bertvanhees Onbekend Kan je niet 1 formulier maken met 2 pagina's ?
Hoe het zelf moet weet ik niet, ben niet zo een expert in php/mysql
Offline tonidegroof - 15/02/2008 16:54
Avatar van tonidegroof Nieuw lid Voor de tweede query heb ik nu dit:
  1. $query_Recordset2 = "SELECT Nederlands FROM rubrieken WHERE status= '$_POST['hoofdrubriek']'";


Ik krijg daar echter een fout op: ik heb geprobeerd met enkele aanhalingstekens, dubbele aanhalingstekens, geen aanhalingstekens, steeds een fout.

Wat ik me ook afvroeg: zit in $_POST al iets in als er nog niet op de submitknop gedrukt is ?
Offline Abbas - 15/02/2008 17:21 (laatste wijziging 15/02/2008 17:24)
Avatar van Abbas Gouden medaille

Crew .NET
  1. $query_Recordset2 = "SELECT Nederlands FROM rubrieken WHERE status= '".$_POST['hoofdrubriek']."' ";
Variabelen BUITEN quotes! 

@hieronder: natuurlijk ben ik je voor! 
Offline tonidegroof - 15/02/2008 17:41
Avatar van tonidegroof Nieuw lid Ik krijg geen fout meer, maar de tweede keuzelijst blijft leeg. Ik plak hier even de code van het formulier:

  1. <form id="form1" name="form1" method="post" action="">
  2. <p>
  3. <select name="listdoeltaal">
  4. <option value="" selected> Doeltaal </option>
  5. <option value="Duits">Duits</option>
  6. <option value="Engels">Engels</option>
  7. <option value="Frans">Frans</option>
  8. <option value="Italiaans">Italiaans</option>
  9. <option value="Spaans">Spaans</option>
  10. </select>
  11. <br>
  12.  
  13. <select name="hoofdrubriek" size="1">
  14. <option value="null">Hoofdrubriek</option>
  15. <?php
  16. $query_Recordset1 = "SELECT Nederlands FROM rubrieken WHERE Status='1'";
  17. $Recordset1 = mysql_query($query_Recordset1) or die(mysql_error());
  18. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  19. $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  20. do {
  21. ?>
  22. <option value="<?php echo $row_Recordset1['Nederlands']?>"><?php echo $row_Recordset1['Nederlands']?></option>
  23. <?php
  24. } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  25. $rows = mysql_num_rows($Recordset1);
  26. if($rows > 0) {
  27. mysql_data_seek($Recordset1, 0);
  28. $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  29. }
  30. ?>
  31. </select>
  32.  
  33. <br>
  34.  
  35. <select name="listrubriek" size="1">
  36. <option value="null">Subrubriek</option>
  37. <?php
  38. $query_Recordset2 = "SELECT Nederlands FROM rubrieken WHERE Status = '".$_POST['hoofdrubriek']."'";
  39. $Recordset2 = mysql_query($query_Recordset2) or die(mysql_error());
  40. $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  41. $totalRows_Recordset2 = mysql_num_rows($Recordset2);
  42. do {
  43. ?>
  44. <option value=" <?php echo $row_Recordset2['Nederlands']?> "> <?php echo $row_Recordset2['Nederlands']?></option>
  45. <?php
  46. } while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  47. $rows = mysql_num_rows($Recordset2);
  48. if($rows > 0) {
  49. mysql_data_seek($Recordset2, 0);
  50. $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  51. }
  52. ?>
  53. </select>
  54.  
  55. <span class="style5"> <br> </span>
  56.  
  57. <input name="ookbrontaal" type="checkbox" value="wel" />
  58. <span class="style3">Ook Nederlands</span><br>
  59. <br>
  60.  
  61. <input name="Submit" type="submit" class="twoColFixLtHdr" value="Bevestig" />
  62. </p>
  63. </form>
Offline Koen - 15/02/2008 17:49
Avatar van Koen PHP expert
Sandernerd schreef:
[..code..]

titjes was me voor 


Neuh, hij heeft gewoon stiekem jouw tijd aangepast 
Offline Abbas - 15/02/2008 17:50 (laatste wijziging 15/02/2008 17:51)
Avatar van Abbas Gouden medaille

Crew .NET
Doe op regel 44 dit:
  1. echo '<option value="' . $row_Recordset2['Nederlands']. '">'. $row_Recordset2['Nederlands'] .'</option>';


@sliphead: watch your words! 
Offline tonidegroof - 15/02/2008 18:09
Avatar van tonidegroof Nieuw lid Ik heb dus nu dit:

  1. echo '<option value="'.$row_Recordset2['Nederlands'].'" >'.$row_Recordset2['Nederlands'].'</option>';


maar er verschijnt nog steeds niets in de tweede keuzelijst
Offline Abbas - 15/02/2008 18:11 (laatste wijziging 15/02/2008 18:11)
Avatar van Abbas Gouden medaille

Crew .NET
Ben je dan zeker dat je alles juist ophaalt, dat er dus daadwerkelijk gegevens opgehaald worden. Probeer anders dezelfde code eens maar met een constante..
  1. echo '<option value="TEST" >'".TEST."'</option>';

Als er dan nog niets in de lijst komt, haal je niets op.
Offline tonidegroof - 15/02/2008 18:13 (laatste wijziging 15/02/2008 21:33)
Avatar van tonidegroof Nieuw lid Ik heb ' ".$_POST['hoofdrubriek']." ' vervangen door 'mens' en krijg nu in de tweede keuzelijst de juiste subrubrieken: lichaam, voeding, kleding, ...

"hoofdrubriek" is de naam van de eerste keuzelijst.

BERICHT GEWIJZIGD
Een deel van het probleem is opgelost: de tweede lijst wordt gevuld, maar niet zomaar met de juiste gegevens.
Zoals ik al vermoedde krijgt $_POST pas de correcte inhoud nadat een keer op een submit-knop gedrukt is.

Hoe kan ik dat oplossen? Kan ik achter het vak waar de eerste lijst instaat een klein knopje plaatsen, dat de waarde van lijst 1 in $_POST zet, de tweede lijst laat verschijnen en dan de waarden van lijst 1 via $_POST in die tweede lijst plaatst.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.22s