selectieboxen koppelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Karin php

Karin php

12/08/2010 12:20:12
Quote Anchor link
Wie o wie? Ik heb een mysql database aan een site gekoppeld met zoekvelden waarbij je met dropdown boxen een keuze maakt voor items uit de database. Dit werkt goed, maar nu wil ik de selectieboxen koppelen: dus als je in de selectiebox provincie ‘Gelderland’ selecteert dat je dan in de selectiebox plaats alleen nog maar plaatsen uit de provincie Gelderland krijgt, die inde mysql-tabel deprovincie-id van Gelderland hebben. Ik wil er ook nog een derde box aan koppelen met items uit die plaats. Dit lijkt vrij simpel maar ik krijg het niet voor elkaar. Ik kom nergens een geschikt voorbeeld tegen. Heb ergens gelezen dat het met AJAX moet, maar de voorbeelden die ik daarvan tegenkom werken niet met mysql. Weet iemand hoe je dit eenvoudig kan doen?
 
PHP hulp

PHP hulp

14/03/2025 03:56:28
 
Obelix Idefix

Obelix Idefix

12/08/2010 14:25:34
 
Karin php

Karin php

17/08/2010 22:13:26
Quote Anchor link
ik had zelf een andere gevonden, waar ik mee aan de gang ben gegaan. Alleen - uiteraard- werkt het niet. Ik zal het hier kopieren, hopelijk kan iemand de fout er uit halen.

Het bestaat uit meerder bestanden. allereerst natuurlijk het basisbestand index:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
  require('header.php');
  include ('func.php');
  include ('db.php');
?>


<form id="selecteren" name="selecteren" action="select.php" method="post">


Provincie:
<select id="drop_1" name="provincie">
<option value="" selected="selected" disabled="disabled">Kies een provincie... </option>';
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
       Locatie();
 ?>


<span id="wait_1" style="display: none;"></span>
<span id="result_1" style="display: none;"></span>
<span id="wait_2" style="display: none;"></span>
<span id="result_2" style="display: none;"></span>

<input type="submit" value="Zoek!" />
</form>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
  require('footer.php');

?>


daarna de functies in func.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
//**************************************
//     Page load dropdown results     //
//**************************************

function Locatie()
{

  $sql = 'SELECT id, naam FROM provincie ORDER BY naam';
  $result = mysql_query($sql) or trigger_error( mysql_error() );
      
  if (mysql_num_rows($result)>0){
    while ($rij = mysql_fetch_array($result)) {
      echo '<option value="'.$rij['id'].'">'.$rij['naam'].'</option>';
    }
  }

 echo  '</select>';

//**************************************
//     First selection results     //
//**************************************

 if($_GET['func'] == "drop_1" && isset($_GET['func'])) {
   drop_1($_GET['drop_var']);
 }
}

function
drop_1($drop_var)
{
  
    include_once('db.php');
    $sql = "SELECT id, plaats.naam FROM plaats ORDER BY plaats.naam WHERE provincie_id='$drop_var'";
    $result = mysql_query($sql) or trigger_error( mysql_error() );
      
    echo '<select name="stad" id="drop_2">
          <option value=" " disabled="disabled" selected="selected">kies een plaats...</option>'
;

    if (mysql_num_rows($result)>0){
      while ($rij = mysql_fetch_array($result)) {
       echo '<option value="'. $rij['id']. '">'. $rij['plaats.naam']. '</option>';
    }}

    
    echo '</select>';
    
    echo "<script type=\"text/javascript\">
      $('#wait_2').hide();
      $('#drop_2').change(function(){
        $('#wait_2').show();
        $('#result_2').hide();
        $.get(\"func.php\", {
          func: \"drop_2\",
          drop_var: $('#drop_2').val()
        }, function(response){
          $('#result_2').fadeOut();
          setTimeout(\"finishAjax_tier_three('result_2', '\"+escape(response)+\"')\", 400);
        });
        return false;
      });
    </script>"
;



//**************************************
//     Second selection results     //
//**************************************

  if($_GET['func'] == "drop_2" && isset($_GET['func'])) {
   drop_2($_GET['drop_var']);
  }
}
function
drop_2($drop_var)
{
  
    include_once('db.php');
  $sql = "SELECT id, filiaal.naam FROM filiaal WHERE plaats_id='$drop_var' ORDER BY filiaal.naam";
  $result = mysql_query($sql) or trigger_error( mysql_error() );
    
    echo '<select name="filiaal" id="drop_3">
          <option value=" " disabled="disabled" selected="selected">Kies een filiaal... </option>'
;

  if (mysql_num_rows($result)>0){
    while ($rij = mysql_fetch_array($result)) {
      echo '<option value="'. $rij['id']. '">'. $rij['filiaal.naam']. '</option>';
    }
  }

     echo '</select>';
}

?>


en de header:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
  require("config.php");
  $db = mysql_connect($dbhost, $dbuser, $dbpassword);
  mysql_select_db($dbdatabase, $db);
  setlocale(LC_ALL, 'nld_nld');
?>


<html>
<head>
<title>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $config_sitename; ?>
</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css"><link/>
</head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
$('#wait_1').hide();
$('#drop_1').change(function(){
$('#wait_1').show();
$('#result_1').hide();
$.get("func.php", {
func: "drop_1",
drop_var: $('#drop_1').val()
}, function(response){
$('#result_1').fadeOut();
setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
});
return false;
});
});

function finishAjax(id, response) {
$('#wait_1').hide();
$('#'+id).html(unescape(response));
$('#'+id).fadeIn();
}
function finishAjax_tier_three(id, response) {
$('#wait_2').hide();
$('#'+id).html(unescape(response));
$('#'+id).fadeIn();
}
</script>


<body>

<div id="container">

<div id="main">

en de footer:

</div> <!--main-->

</div><!--container-->

<div id="footer">&copy; 2010
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $config_author; ?>
</div>



</body>
</html>
 
Jeffrey boud

jeffrey boud

26/08/2010 10:44:57
Quote Anchor link
Heeft iemand hier al een oplossing voor gevonden heb zelf ook zo een soort probleem
 
Tom Tom

Tom Tom

30/08/2010 10:18:39
Quote Anchor link
Ik ben ook bezig met het koppelen van selectieboxen op basis van database gegevens. Ik heb inmiddels een werkend voorbeeldje gemaakt welke alleen dient als hulpmiddel bij het oplossen van jullie probleem. Db connectie, db selectie en queries heb ik even achterwege gelaten. Ik maak gebruik van arrays met mogelijke uitkomsten van een querie.


index.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$automerken
= array(audi, vw);

?>


<html>
<head>
<title>Cars</title>
<script type="text/javascript">
function showCar(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getcar.php?car="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="car" onchange="showCar(this.value)">
<option value=''>Select a car</option>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
        foreach ($automerken as $automerk)
        {

          echo '<option value='. $automerk .'>'. $automerk .'</option>';
        }

      ?>

</select>
</form>
<br />
<div id="txtHint">Hier verschijnt een tweede selectie veld.</div>

</body>
</html>


getcar.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$car
=$_GET["car"];

//Hieronder normaal gesproken db connectie, db selectie, querie etc

//Mogelijke resultaten queries

$modellenAudi = array(A3, A4, A5);
$modellenVW = array(Golf, Scirocco, Tiguan);

//Mogelijke querie resultaten teruggeven in nieuwe selectielijst
echo '<select name = "carModel">
<option value = "">Select a model</option>'
;

if ($car == 'audi')
{

  foreach ($modellenAudi as $modelAudi)
  {

    echo '<option value = '. $modelAudi .'>'. $modelAudi .'</option>';
  }
}

elseif ($car == 'vw')
{

  foreach ($modellenVW as $modelVW)
  {

    echo '<option value = '. $modelVW .'>'. $modelVW .'</option>';
  }          
}

echo '</select>';

?>
Gewijzigd op 30/08/2010 10:19:34 door Tom Tom
 
Marco V

Marco V

22/11/2010 20:42:13
Quote Anchor link
Ik heb een mooie beschrijving gevonden bij w3schools, ik vraag me echter af... kan je dit ook combineren?

Ik probeer een selectiebox "Klanten" / "Leveranciers" te maken, afhankelijk van welke radiobutton wordt geklikt. So far so good.

Vervolgens wil ik nu de contactpersonen bij het gekozen bedrijf (een leverancier of klant staan in een aparte tabel, de bijbehorende contactpersonen idem.) weergeven in een tweede selectiebox.

Kort samengevat: Radiobutton (Klant of Leverancier) > Dynamische selectiebox (Bedrijven) > Dynamische selectiebox (Contactpersonen)

Simpel gedacht, heb ik geprobeerd om het onchange event toe te voegen aan de eerste selectiebox die ik creeer, maar dit lijkt niet te werken!? Iemand tips? Ik zoek me suf naar een werkend voorbeeld.
Gewijzigd op 22/11/2010 20:49:24 door Marco V
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.