una roba del genere...
calcola che è già adattato, però testato e funzionante...
la form che deve contenere i campi si chiama myform... ovvio...
poiCodice PHP:fai le query iniziali per prendere i dati poi:
<script language="JavaScript" type="text/javascript">
function ListSelectValues(CONTROL){
var strTemp = "";
for(var i = 0;i < CONTROL.length;i++)
{
if(CONTROL.options[i].selected == true)
{
strTemp += CONTROL.options[i].value+",";
}
else
{
//strTemp += "0,";
}
}
return strTemp;
}
function popola()
{
document.myform.ComboFiglia.options.length = 0
yyy=0
for(var i=0;i<Arr_Descrizione.length;i++)
{
strconf=(''+Arr_Padre[i]+'');
strconf2="-"+ListSelectValues(myform.ComboPadre).split(",")[0]+"-";
if ( (ListSelectValues(myform.ComboPadre).indexOf(strconf)!=-1) || (strconf2=="--") )
{
myform.ComboFiglia.options.length ++;
myform.ComboFiglia.options[yyy].value =""+Arr_Descrizione[i].split(",")[0]+"";
myform.ComboFiglia.options[yyy].text = Arr_Descrizione[i].split(",")[1];
yyy ++;
}
}
}
</script>
per l'array padre:
poi l'array figlio:Codice PHP:<select id="ComboPadre" name="ComboPadre" onChange="popola();">
<?php
do {
?><option value="<?php echo $row_RecPadre['campo1']?>"><?php echo $row_RecPadre['campo1']?></option>
<?php
} while ($row_RecPadre = mysql_fetch_assoc($RecPadre));
$rows = mysql_num_rows($RecPadre);
if($rows > 0) {
mysql_data_seek($RecPadre, 0);
$row_RecPadre = mysql_fetch_assoc($RecPadre);
}
?></select>
<!--
Questi array JS memorizzano il primo la descrizione (identica a quella della select figlia)
e il secondo la chiave corrispondente al Padre. Penso che non sia la cosa più comoda del mondo ma funziona.
Usando forse un'array di classi apposite si può fare un lavoro migliore, più pulito.
Vanno dimensionati con il numero di record della combo figlia... in asp per esempio scriverei:
var Arr_Descrizione= new Array(<%=rsFiglio.recordcount%>);
var Arr_Padre= new Array(<%=rsFiglio.recordcount%>);
dove rsFiglio è il recordset "figlio" (quello che popola la combo Figlio) e recordcount è
il metodo che restituisce il numero di record.
--> </td>
<td width="250" align="left"><script language="JavaScript" type="text/javascript">
var Arr_Descrizione= new Array(4);
var Arr_Padre= new Array(4);
</script>
<select name="ComboFiglia">
<!-- Nota BENE: Per ogni record
ci sarà un ciclo che popola prendendo il record dal db, okkay?
-->
Codice PHP:<select name="ComboFiglia">
<?php
do {
?>
<option value="<?php echo $row_RecFiglio['id']; ?>"><?php echo $row_RecFiglio['campo2']; ?>
<script language="JavaScript" type="text/javascript">
Arr_Descrizione[<?php echo $row_RecFiglio['id']; ?>]="<?php echo $row_RecFiglio['id']; ?>,<?php echo $row_RecFiglio['campo2']; ?>"; //formato: value,text
Arr_Padre[<?php echo $row_RecFiglio['id']; ?>]="<?php echo $row_RecFiglio['id_combo']; ?>"; //il "padre". Gli ho detto che figlio1 fa parte del padre "1" ;)
</script>
<?php
} while ($row_RecFiglio = mysql_fetch_assoc($RecFiglio));
$rows = mysql_num_rows($RecFiglio);
if($rows > 0) {
mysql_data_seek($RecFiglio, 0);
$row_RecFiglio = mysql_fetch_assoc($RecFiglio);
}
?>


Rispondi quotando