Hallo,

Ik heb een dropdownmenu en als ik daarin een van de waarden aanklik moet de volgende dropdown gevuld worden met waarden uit een database waarvan het type_id overeenkomt met de waarde uit het eerste menu.

Nu heb ik dit script geprobeerd: http://www.electrictoolbox.com/json-data-jquery-php-mysql/
Precies wat ik nodig heb, maar ik krijg het maar niet aan de praat.

Formulier:

...
<tr>
							<td>Type instituut:</td>
							<td><select name="type" id="instellingType" onchange="getInstituut(this.value)">
								<option value="----">Maak een keuze</option>
								<option value="2">MBO</option>
								<option value="3">HBO</option>
								<option value="4">Universiteit</option>
							</select></td>
							<td class="aanmeldenUitleg">Kies het type van je instituut</td>
						</tr>
						<tr>
							<td>Instituut:</td>
							<td><select name="instelling_id" id="instellingID"></select></td>
							<td class="aanmeldenUitleg">Kies de naam van je instituut</td>
						</tr>
..


Verwerk code:

<?php
$dsn = "mysql:host=XXXX;dbname=XXXX";
$username = "XXXX";
$password = "XXXX";

$pdo = new PDO($dsn, $username, $password);


$rows = array();
if(isset($_GET['instellingType'])) {
    $stmt = $pdo->prepare("SELECT DISTINCT(naam) as naam FROM instellingen WHERE type = ? ORDER BY naam ASC");
    $stmt->execute(array($_GET['instellingType']));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($rows);


?> 


Javascript code:

	<script type="text/javascript">
		function getInstituut() {
   
    $.getJSON('/get_instellingen.php', {instellingType:$('#instellingType').val()}, function(data) {

        var select = $('#instellingID');
        var options = select.attr('options');
        $('option', select).remove();

        $.each(data, function(index, array) {
            options[options.length] = new Option(array['naam']);
        });

    });

}

$(document).ready(function() {
	
	getInstituut();
	$('#instellingType').change(function() {
		getInstituut();
	});
	
});
		</script>


Hulp graag!
function dual_linked_select(
$table,            // Table to create linked selects from
$table_column_01,        // Root category
$table_column_02,        // Subcategory of the root category
$group_02_default_option_text    // Default option text for the group 2 select
)
{

// Define globals
    global $javascript;
    global $group_01_options;
    // Define variables
    $javascript = null; // Hold
    $group_01_options = null;//Hold

    $javascript .=<<<content
    function DefaultGroup2()
    {
        var x = document.getElementById("Group2");
        x.length = 0;
        VarGroup2 = document.getElementById("Group2");
        VarGroup2.options[VarGroup2.options.length] = new Option("$group_02_default_option_text","");
        document.getElementById("Group2").disabled = true;
    }

    function CheckGroup1Select()
    {
        // If no Group1 is selected clear the Group2 and set to default
        if(document.getElementById("Group1").value == "")
        {
        // Clear the Group2 select and set to default value
        DefaultGroup2();
        }

content;

// Javascript
    $group_01_query = "SELECT ".$table_column_01." FROM ".$table." GROUP BY ".$table_column_01;
    $group_01_result = mysql_query($group_01_query) or die(mysql_error());
    while($group_01 = mysql_fetch_array($group_01_result))
    {
        $group_01_options .= '<option value="'.$group_01[$table_column_01].'">'.$group_01[$table_column_01].'</option>'."\r\n";

        $javascript .=<<<content
        else if(document.getElementById("Group1").value == "$group_01[$table_column_01]")
        {
            // Clear the Group2 and set to default value
            DefaultGroup2();
            // Set variable options for Group2 select
            VarGroup2 = document.getElementById("Group2");

content;

        $group_02_query = "SELECT ".$table_column_02." FROM ".$table." WHERE ".$table_column_01." = '".$group_01[$table_column_01]."' GROUP BY ".$table_column_02;
        $group_02_result = mysql_query($group_02_query) or die(mysql_error());
        while($group_02 = mysql_fetch_array($group_02_result))
        {
            $javascript .='            VarGroup2.options[VarGroup2.options.length] = new Option("'.$group_02[$table_column_02].'","'.$group_02[$table_column_02].'");'."\r\n";
        }

            $javascript .=<<<content
            document.getElementById("Group2").disabled = false;

        }

content;
    }
        $javascript .='    }'."\r\n";

} // End of dual_linked_selects function
?>

<?
// execute dual_linked_selects_function
dual_linked_select('regios','Provincie','Gemeente','Gemeente'); 
?>


<select id="Group1" name="group1" onChange="CheckGroup1Select(this);">
<option value="">Provincie</option>
<? echo $group_01_options; ?>
</select>
<select id="Group2" name="group2"><option value="">Gemeente</option></select>


hier een voorbeeldje hoe ik een dropdown vul van uit database weet niet of een goede manier is maar in ieder geval werkt dit
Het gaat niet om vullen uit database, maar gaat om updaten van een 2e menu adhv waarden uit het eerste menu.
tja mijn eerste waardes komen ook uit database vandaar :-)
Ik snap je niet of jij snapt mij niet.

Dit heb ik:


<select name="type">
<option value="1">1</option>
<option value="2">2</option>
</select>


Als men 1 selecteert wil ik in het 2e dropdown
alles weergeven uit MySQL query waarbij type=1

En bij 2, type=2
@Matthijs

Er zijn twee mogelijkheden om dit voor elkaar te krijgen.

1:

Je selecteer alle data uit de database en zet een div met alle informatie daarin. Als classname van de div zet je de value van de dropdown box met eventueel een prefix.
Standaard zet je 'alle' divs op display none. Zodra je iets selecteert laat je de desbetreffende div tonen.

2:

Aan de hand van de geselecteerde value uit de drop downbox een ajax call.
Dit kan je weer splitsen in jQuery.getJson({}); of $.Ajax({})

Over je code:

Wat geeft de json_encode? En is de javascript:data leeg? Kijk anders even in firebug hoe ofwat (omtrent de ajax / json call)

Overigens: $(document).ready(function() {} is uit 19 noach.. $(function() {{); is van deze tijd.

Volg je het?
@Niels
Thnx. Eerste optie lijkt me de makkelijkste, maar niet de meest nette.

Over mijn code, json_encode geeft gewoon alle waarden in de vorm [{"naam":"XXX"},... enz

Reageren