Problem mit doppelter combobox

PH

Legendäres Mitglied
Hallo, ich hoffe, es kann mir jemand helfen.

Ich versuche in einem Suchformular eine doppelte combobox zu bauen.
Es geht um den Klassiker Land/Region und beide Arrays sollen aus der MySQL Datenbank kommen.

Ich habe bereits eine Lösung, die mit HTML-Templates arbeitet, aber ich möchte keine Templates mehr verwenden.
Problem: ich habe wenig Ahnung von Javascripts, Arrays, usw.


Was ich heute habe:

Dieses Script im Head:
QUOTE <script language="Javascript">

var cats = new Array();

<!--Begincats-->
cats["{region_de}"] = "{region_id}";
<!--Endcats-->

function set_subcat(fform,llb1,llb2,ccats) {
lb1 = document.all[llb1];
lb2 = document.all[llb2];

index = lb2.selectedIndex;
if ( index<0 ) index = null;
if (lb2.options[index] != null) {
val = lb2.options[index].value;
} else {
val = null;
}

key=lb1.options[lb1.selectedIndex].value.toString().split('#')[0];

for (i=document.forms[fform].elements[llb2].options.length; i >=0 ; i--) {
document.forms[fform].elements[llb2].options=null;
}
var i = 1 ;
document.forms[fform].elements[llb2].options = new Option("","",false,false);
for (iter in ccats) {
tmp = ccats[iter.toString()].split("#")[1];
tmp2 = ccats[iter.toString()].split("#")[0];
if (tmp==key) {
if (tmp2==val) {
document.forms[fform].elements[llb2].options = new Option(iter.toString().split("#")[0],ccats[iter.toString()],true,true);
document.forms[fform].elements[llb2].options.selected = true;
}
else{
document.forms[fform].elements[llb2].options = new Option(iter.toString().split("#")[0],ccats[iter.toString()],false,false);}
i++;
}
}
}

function set_subcat2 () {
set_subcat("Search","s_entry_country","s_entry_region",cats);
}

/*document.Search.s_entry_country.options[0]=null;*/
document.Search.s_entry_country.onchange = set_subcat2;

set_subcat("Search","s_entry_country","s_entry_region",cats);
</script>


und folgendes im Body (Anfang des Formulars, mit den beiden Selects der doppelten Combobox):

QUOTE <form method="GET" action="<?= $sActionFileName ?>" name="Search">
<input type="hidden" name="FormName" value="Search"><input type="hidden" name="FormAction" value="search">
<table class="FormTABLE">
<tr>
<td class="FormHeaderTD" colspan="13"><a name="Search"><font class="FormHeaderFONT"><?=$sFormTitle?></font></a></td>
</tr>
<tr>
<td class="FieldCaptionTD"><font class="FieldCaptionFONT">Land</font></td>
<td class="DataTD"><select size="1" name="s_entry_country">
<?
echo "<option value=\"\">" . $ss_entry_countryDisplayValue . "</option>";
$lookup_s_entry_country = db_fill_array("select country_id, country_de from ts_countries order by 2");

if(is_array($lookup_s_entry_country))
{
reset($lookup_s_entry_country);
while(list($key, $value) = each($lookup_s_entry_country))
{
if($key == $flds_entry_country)
$option="<option SELECTED value=\"$key\">$value";
else
$option="<option value=\"$key\">$value";
echo $option;
}
}

?></select></td>
</tr>
<tr>
<td class="FieldCaptionTD"><font class="FieldCaptionFONT">Region</font></td>
<td class="DataTD"><select name="s_entry_region">
<?
echo "<option value=\"\">" . $ss_entry_regionDisplayValue . "</option>";
$lookup_s_entry_region = db_fill_array("select region_id, region_de from ts_regions order by 2");

if(is_array($lookup_s_entry_region))
{
reset($lookup_s_entry_region);
while(list($key, $value) = each($lookup_s_entry_region))
{
if($key == $flds_entry_region)
$option="<option SELECTED value=\"$key\">$value";
else
$option="<option value=\"$key\">$value";
echo $option;
}
}

?></select></td>


Das funktioniert so natürlich noch nicht.

Vor diesem Formular hatte ich im Script folgendes, dass die zweite Box im HTML-Template bevölkert:

QUOTE $db->query("select region_id,country_id,region_de from ts_regions order by region_de");

$tpl->set_var("region_id","");
$tpl->set_var("region_de","Alle");
$tpl->parse("cats",true);

while ($db->next_record()) {
$tpl->set_var("region_id",$db->f("region_id")."#".$db->f("country_id"));
$tpl->set_var("region_de",$db->f("region_de")."#".$db->f("region_id"));
$tpl->parse("cats",true);
}


Es scheint, als müsste diese letzte Funktion irgendwie in das PHP-Formular rein?

Frage: wie muss ich den Formular-Teil in PHP verändern, damit sich die zweite Listbox jeweils automatisch aktualisiert?
 
zum Glück gelöst:

man braucht nur
cats["{region_de}"] = "{region_id}";

durch ein wenig PHP zu ersetzen:
CODE
<?
$cats_hack = db_fill_array("select concat(region_de,'#',region_id), concat(region_id,'#',country_id) from ts_regions order by region_de");
echo 'cats["Alle"] = "";';
if(is_array($cats_hack))
{
reset($cats_hack);
while(list($key, $value) = each($cats_hack))
{
echo 'cats["'.$key.'"] = "'.$value.'";';
}
}
?>
 
Zurück
Oben