login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Gerelateerd menu selectie

Offline marc9990 - 01/10/2008 11:39 (laatste wijziging 01/10/2008 11:40)
Avatar van marc9990Nieuw lid Hallo iedereen,

ik heb volgend probleem. In een invulformulier kan de gebruiker velden enz. invullen maar er zijn 2 selectie menu's waarin de gebruiker een keuze moet maken, voor alle duidelijkheid, de gebruiker selecteert een afdeling, nu zou de volgende selectie daar moeten aan gerelateerd worden, dus enkel categorieen behorende bij deze afdeling zouden mogen getonnd worden.

dit heb ik nu

In een database 'afdelingen' staan verschillende records die uitgelezen worden en in een HTML selectielijst komen te staan.

  1. $result = mysql_query("SELECT * FROM categorie WHERE cat_afd_naam ='$afd_naam'", $db) or die ("FOUT: " . mysql_error());
  2. while (list($afd_id, $afd_naam) = mysql_fetch_row($result))
  3. {
  4. echo("<option value=\"$afd_naam\">$afd_naam</option>\n");
  5. }


In een database 'categorie' staan verschillende records die momenteel ook
uitgelezen worden en in HTML selectielijst komen te staan.

  1. $result = mysql_query("SELECT * FROM categorie ORDER BY at_afd_naam",
  2. $db) or die ("FOUT: " . mysql_error());
  3. while (list($cat_id, $cat_naam, $cat_afd_naam) = mysql_fetch_row($result))
  4. {
  5. echo("<option value=\"$cat_naam\">$cat_naam</option>\n");
  6. }


Daar zit nu juist het probleem, bij het inladen van de pagina worden de selectielijst aangemaakt.

Eenmaal de gebruiker een afdeling gekozen heeft zou eigen in de
selectie lijst van de categorieen uiteindelijk de categorieen mogen staan die
bij de gekozen afdeling behoren.

En daar loop ik vast.

Hoe kan ik de selectie lijst pas aanvullen nadat de gebruiker een afdeling koos?

Iemand die mij kan helpen.

Alvast bedankt

19 antwoorden

Gesponsorde links
Offline Abbas - 01/10/2008 11:41 (laatste wijziging 01/10/2008 14:27)
Avatar van Abbas Gouden medaille

Crew .NET
Hier is al eerste hulp: CODETAGS gebruiken als je code post! Lees de forumregels voor alle verdere uitleg!

Allereerst, in je eerste stukje code: variabelen buiten quotes zetten!
  1. $result = mysql_query("SELECT * FROM categorie WHERE cat_afd_naam ='".$afd_naam."'", $db) or die ("FOUT: " . mysql_error());
  2. while (list($afd_id, $afd_naam) = mysql_fetch_row($result))
  3. {
  4. echo("<option value='".$afd_naam."'>".$afd_naam."</option>\n");
  5. }


Ten tweede, zorg dat die tweede lijst nog niet 'aangemaakt' is zolang er nog niet uit de eerste lijst gekozen is. Als er uit de eerste lijst gekozen is, gebruik je die waarde in je query. En de resultaten daarvan gebruik je om de tweede lijst aan te maken en te tonen.
Offline marc9990 - 01/10/2008 14:49
Avatar van marc9990 Nieuw lid Dat is het juist, hoe belet ik dat de tweede lijst wordt aangemaakt, alvoor de eerste is gekozen.

In een functie of zo zetten?
de tweede slectielijst mag enkel na keuze in eerste selectie lijst worden gemaakt.

Ik dacht er even aan lijst 1 en lijst 2 in array's te zetten maar weet niet goed hoe
Offline Joost - 01/10/2008 15:05 (laatste wijziging 01/10/2008 15:06)
Avatar van Joost PHP expert JavaScript. 

Je moet werken met de onChange event, en dan met display: none; en dergelijke.
Offline Kr4nKz1n - 01/10/2008 15:06
Avatar van Kr4nKz1n Onbekend Dus je selecteert een afdeling daarna zie je in de volgende select box de categorieen?

Kijk eens naar optgroup. (HTML)
Offline Abbas - 01/10/2008 15:41
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb een eenvoudig scriptje geschreven om te laten zien hoe het kan (zonder JavaScript). Het is zeker niet perfect, maar misschien krijg je zo een idee van hoe je het wel kan oplossen! 

Link: http://plaatscode.be/31057/
Offline marc9990 - 03/10/2008 18:49
Avatar van marc9990 Nieuw lid De optgroup functie lijkt inderdaad iets.
Heb dat ook terug gevonden met een praktisch voorbeeld in het boek webdesign met php 5.

Laat je weten hoe het verloopt
Offline Mythix - 06/10/2008 14:55 (laatste wijziging 06/10/2008 16:15)
Avatar van Mythix Nieuw lid
titjes schreef:
Allereerst, in je eerste stukje code: variabelen buiten quotes zetten!


even ter info, als je dubbele quotes gebruikt mag je variabelen gebruiken in je string

  1. <?php
  2. $naam = 'John';
  3. $achternaam = 'Doe';
  4. $adres['straat'] = 'Foobar';
  5.  
  6. echo "$naam, $achternaam"; // print John, Doe
  7. echo "woont in {$adres['straat']}"; //print woont in Foobar
  8.  
  9. //werkt niet:
  10. echo '$naam';


<option value='".$afd_naam."'> is niet correct aangezien w3 dubbele quotes aanraad bij het defineren van attributen dus:
<option value=\"".$afd_naam."\">

(bij XHTML iig => is afkooksel van XML)

Citaat:
Rens edit:
Het mag inderdaad ja, maar nog word het afgeraden om het zo te doen...


Eigen meningen zijn deel van de discussie, en horen volgens mij niet echt thuis in iemands posts, maar mee in de lijst van replies.

verder heb ik al een flink aantal boeken gelezen ivm PHP en frameworks die gebruik maken van php, ik heb al met verschillende frameworks gewerkt, én er zelf een ontwikkeld. Ik heb dit nog geen enkele coding standard weten afraden, alsook de php.net website niet. om deze functionaliteit te bevorderen zijn zelfs de {} toegevoegd voor het invoegen van arrays
Offline Kr4nKz1n - 06/10/2008 16:18
Avatar van Kr4nKz1n Onbekend Mythix, het klopt dat het kan/mag, maar leer het a.u.b. mensen niet aan. Erg onoverzichtelijk. Sowieso worden ze nu niet gehighlight.

Ik kan geen voordelen verzinnen waarom je ze gewoon tussen quotes zou zetten.
Offline Mythix - 06/10/2008 16:26 (laatste wijziging 06/10/2008 16:29)
Avatar van Mythix Nieuw lid klopt dat het niet gepast is in alle gevallen, maar het akn een handige shortcut zijn om betrouwbare data in een string te steken in bv een loop om rijen van kleur te laten wijzigen:
  1. echo "<td class=\"$class\">";
  2. //vs
  3. echo "<td class=\"".$class."\">";

Hier zou het bijvoorbeeld al een goede zaak zijn, wat natuurlijk niet de bedoeling is, is om onbetrouwbare data rechtstreekt te outputten
  1. //dit mag dus niet
  2. $sql = "SELECT * FROM table WHERE field=$value;"
  3. //dit is correct
  4. $sql = "SELECT * FROM table WHERE field=".mysql_escape_string( $value ).";"


Programmeurs hoeven zich niet voor niets te overwerken, en code moet inderdaad leesbaar blijven, maar daarvoor hoef je niet alle shortcuts in de vuilbak te gooien... Je hoeft het enkel verstandig te gebruiken
Offline Kr4nKz1n - 06/10/2008 16:29 (laatste wijziging 06/10/2008 16:30)
Avatar van Kr4nKz1n Onbekend Je vergeet er 1

  1. echo '<td class="'.$class.'">';


Al is een stuk netter (vind ik ja).

Edit
in je voorbeeld met de query ga je een fout krijgen met die ;.
Die hoort daar niet na mijn weten.
Offline Mythix - 06/10/2008 16:33 (laatste wijziging 06/10/2008 16:41)
Avatar van Mythix Nieuw lid kan kloppen, maar is meer voorkeur, en zo kan je voor elk voorval een andere voorkeur hebben

  1. echo '<select onsubmit="alert(\' '.$error.' \')">';
  2. //vs
  3. echo "<select onsubmit=\"alert('$error')\">";


edit: SQLquery wordt afgesloten met een ; maar is niet verplicht
  1. //begin transaction
  2. $sql = "BEGIN;";
  3. //doe eerste query
  4. $sql .= "UPDATE row1;";
  5. //stoppen indien update1 faalt
  6. $sql .= "ROLLBACK;";
  7. //zoniet row2 updaten
  8. $sql .= "UPDATE row2;";
  9. //als beide queries slagen, databaseopslaan
  10. $sql .= "COMMIT;";

Offline Kr4nKz1n - 06/10/2008 16:41 (laatste wijziging 06/10/2008 16:43)
Avatar van Kr4nKz1n Onbekend Dat is volgens mij om meerdere queries in 1 uit te voeren, wat niet werkt zover ik weet.

Edit
Miss. dan toch maar weer eens proberen.
Offline Rens - 06/10/2008 16:43
Avatar van Rens Gouden medaille

Crew algemeen
Het kan wel, probeer het maar eens in phpMyAdmin.
Alleen PHP.net: mysql_query ondersteunt dit niet...
Offline Kr4nKz1n - 06/10/2008 16:44
Avatar van Kr4nKz1n Onbekend Ja dat bedoelde ik ook Rens. Dus heb ik er nog vrij weinig aan.
Offline Mythix - 06/10/2008 16:44 (laatste wijziging 06/10/2008 16:50)
Avatar van Mythix Nieuw lid je kan zoveel queries achter elkaar in een string stoppen als je wil, zolang je elke query met een ; afsluit
beste voorbeeld is een sql export van je phpmyadmin

mysqli

edit: nvm kan hier ook niet denk ik
edit: whoops, yes it does multiquery
Offline Kr4nKz1n - 06/10/2008 16:53 (laatste wijziging 06/10/2008 16:53)
Avatar van Kr4nKz1n Onbekend Kzie idd geen voorbeeld of uitleg erover.

Edit
Special function 
Offline Mythix - 06/10/2008 16:59
Avatar van Mythix Nieuw lid Zit standaard in een distro van php 5 als ik me niet vergis.
iig om terug naar de bron van het probleem te gaan, query afsluiten met een semicolon zal dus geen fout opleveren, php commando niet afsluiten met een semicolon zoals ik daar deed zal dus wel een parse error opleveren 
Offline neetjedem - 25/10/2008 13:16 (laatste wijziging 25/10/2008 20:18)
Avatar van neetjedem Nieuw lid Het kan ook zo (zonder PHP en MySQL:

dit in head:

  1. <script language="Javascript">
  2. <!--
  3. function latenzien(id,veld,waarde)
  4. {
  5.  
  6. x = document.formulier.elements[veld].selectedIndex;
  7. if (document.formulier.elements[veld].options[x].text == waarde)
  8. {document.getElementById(id).style.display = 'block';}
  9. else
  10. {document.getElementById(id).style.display = 'none';}
  11. }
  12. -->
  13. </script>


dit in form:

  1. <select name="Soort" onchange="latenzien('div_attracties',this.name,'Attracties'),latenzien('div_beurs',this.name,'Beurs'),latenzien('div_braderie',this.name,'Braderie')">
  2. <option>Kies hier het soort aktiviteit</option>
  3. <option value="Attracties">Attracties</option>
  4. <option value="Beurs">Beurs</option>
  5. <option value="Braderie">Braderie</option>
  6. </select>
  7. <div id="div_attracties" class="verborgen">
  8. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Circus" />
  9. Circus</label>
  10. <br />
  11. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Kermis" />
  12. Kermis</label>
  13. </div>
  14. <div id="div_beurs" class="verborgen">
  15. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="AutoMotor" />
  16. Auto's/Motoren</label>
  17. <br />
  18. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Boeken" />
  19. Boeken</label>
  20. <br />
  21. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="BootJacht" />
  22. Boten / Jachten</label>
  23. <br />
  24. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="carriere" />
  25. Carriëre</label>
  26. <br />
  27. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="diversen" />
  28. Diversen</label>
  29. <br />
  30. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Erotiek" />
  31. Erotiek</label>
  32. <br />
  33. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Hobby" />
  34. Hobby</label>
  35. <br />
  36. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Modelbouw" />
  37. Modelbouw</label>
  38. <br />
  39. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Vakantie" />
  40. Vakantie</label>
  41. <br />
  42. <input name="Sub_Cat" type="radio" id="Sub_Cat" value="Verzamel" />
  43. Verzamel</label>
  44. </div>



Enzovoort

kijk voor voorbeeld op:


http://www.aktiviteitenkalender.nl/add_event.php

en kies een soort aktiviteit.

titjes schreef:
2 zaken voor je!!!!!
1. FORUMREGELS LEZEN
2. CODETAGS GEBRUIKEN
Offline vinTage - 25/10/2008 13:22
Avatar van vinTage Nieuw lid Kan niet zeggen dat ik gecharmeerd ben van die site, evenals van je code hierboven...zie je nu zelf niet dat je code de hele layout om zeep helpt?
Codetags eromheen ....
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.304s