Combos enlazados
Con "combo" No me refiero a ningún ayuken!!!! (guiño guiño), al grano. Haciendo un formulario web para introducción de datos encuentro un pequeño problema, los combos enlazados. ¿Qué es eso?: Supongamos dos combos, uno con Comunidades Autónomas y otro con Provincias, ya os haceis la idea, ¿verdad?. Al seleccionar una comunidad autónoma concreta deben aparecer solamente las provincias pertenecientes.
Teniendo en cuenta que es muy probable que todos estos datos salgan de una base de datos, hemos de rellenar los combos con JavaScript pero conectando (a MySQL) en este caso vía PHP. El ejemplo estático (sin base de datos alguna) sería el siguiente:
<script language="JavaScript1.2">
function addOption(prov)
{
var comboBox = document.getElementById('opcion2');
switch (prov)
{
case 1:
comboBox.options.length = 0;
var newOption = new Option('1- Provincia1', '1');comboBox.options[comboBox.options.length] = newOption;
break;
case 2:
comboBox.options.length = 0;
var newOption = new Option('2- Provincia1', '1');comboBox.options[comboBox.options.length] = newOption;
var newOption = new Option('2- Provincia2', '2');comboBox.options[comboBox.options.length] = newOption;
var newOption = new Option('2- Provincia3', '3');comboBox.options[comboBox.options.length] = newOption;
break;
}
}
</script>
<select name="opcion1" onchange="addOption(this.value);">
<option value="">--selecciona--</option>
<option value="1">Autonomía1</option>
<option value="2">Autonomía2</option>
</select>
<select name="opcion2" id="opcion2"></select>
Una vez visto el ejemplo estático, pasemos a rellenar los combos dinamicamente con PHP. Para ello rellenamos todas las posibilidades al cargar la página y JavaScript se encargará de seleccionar qué combos se activan en cada evento, con el ejemplo guarro se verá mejor:
<?php mysql_connect($host, $user, $pass); mysql_select_db($base_datos); ?>
<script language="JavaScript1.2">
function addOption(prov)
{
var comboBox = document.getElementById('opcion2');
switch (prov)
{
case 1:
comboBox.options.length = 0;
<?php
$result=mysql_query("SELECT * FROM concellos WHERE idprovincia='1'");$data=mysql_fetch_array($result);
do
{
echo <<<HEAD
var newOption = new Option('$data[concello]', '$data[idconcellos]');comboBox.options[comboBox.options.length] = newOption;
HEAD;
}while($data=mysql_fetch_array($result))
?>
break;
case 2:
comboBox.options.length = 0;
<?php
$result=mysql_query("SELECT * FROM concellos WHERE idprovincia='2'");$data=mysql_fetch_array($result);
do
{
echo <<<HEAD
var newOption = new Option('$data[concello]', '$data[idconcellos]');comboBox.options[comboBox.options.length] = newOption;
HEAD;
}while($data=mysql_fetch_array($result))
?>
break;
}
}
</script>
<select name="opcion1" onchange="addOption(this.value);">
<option value="">--selecciona--</option>
<option value="1">A Coruña</option>
<option value="2">Lugo</option>
<option value="3">Ourense</option>
<option value="4">Pontevedra</option>
</select>
<select name="opcion2" id="opcion2"></select>
Sé que no es el mejor código, ni está optimizado, pero me ha sacado de un apuro. Ya tendré tiempo de mejorarlo poco a poco.
... un poco cerdo sí que es, pero tira xD
Ye, se admiten sugerencias socio, anímate ;)
Que indentacion horrible!!! XD
Es coña... Hace tanto que no toco codigo php que me pierdo, pero mu bueno lo de los scrollbars al [code][/code], ya diras como es el truquillo css...
Algo parecido tuve que hacer con una aplicación para mi madre. En mi caso se trataban de procedencias ("departamentos") y prescripciones (médicos) de tal modo que cada procedencia tenía una serie de prescripciones asociadas (vamos, la clásica relación "una a muchos" con restricción de existencia.)
En tu caso comunidades = procedencias / provincias = prescripciones. Lo que haría es cargar el combo de las provincias en función del combo de las comunidades. Obtienes la clave principal de la comunidad deseada de su combo y con una consulta (SELECT PROVINCIAS.nombre FROM PROVINCIAS WHERE PROVINCIAS.cAjenaComunidades = $comunidad;) creas un array. Luego con un bucle recorres el array añadiendo nuevos items al combo de provincias (sería otra función para añadir, ya que hay que comprobar que el comboProvincias esté vacío o no, resetearlo si fuera necesario y añadir items)
Lo de usar un switch a mí me parece un pelo animal; no sé si coder gruñía cual yayo cascarrabias por eso XD
Se me olvidaba, la jugada del scroll horizontal también me parece una buena idea para escupir código :-) ¡Ya si lo vomitas en lista numérica, <ol></ol>, ni te cuento socio! ¡Ah! y lo quiero también con sintaxis coloreada (...ya me puse exigente, si es que no puede ser XD)
Aunque bueno, lo de numerar las líneas de código queda muy útil visualmente pero es poco usable, por ser pijolini y no decir que claramente es una puta jodienda, ya que al copiar/pegar el código (para probarlo o lo que sea) obtienes también unas simpáticas almohadillas (que no almorranas) # representando cada número de la lista numerada.
En resumen, que te has marcado lo del scroll horizontal vamos... XD
Un saludo


