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:
und folgendes im Body (Anfang des Formulars, mit den beiden Selects der doppelten Combobox):
Das funktioniert so natürlich noch nicht.
Vor diesem Formular hatte ich im Script folgendes, dass die zweite Box im HTML-Template bevölkert:
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?
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:
<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[i]=null;
}
var i = 1 ;
document.forms[fform].elements[llb2].options[i] = 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[i] = new Option(iter.toString().split("#")[0],ccats[iter.toString()],true,true);
document.forms[fform].elements[llb2].options[i].selected = true;
}
else{
document.forms[fform].elements[llb2].options[i] = 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>
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[i]=null;
}
var i = 1 ;
document.forms[fform].elements[llb2].options[i] = 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[i] = new Option(iter.toString().split("#")[0],ccats[iter.toString()],true,true);
document.forms[fform].elements[llb2].options[i].selected = true;
}
else{
document.forms[fform].elements[llb2].options[i] = 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>
<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>
<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>
Vor diesem Formular hatte ich im Script folgendes, dass die zweite Box im HTML-Template bevölkert:
$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);
}
$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);
}
Frage: wie muss ich den Formular-Teil in PHP verändern, damit sich die zweite Listbox jeweils automatisch aktualisiert?
Kommentar