Hola gente...
Resulta que necesito colocar 2 combobox (o selects) anidados
en relacion uno
a muchos que se llenen cargando los datos desde una BD. El
primero se debe
llenar al cargar la página, y el segundo se debe cargar
al seleccionar una
opcion del primero, con los datos relativos a esa
opcion.
Encontre un script del tipico ejemplo Paises y Provincias
escrito en php y
javascript, el cual pongo mas abajo. El script llena bien el
primer combo,
pero al elegir una de las opiciones no se llena el segundo
combo. =(
Me interesa este script en particular ya que con el no se
necesita recargar
la página para llenar el segundo combo.
Pero llevo bastante tiempo toqueteandole el código y no
he conseguido
nada... así que si alguien le puede hechar el ojo y
darme una mano se lo
agredeceria mucho =).
Saludos!!
Diego
<?php
//conexión a mysql
include ("conexion.php");
//seleccionamos las opciones del select principal
$sql = "SELECT id_pais,pais FROM paises ORDER BY pais";
$res = mysql_query($sql);
//obtenemos el número de registros
$num = mysql_num_rows($res);
?>
<FORM name="form1" method="POST">
<!--Combo principal-->
<select name="pais"
onChange="redirect(this.options.selectedIndex)"
style='width:160'>
<option selected value=0>PAIS.</option>
<?
for($i=0;$i<$num;$i++) {
$id_club[$i] = mysql_result($res,$i,0);
$club[$i] = mysql_result($res,$i,1);
echo "<option
value='$id_pais[$i]'>$pais[$i]</option>";
}
?>
</select>
<!--Combo dinámico-->
<select name="provincia" style='width:160'>
<option selected value=0>PROVINCIA</option>
</select>
</FORM>
<?
echo "<script><!--";
echo "var groups=".$num;
echo "var group=new Array(groups)";
//Crea tantos arrays como valores hay en el combo
principal
echo "for (i=0; i<groups; i++) group[i]=new
Array()";
//Opciones cuando no se ha hecho ninguna selección en
el combo principal-->
echo "group[0][0]=new Option('PAIS','0');";
for($i=0;$i<$num;$i++) {
$sql = "SELECT id_provincia, provincia FROM provincias WHERE
id_pais =
$id_pais[$i]";
$res = mysql_query($sql);
//Obtenemos el número de provincias para ese pais
$num2 = mysql_num_rows($res);
for($j=0;$j<$num2;$j++) {
$id_pais = mysql_result($res,$j,0);
$pais = mysql_result($res,$j,1);
//Opciones para la opción $i del combo
principal
echo "group[$num][$j]=new
Option('$provincia','$id_provincia')";
}
}
include ("cerrar_conexion.php");
?>
var temp=document.form1.provincia
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new
Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}
//-->
</script>
<?php
//conexión a mysql
include ("conexion.php");
//seleccionamos las opciones del select principal
$sql = "SELECT id_pais,pais FROM paises ORDER BY pais";
$res = mysql_query($sql);
//obtenemos el número de registros
$num = mysql_num_rows($res);
?>
<FORM name="form1" method="POST">
<!--Combo principal-->
<select name="pais"
onChange="redirect(this.options.selectedIndex)"
style='width:160'>
<option selected value=0>PAIS.</option>
<?
for($i=0;$i<$num;$i++) {
$id_pais[$i] = mysql_result($res,$i,0);
$pais[$i] = mysql_result($res,$i,1);
echo "<option
value='$id_pais[$i]'>$pais[$i]</option>";
}
?>
</select>
<!--Combo dinámico-->
<select name="provincia" style='width:160'>
<option selected value=0>PROVINCIA</option>
</select>
</FORM>
<?
echo "<script><!--";
echo "var groups=".$num;
echo "var group=new Array(groups)";
//Crea tantos arrays como valores hay en el combo
principal
echo "for (i=0; i<groups; i++) group[i]=new
Array()";
//Opciones cuando no se ha hecho ninguna selección en
el combo principal-->
echo "group[0][0]=new Option('PAIS','0');";
for($i=0;$i<$num;$i++) {
$sql = "SELECT id_provincia, provincia FROM provincias WHERE
id_pais =
$id_pais[$i]";
$res = mysql_query($sql);
//Obtenemos el número de provincias para ese pais
$num2 = mysql_num_rows($res);
for($j=0;$j<$num2;$j++) {
$id_pais = mysql_result($res,$j,0);
$pais = mysql_result($res,$j,1);
//Opciones para la opción $i del combo
principal
echo "group[$num][$j]=new
Option('$provincia','$id_provincia')";
}
}
include ("cerrar_conexion.php");
?>
var temp=document.form1.provicia
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new
Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}
//-->
</script>
--
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Nearby mié abr 27 2005
- 12:24:28 CEST