Chained select (dynamische check / selectboxen)
Ik wil met een radiobutton seleceteren welke bedrijven in een selectbox moeten verschijnen; klanten of leveranciers of bedrijven (meerdere bv's zeg maar)
Dit lukt me met een functie die ik hier heb gevonden.
Vervolgens wil ik, zodra een bedrijf wordt geselecteerd in de selectbox, de bijbehorende contactpersonen laden in een tweede selectbox. Dit laatste wil me niet lukken!
Wat ik heb geprobeerd is om een zelfde functie (met een andere naam en query) voor de contactpersonen aan de - dynamisch gegenereerde - selectbox met bedrijven toe te kennen, maar deze functie lijkt niet te worden aangeroepen!? Kan dit uberhaubt?
Ik ben ook al aan het experimenteren geweest met Jquery, maar daar kan ik geen chocola van maken (ben daarmee niet bekend) en bovendien lijkt het dat dan de spry-tabs niet meer werken.
Tot dusver werkt dus alleen de bedrijven selectie, daar stop ik de resultaten van de query in een array;
$geadresseerde[]['ID'] // de referentie naar contactpersoon ID
$geadresseerde[]['REFTABLE'] // de referentie naar contactpersonen tabel
$geadresseerde[]['BEDRIJF'] // de bedrijfsnaam (komt dus in de selectie)
$geadresseerde[]['RELID'] // de referentie naar bedrijf ID (komt als value in de selectie)
Vervolgens wil ik nu in een tweede selectbox, nadat een bedrijf is geselecteerd, de contactpersonen bij het bedrijf weergeven. Aangezien de gegevens in een array zitten lijkt me dat niet zo moeiliijk, als ik de functie maar kan aanroepen?
Gewijzigd op 23/11/2010 11:37:04 door Marco V
Iets meer code?
Om het e.e.a. wat overzichtelijker te maken heb ik zowel HTML als PHP binnen de PHP tags gezet, maar dat snap je wel lijkt me!?
*** Vertrekpunt is een pagina waarin drie radiobuttons staan ***
De radiobuttons triggeren de eerste functie met een "onclick" event
(NB: de volgende code is dus eigenlijk HTML!)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
<input name="TABELBEDRIJF" type="radio" id="DBKLT" value="DBKLT" onclick="showCompany(this.value)" />
<label for="DBKLT">Klant</label></td>
// een div waarin de selectbox met bedrijven komt
<div id="txtBedrijf">Selecteer eerst klant, leverancier of medewerker</div>
<input name="TABELBEDRIJF" type="radio" id="DBLEV" value="DBLEV" onclick="showCompany(this.value)"/>
// een div waarin de selectbox met contactpersonen komt
<div id="txtContactpersoon"></div></td>
<input name="TABELBEDRIJF" type="radio" id="BEDRIJFSGEGEVENS" value="BEDRIJFSGEGEVENS" onclick="showCompany(this.value)"/>
?>
<input name="TABELBEDRIJF" type="radio" id="DBKLT" value="DBKLT" onclick="showCompany(this.value)" />
<label for="DBKLT">Klant</label></td>
// een div waarin de selectbox met bedrijven komt
<div id="txtBedrijf">Selecteer eerst klant, leverancier of medewerker</div>
<input name="TABELBEDRIJF" type="radio" id="DBLEV" value="DBLEV" onclick="showCompany(this.value)"/>
// een div waarin de selectbox met contactpersonen komt
<div id="txtContactpersoon"></div></td>
<input name="TABELBEDRIJF" type="radio" id="BEDRIJFSGEGEVENS" value="BEDRIJFSGEGEVENS" onclick="showCompany(this.value)"/>
?>
*** DE EERSTE FUNCTIE, EEN KLANT, LEVERANCIER of BEDRIJF ***
De eerste functie in de <head> van de pagina
De eerste functie reset het resultaat van de tweede functie zodat de resultaten (contactpersonen) verdwijnen als er iets wordt veranderd.
(NB: de volgende code is dus eigenlijk HTML!)
Code (php)
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
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
<?php
<script type="text/javascript">
function showCompany(str)
{
if (str=="")
{
document.getElementById("txtBedrijf").innerHTML="";
document.getElementById("txtContactpersoon").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("txtBedrijf").innerHTML=xmlhttp.responseText;
document.getElementById("txtContactpersoon").innerHTML="";
}
}
xmlhttp.open("GET","bedrijf.php?bedrijf="+str,true);
xmlhttp.send();
}
</script>
?>
<script type="text/javascript">
function showCompany(str)
{
if (str=="")
{
document.getElementById("txtBedrijf").innerHTML="";
document.getElementById("txtContactpersoon").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("txtBedrijf").innerHTML=xmlhttp.responseText;
document.getElementById("txtContactpersoon").innerHTML="";
}
}
xmlhttp.open("GET","bedrijf.php?bedrijf="+str,true);
xmlhttp.send();
}
</script>
?>
*** HET PHP SCRIPT VAN DE EERSTE FUNCTIE ***
Code (php)
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
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
<?php
// eerst maken we een array met alle resultaten van klanten, leveranciers of bedrijven
$bedrijf=$_GET["bedrijf"];
$TABEL = $bedrijf;
// zet een hidden field met de tabelnaam voor de contactpersonen
if ($TABEL == "BEDRIJFSGEGEVENS") {
$hiddenfield = "MEDEWERKERS";
}
if ($TABEL == "DBKLT") {
$hiddenfield = "DBKCP";
}
if ($TABEL == "DBLEV") {
$hiddenfield = "DBLCP";
}
echo '<input name="TABEL" type="hidden" id="'.$hiddenfield.'" value="'.$hiddenfield.'" />';
// de query voor het vullen van de array
if ($TABEL == "BEDRIJFSGEGEVENS") {
$sql="SELECT WEBUSER.RELID, WEBUSER.REFTABLE, WEBUSER.REFID as ID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".BVCODE WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
} else {
$sql="SELECT WEBUSER.RELID, WEBUSER.REFTABLE, WEBUSER.REFID as ID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".ID WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
}
$result = mysql_query($sql);
$r=0;
while($row = mysql_fetch_array($result)) {
$r++;
$geadresseerde[$r]['ID'] = $row['ID'];
$geadresseerde[$r]['REFTABLE'] = $row['REFTABLE'];
$geadresseerde[$r]['RELID'] = $row['RELID'];
if ($row['NAAM1']) {
$bedrijf = $row['NAAM'].', '.$row['NAAM1'];
} else {
$bedrijf = $row['NAAM'];
}
$geadresseerde[$r]['BEDRIJF'] = $bedrijf;
}
// zet de array in SESSIE zodat deze later beschikbaar is voor contactpersonen
$_SESSION['TMP']['berichten'] = $geadresseerde;
// de query voor de selectbox
if ($TABEL == "BEDRIJFSGEGEVENS") {
$sql="SELECT DISTINCT WEBUSER.RELID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".BVCODE WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
} else {
$sql="SELECT DISTINCT WEBUSER.RELID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".ID WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
}
$result = mysql_query($sql);
echo '<select name="BEDRIJF" id="BEDRIJF" onclick="showUser(this.value)">';
echo '<option value="" disabled="disabled" selected="selected" >selecteer een bedrijf</option>';
while($row = mysql_fetch_array($result)) {
if ($row['NAAM1']) {
$bedrijf = $row['NAAM'].', '.$row['NAAM1'];
} else {
$bedrijf = $row['NAAM'];
}
echo '<option value="';
echo $row['RELID'];
echo '" '.$select.' >';
echo $bedrijf;
echo '</option>';
}
echo '</select>';
?>
// eerst maken we een array met alle resultaten van klanten, leveranciers of bedrijven
$bedrijf=$_GET["bedrijf"];
$TABEL = $bedrijf;
// zet een hidden field met de tabelnaam voor de contactpersonen
if ($TABEL == "BEDRIJFSGEGEVENS") {
$hiddenfield = "MEDEWERKERS";
}
if ($TABEL == "DBKLT") {
$hiddenfield = "DBKCP";
}
if ($TABEL == "DBLEV") {
$hiddenfield = "DBLCP";
}
echo '<input name="TABEL" type="hidden" id="'.$hiddenfield.'" value="'.$hiddenfield.'" />';
// de query voor het vullen van de array
if ($TABEL == "BEDRIJFSGEGEVENS") {
$sql="SELECT WEBUSER.RELID, WEBUSER.REFTABLE, WEBUSER.REFID as ID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".BVCODE WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
} else {
$sql="SELECT WEBUSER.RELID, WEBUSER.REFTABLE, WEBUSER.REFID as ID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".ID WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
}
$result = mysql_query($sql);
$r=0;
while($row = mysql_fetch_array($result)) {
$r++;
$geadresseerde[$r]['ID'] = $row['ID'];
$geadresseerde[$r]['REFTABLE'] = $row['REFTABLE'];
$geadresseerde[$r]['RELID'] = $row['RELID'];
if ($row['NAAM1']) {
$bedrijf = $row['NAAM'].', '.$row['NAAM1'];
} else {
$bedrijf = $row['NAAM'];
}
$geadresseerde[$r]['BEDRIJF'] = $bedrijf;
}
// zet de array in SESSIE zodat deze later beschikbaar is voor contactpersonen
$_SESSION['TMP']['berichten'] = $geadresseerde;
// de query voor de selectbox
if ($TABEL == "BEDRIJFSGEGEVENS") {
$sql="SELECT DISTINCT WEBUSER.RELID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".BVCODE WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
} else {
$sql="SELECT DISTINCT WEBUSER.RELID, ".$TABEL.".NAAM, ".$TABEL.".NAAM1 FROM WEBUSER INNER JOIN ".$TABEL." ON WEBUSER.RELID=".$TABEL.".ID WHERE WEBUSER.BLOCK = 'N' AND WEBUSER.RELTABLE = '".$TABEL."'";
}
$result = mysql_query($sql);
echo '<select name="BEDRIJF" id="BEDRIJF" onclick="showUser(this.value)">';
echo '<option value="" disabled="disabled" selected="selected" >selecteer een bedrijf</option>';
while($row = mysql_fetch_array($result)) {
if ($row['NAAM1']) {
$bedrijf = $row['NAAM'].', '.$row['NAAM1'];
} else {
$bedrijf = $row['NAAM'];
}
echo '<option value="';
echo $row['RELID'];
echo '" '.$select.' >';
echo $bedrijf;
echo '</option>';
}
echo '</select>';
?>
*** DE TWEEDE FUNCTIE, EEN CONTACTPERSOON BIJ GESELECTEERD BEDRIJF ***
De tweede functie in de <head> van de pagina
(NB: de volgende code is dus eigenlijk HTML!)
Code (php)
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
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
<?php
<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("txtContactpersoon").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("txtContactpersoon").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","contactpersoon.php?q="+str,true);
xmlhttp.send();
}
</script>
?>
<script type="text/javascript">
function showUser(str)
{
if (str=="")
{
document.getElementById("txtContactpersoon").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("txtContactpersoon").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","contactpersoon.php?q="+str,true);
xmlhttp.send();
}
</script>
?>
*** HET PHP SCRIPT VAN DE TWEEDE FUNCTIE ***
Code (php)
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
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
<?php
// haal $geadresseerde op uit de SESSIE
$geadresseerde = $_SESSION['TMP']['berichten'];
// $q is RELID (het geselecteerde ID van het bedrijf)
// $geadresseerde is een array met de gegevens
echo '<select name="GEADRESSEERDE" id="GEADRESSEERDE">';
echo '<option value="" disabled="disabled" >selecteer een contactpersoon</option>';
// Contactpersonen ophalen bij het geselecteerde bedrijf
$r=0;
$totaal=count($geadresseerde);
while ($r<$totaal) {
$r++;
$ID = $geadresseerde[$r]['ID'];
$TABEL = $geadresseerde[$r]['REFTABLE'];
$RELID = $geadresseerde[$r]['RELID'];
// alleen als RELID overeenkomt met het geselecteerde bedrijf
if ($RELID == $q) {
$sql="SELECT VOORNAAM, TUSSEN, ACHTERNAAM FROM ".$TABEL." WHERE ID = '".$ID."'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
// De naam van de contactpersoon samenvoegen
if ($row['TUSSEN']) {
$naam = $row['VOORNAAM'].' '.$row['TUSSEN'].' '.$row['ACHTERNAAM'];
} else {
$naam = $row['VOORNAAM'].' '.$row['ACHTERNAAM'];
}
}
$geadresseerde[$r]['NAAM'] = $naam;
if ($ID == $zoekwaarde) {
$select = 'selected="selected"';
} else {
$select = NULL;
}
echo '<option value="';
echo $ID;
echo '" '.$select.'>';
echo $naam;
echo '</option>';
}
}
echo '</select>';
?>
// haal $geadresseerde op uit de SESSIE
$geadresseerde = $_SESSION['TMP']['berichten'];
// $q is RELID (het geselecteerde ID van het bedrijf)
// $geadresseerde is een array met de gegevens
echo '<select name="GEADRESSEERDE" id="GEADRESSEERDE">';
echo '<option value="" disabled="disabled" >selecteer een contactpersoon</option>';
// Contactpersonen ophalen bij het geselecteerde bedrijf
$r=0;
$totaal=count($geadresseerde);
while ($r<$totaal) {
$r++;
$ID = $geadresseerde[$r]['ID'];
$TABEL = $geadresseerde[$r]['REFTABLE'];
$RELID = $geadresseerde[$r]['RELID'];
// alleen als RELID overeenkomt met het geselecteerde bedrijf
if ($RELID == $q) {
$sql="SELECT VOORNAAM, TUSSEN, ACHTERNAAM FROM ".$TABEL." WHERE ID = '".$ID."'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
// De naam van de contactpersoon samenvoegen
if ($row['TUSSEN']) {
$naam = $row['VOORNAAM'].' '.$row['TUSSEN'].' '.$row['ACHTERNAAM'];
} else {
$naam = $row['VOORNAAM'].' '.$row['ACHTERNAAM'];
}
}
$geadresseerde[$r]['NAAM'] = $naam;
if ($ID == $zoekwaarde) {
$select = 'selected="selected"';
} else {
$select = NULL;
}
echo '<option value="';
echo $ID;
echo '" '.$select.'>';
echo $naam;
echo '</option>';
}
}
echo '</select>';
?>
De functies geven het resultaat in een div zoals hier beschreven.
Toevoeging op 23/11/2010 14:28:22:
Goed het voorgaande werkt dus!
Ik ben er echter nog niet helemaal gelukkig mee...
aanpassingen (e.e.a. heb ik aangepast in het voorgaande script):
1) er zat een foutje in de tweede query, er ontbrak een ' quote.
2) de array $geadresseerde blijkt niet meer beschikbaar in de tweede functie/query, dus om dit op te lossen zet ik deze naar $_SESSION en haal ik m weer op uit $_SESSION in de tweede query.
3) de DISCTINCT query was niet juist waardoor dubbele resultaten in de selectbox kwamen (meerdere keren hetzelfde bedrijf)
Een probleem resteert:
Jullie begrijpen dat ik deze info eigenlijk niet in de $_SESSION wil hebben. Is hier een andere oplossing voor?
Gewijzigd op 23/11/2010 16:18:21 door Marco V