login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Chained select boxes

Offline Ultimatum - 19/02/2007 10:14
Avatar van UltimatumPHP expert Ik heb al intensief gezocht op google en zelfs yahoo maar het is allemaal net niet wat ik zoek. Kan iemand mij helpen met het volgende

3 selectobxen, in de eerste staan continenten, aan de hand daarvan moeten de landen komen en daar weer van de plaatsen. Al is het maar in de richting wijzen van hoe ik de ene met de andere link via javascript/php en mysql. Alle continten/landen/plaatsen staan in de database..

22 antwoorden

Gesponsorde links
Offline Grayen - 19/02/2007 10:16
Avatar van Grayen PHP ver gevorderde staat er in die database ook bij elk land, en plaats waar hij bij hoort? dus staat er bijvoorbeeld bij de stad Utrecht, dat hij in het land Nederland ligt?
Offline Ultimatum - 19/02/2007 10:36
Avatar van Ultimatum PHP expert Ja, de continent hebben allemaal een id, in landen zit een veld die gelinkt is naar het desbetreffende contintent en bij plaasten zit een id die weer naar een land linkt dus alles is wel verbonden met elkaar
Offline Thomas - 19/02/2007 12:35
Avatar van Thomas Moderator divs tonen en verbergen op grond van continent / land.

Gebruik je een template-engine?
Offline Ultimatum - 19/02/2007 13:28
Avatar van Ultimatum PHP expert Nee dat gebruik ik niet
Offline Thomas - 19/02/2007 15:12 (laatste wijziging 19/02/2007 16:20)
Avatar van Thomas Moderator *zucht*

Het principe is als volgt:

Maak 2 CSS-classes:
  1. .show
  2. {
  3. display: inline;
  4. visibility: visible;
  5. }
  6.  
  7. .hide
  8. {
  9. display: none;
  10. visibility: hidden;
  11. }


Maak wat JavaScript functies:
  1. // show or hide one div
  2. function showdiv(thediv, show)
  3. {
  4. var div = document.getElementById(thediv);
  5.  
  6. if(div != null)
  7. {
  8. div.className = (show) ? "show" : "hide";
  9. }
  10. }
  11.  
  12. // show or hide multiple divs
  13. function showdivs(alldivs, show)
  14. {
  15. for(div in alldivs)
  16. {
  17. showdiv(alldivs[div], show);
  18. }
  19. }
  20.  
  21. // switch to a div
  22. function showlayer(id, ids)
  23. {
  24. showdivs(ids, false);
  25. showdiv(id, true);
  26. }


Nu, genereer je formulier met PHP of wat dan ook, waar je landen (van een continent) in divs zet die standaard verborgen zijn. Het ID van zo'n div is het id van het continent, voorafgegaan door een standaard voorvoegsel, bijvoorbeeld "continent".

De landen div van continent XX luidt dan bijvoorbeeld:
  1. <div class="hide" id="continent_XX">
  2. ... hier je dropdown met landen van continent XX ...
  3. </div>


In je continenten-div zet je een onchange-event:
  1. <select name="continent" onchange="showlayer('continent_'+this.value, LIJST)">
  2. ... lijst van continenten ...
  3. </select>


LIJST is een array (in javascript) met de namen van alle continent-divs. Alle divs worden eerst verborgen, en dan wordt de geselecteerde div getoond.

Dit principe kun je "stapelen" en gaat op dezelfde wijze van landen > plaatsen.

Zie voor een 2-dimensionaal voorbeeld hier (het snelzoekmenu).
Offline Ultimatum - 20/02/2007 10:10 (laatste wijziging 20/02/2007 10:10)
Avatar van Ultimatum PHP expert Bedankt voor je hulp maar het werkt nog niet helemaal 

Elke keer als ik nu een ander continent kies dan komt de selectbox eronder en het moet dus dat er maar 1 selectbox per x is

  1. <tr>
  2. <td class="left"><?= $language[7] ?></td>
  3. <td class="right">
  4. <?php
  5. $i = 1;
  6. while($i <= 6)
  7. {
  8. $select = $db->Query("SELECT id, country_". $_SESSION['lang'] ."
  9. FROM countries
  10. WHERE continent = ". $i ."
  11. ORDER BY id ASC");
  12. $i++;
  13. ?>
  14. <div class="hide" id="continent_<?= $i ?>">
  15. <select name="Country_<?= $i ?>" size="1">
  16. <?php
  17. while($ass = $db->Fetch_Assoc($select))
  18. {
  19. ?>
  20. <option value="<?= $ass['id'] ?>"><?= $ass['country_'. $_SESSION['lang'] .''] ?></option>
  21. <?php
  22. }
  23. ?>
  24. </select>
  25. </div>
  26. <?php
  27. }
  28. ?>
  29. </td>
  30. </tr>


Continent kan een nummer van 1 tot 6 zijn..
Offline Thomas - 20/02/2007 10:17 (laatste wijziging 20/02/2007 10:19)
Avatar van Thomas Moderator In het onchange-event van je continenten roep je de showlayer()-functie aan.

Voor de tweede parameter moet je een array aanmaken in JavaScript, waarin alle id's van de continenten zitten:

  1. var cont_list = new Array("continent_1", "continent_2", "continent_3", "continent_4", "continent_5");


Het onchange-event wordt dan:
  1. onchange="showlayer('continent_'+this.value, cont_list)"


Dit zorgt ervoor dat alle continenten eerst verborgen worden (cont_list), en vervolgens de div van het juiste continent getoond wordt ('continent_'+this.value).
Offline Ultimatum - 20/02/2007 10:20
Avatar van Ultimatum PHP expert Dat werkt nog steeds niet. Dit is de code voor de selectbox van de landen als continent, mss zit daar wel een fout 

http://plaatscode.be/4290/

En die array staat boven in mijn head bij de functies dus dat werkt iig wel
Offline Thomas - 20/02/2007 10:25
Avatar van Thomas Moderator Ik zou $i pas verhogen aan het einde van je while-lus .
Offline Ultimatum - 20/02/2007 10:30
Avatar van Ultimatum PHP expert Slim 

Maar hij doet het nog steeds niet helemaal
Mocht je de pagina willen zien klik dan hier 
Offline Thomas - 20/02/2007 10:39
Avatar van Thomas Moderator De quotes van het continent-array stonden verkeerd, dit was opgelost in mijn edit. Je moet niet alles mindless copy-pasten .

Zelfs ik maak fouten :].
Offline Ultimatum - 20/02/2007 10:47 (laatste wijziging 20/02/2007 10:54)
Avatar van Ultimatum PHP expert Ey jij bent toch de javascript guru hier , ik snap er geen zak van..

Maar het is nu opgelost

Bedankt ^^

Edit: Nog 1 vraag 
Hoe kan ik zorgen dat als er nog geen continent is gekozen er staat iets van kies eerst een continent om door te gaan en als je dan een continent kiest de tekst verdwijnt en de selectbox er komt?
Offline Thomas - 20/02/2007 11:01
Avatar van Thomas Moderator Mwa, gewoon een option toevoegen zonder value of met value 0. Er wordt toch gecontroleerd of de geselecteerde optie een bestaande div heeft, dus als je weer deze optie kiest, verdwijnt het eerder geselecteerde continent.

Of je toont standaard het eerste (=geselecteerde) continent?
Dus je zet de Afrika-div-class op "show".
Offline Ultimatum - 20/02/2007 11:06 (laatste wijziging 20/02/2007 11:12)
Avatar van Ultimatum PHP expert Maar nu als ik op de site kom staat er helemaal geen selectbox, dus op die plek er dan nog niet

En als ik nou zeg maar 100 steden heb hoe ga ik dat dan in een array zetten? Want mensen kunnen ook een stad toevoegen als die niet in de lijst staat. En moet een lijst maken met steden per land maar waar kan ik controleren welk land er is geselecteerd om de juiste selectbox weer te geven?
Offline Thomas - 20/02/2007 11:36
Avatar van Thomas Moderator
Citaat:
Maar nu als ik op de site kom staat er helemaal geen selectbox, dus op die plek er dan nog niet
Als je zelf aangeeft wat het default continent moet zijn, kun je toch wel een div de juiste klasse geven?

Citaat:
En als ik nou zeg maar 100 steden heb hoe ga ik dat dan in een array zetten?
Worden steden dan nog verder onderverdeeld?
Je zou zelf een functie kunnen maken die een range afloopt, met een bepaald voorvoegsel? Echt, als je er ff over nadenkt kan dit makkelijk opgelost worden, en heb je niet eens arrays nodig, althans geen hard-coded arrays die buiten een functie rondzwerven.

Citaat:
En moet een lijst maken met steden per land maar waar kan ik controleren welk land er is geselecteerd om de juiste selectbox weer te geven?
Op dezelfde wijze van continent > landen.

Ik denk dat ik je hiermee meer dan gemiddeld heb geholpen, dus ik verwacht van jou nu ook enige inventiviteit en een serieuze poging hier zelf verder op te borduren.

En anders is er altijd nog samenwerken.

Als dit een betaalde klus is zie ik niet waarom ik het werk voor jou zou doen.
Offline Ultimatum - 20/02/2007 11:43
Avatar van Ultimatum PHP expert Oke ik begrijp het wel maar javascript is niet mij gebied 

Verder snap ik het aanknopingspunt tussen het land en de steden niet want normaal zou i kdat met $_GET['id'] kunne/gaan doen maar dat kan nu moeilijk. Mijn eerste vraag was beetje dom , is nu al gefixed 
Offline extranion - 23/02/2007 12:19 (laatste wijziging 26/02/2007 09:45)
Avatar van extranion Nieuw lid heb nu het script stuk veranderd alleen het werkt nog niet helemaal
als je namelijk naar koppeldomein gaat en je wil weer terug naar los domein moet het kopppeldomein divje verdwijnen.

helaas gebeurt dit niet, wat zie ik over het hoofd?

code: http://www.plaatscode.be/4348/

alvast bedankt 


edit: mijn probleem heb ik zelf al opgelost 
Offline Thomas - 23/02/2007 12:59
Avatar van Thomas Moderator Waarom verander je de implementatie van de functies zo, dat ze hard-coded worden? Het idee van functies is juist dat ze "universeel" toepasbaar zijn.

Eerst zit je de code te vern...prutsen, en dan vraag je waarom het niet werkt...

Volgens mij verbergt ie eerst de koppeldomein[2]-div, maar vertoont ie deze vervolgens weer. De fout zit waarschijnlijk in je eigen uitbreiding.

Happy debugging.
Offline extranion - 23/02/2007 13:27 (laatste wijziging 23/02/2007 13:41)
Avatar van extranion Nieuw lid ik wil ze veranderen met php en aangezien ik al een systeem heb die die waardes nodig heeft moet ik bepaalde dingen zo laten.

en ik moet ook meerdere selectboxen hebben die onder mekaar staan.
Offline marten - 23/02/2007 13:45
Avatar van marten Beheerder een andere vraag rondom chained select boxen.

Ik heb een drietal selectboxen. Wanneer in de eerste selectbox iets gewijzigd word (dus selectindex = 0) dan moet hij in de tweede en derde ook selectindex 0 doen. Maar word dit 1 dan moet hij er van alle drie 1 van maken. Hoe kan ik dit het beste doen?
Offline extranion - 26/02/2007 09:44
Avatar van extranion Nieuw lid mijn probleem heb ik zelf al opgelost 
Offline marten - 26/02/2007 10:08
Avatar van marten Beheerder me2
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.252s