Ver Mensaje Individual
  #15 (permalink)  
Antiguo 18/07/2005, 03:20
Avatar de Ferdy(Toledo)
Ferdy(Toledo)
 
Fecha de Ingreso: septiembre-2003
Ubicación: TOLEDO
Mensajes: 8
Antigüedad: 20 años, 7 meses
Puntos: 0
Refrescar selects (mi solución definitiva).

Hola Amigos
Hace tanto ya de este tema que ni me acordaba. Por si a alguien le sirve de algo, aquí va la solución definitiva por la que opté.

En primer lugar tengo una función para crear desplegables (selects), que puede venir muy bien si tienes bastantes desplegables que hacer en tu página. Esta es la función:

/* -------------------------------------------------------------------------------------------
Función que muestra un select con las opciones que recibe.
Parámetros:
$NombreCampo -> Nombre del select
$ValorCampo -> Valor por defecto del select
$ArrayOpcionesValor -> Array con los valores de las opciones que presentará el select.
$ArrayOpcionesTexto -> Array con las opciones que presentará el select.
$clase -> Si estás utilizando un fichero de estilos "css", aquí pones el nombre de la clase.
$change -> La función que llamará el evento "onChange"
---------------------------------------------------------------------------------------------- */
function CreaDesplegable($NombreCampo, $ValorCampo, $ArrayOpcionesValor, $ArrayOpcionesTexto, $clase="", $change="") {
$num_opciones = count($ArrayOpcionesValor);
echo "<select name='" .$NombreCampo ."' class='".$clase."' onChange='".$change."' >\n";
for ($i=0; $i < $num_opciones ; $i++) {
if ($ValorCampo == $ArrayOpcionesValor[$i]) { $seleccionado = "selected"; } else { $seleccionado = ""; }
echo "<option value='" .$ArrayOpcionesValor[$i] ."' ".$seleccionado." >" .$ArrayOpcionesTexto[$i] ."</option>\n";
}
echo "</select>\n";
}

Esta función lo mejor es que vaya un un fichero de funciones al que puedas llamar desde cualquiera de tus páginas cuando lo necesites mediante un include, el fichero se podría llamar "misfunciones.php".


Vamos con el fichero donde mostraremos nuestros desplegables, en este caso "index.php":

En primer lugar tendremos un par de funciones de JavasCript para cuando seleccionemos algo en cualquiera de nuestros desplegables.


?>
<script language="JavaScript" type="text/JavaScript">
<!--
function cambia_provincia() {
var puntero = document.formulario.localidad;
document.formulario.action = "index.php";
puntero.value = "";
document.formulario.submit();
}

function cambia_localidad() {
var puntero1 = document.formulario.localidad;
var puntero2 = document.formulario.select_localidad;
puntero1.value = puntero2.value;
}

//-->
</script>
<?

// Incluimos nuestro fichero de funciones
include("misfunciones.php");


if (!isset($_POST['provincia'])) { $provincia = 0; } else { $provincia = $_POST['provincia']; }
if (!isset($_POST['localidad'])) { $localidad = 0; } else { $localidad = $_POST['localidad']; }


// Aquí nuestras funciones para conectar a la base de datos.
...
...
...

// Seleccionamos las provincias de la base de datos MySQL
// Y guardamos en arrays el resultado. $ArrayProvinciasID y $ArrayProvinciasTXT
$SQL = "SELECT ID, provincia FROM provincias ORDER BY provincia";
...
...
// OjO en los arrays anteriores deberá haber un $ArrayProvinciasID[n] = 0 y un $ArrayProvinciasTXT[n] = "Seleccione una provincia."




// Seleccionamos las localidades de la base de datos, de la provincia correspondiente.
// Y guardamos en arrays el resultado. $ArrayLocalidadesID y $ArrayLocalidadesTXT
if ($provincia == 0) {

$ArrayLocalidadesID[0] = 0;
$ArrayLocalidadesTXT[0] = "";

} else {

$SQL = "SELECT ID, localidad FROM localidades WHERE ID_provincia='".$provincia."'";
...
...


}

// Ponemos el <html>, <head>, <body> etc. etc.


echo "<form name='formulario' method='post' >";

echo"<input type='hidden' name='localidad' value='" .$localidad ."' >\n";

// Creamos el primer desplegable, el de las provincias.
CreaDesplegable("provincia", $provincia, $ArrayProvinciasID, $ArrayProvinciasTXT, "", "cambia_provincia()");

// Creamos el segundo desplegable, el de las localidades.
CreaDesplegable("select_localidades", $localidad, $ArraylocalidadesID, $ArraylocalidadesTXT, "", "cambia_localidad()");

...
...
...

echo "</form>";

...
...

// etc. etc.

Espero que os sirva para algo el ejemplo.
Un Saludo a tod@s,