Validación de una lista con datos de una base

Tengo una duda que implica PHP, MySQL y Javascript, y que quizás sea una pavada pero no sé como resolverla.
Necesito hacer la típica lista anidada, pero en vez que los datos sean fijos, tienen que ser recogidos de una base.
El ejemplo que más se acerca es la lista en la que primero elijes un país, y de acuerdo a la selección, te habilita la otra lista con las provincias de ese país.
Yo lo que necesito es que la primera lista recoja datos de una tabla en la bd, y de acuerdo a esa elección, me habilite la segunda lista con los datos de otra tabla relacionados con el id de la primera selección.
Obviamente, no quiero que se reenvíe el form; sin que esa validación se haga en el momento. Intuyo que eso se hace con Javascript, pero no sé como pasarle los valores recogidos de la base.

1 respuesta

Respuesta
1
Pues aquí te dejo esto:
Datos Tabla:
#
# Estructura de tabla para tabla `tabla_hija`
#
CREATE TABLE tabla_hija (
id tinyint(3) unsigned NOT NULL auto_increment,
id_padre tinyint(3) unsigned NOT NULL default '0',
item_texto varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
#
# Volcar la base de datos para la tabla `tabla_hija`
#
INSERT INTO tabla_hija VALUES (1, 1, 'tabla_hija - Item grupo 1 bla bla bla');
INSERT INTO tabla_hija VALUES (2, 2, 'tabla_hija - grupo 2 item 1');
INSERT INTO tabla_hija VALUES (3, 2, 'tabla_hija - grupo 2 item 2');
INSERT INTO tabla_hija VALUES (4, 3, 'tabla_hija - grupo 3 item probando');
INSERT INTO tabla_hija VALUES (5, 1, 'tabla_hija - item grupo 1 noseq pner');
# --------------------------------------------------------
#
# Estructura de tabla para tabla `tabla_padre`
#
CREATE TABLE tabla_padre (
id tinyint(3) unsigned NOT NULL auto_increment,
item_texto varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
#
# Volcar la base de datos para la tabla `tabla_padre`
#
INSERT INTO tabla_padre VALUES (1, 'Grupo 1');
INSERT INTO tabla_padre VALUES (2, 'Grupo 2');
INSERT INTO tabla_padre VALUES (3, 'Grupo 3');
INSERT INTO tabla_padre VALUES (4, 'Grupo 4');
PHP:
<?
// datos de conexion a la BD.
$servidor ="localhost"; // host
$usuario ="";
$clave ="";
$basedatos =""; // Indicar una Base de datos.
// si se ha pulsao el botón enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// Que los obtengamos y se les de como valor inicial en el value= de cada uno según corresponda.
if (!empty($_POST['enviado'])){
// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo "Recibido id_tabla_padre: ".$_POST['id_padre']."<br>";
echo "Recibido id_tabla_hija: ".$_POST['id_hija'];
} else {
// Conexión a la BD
$conexion = mysql_connect($servidor, $usuario, $clave) or die(mysql_error());
mysql_select_db($basedatos, $conexion) or die(mysql_error());
// Obtener el $id_padre del envio a si mismo del formulario ..
$id_padre=$_POST['id_padre'];
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";
// Formar Selec "Padre".
echo "<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Item </option>\n";
$SQLconsulta_padre="SELECT * FROM tabla_padre";
$consulta_padre = mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());
While ($registro_padre=mysql_fetch_assoc($consulta_padre )){
// Se mira si el ID del registro es el mismo que el $id_padre que recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
if ($id_padre == $registro_padre['id']){
echo "<option value=\"".$registro_padre['id']."\" selected>".$registro_padre['item_texto']."</option>\n";
} else {
echo "<option value=\"".$registro_padre['id']."\">".$registro_padre['item_texto']."</option>\n";
}
}
echo "</select>\n\n";
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.
// Formar Select "Hijo"
echo "<select name=\"id_hija\">\n";
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ninguna opción del select hijo
// se muestra el mensaje de "seleccine un item" (del select padre).
if (!empty($id_padre)){
$SQLconsulta_hija="SELECT * FROM tabla_hija WHERE id_padre='$id_padre'";
$consulta_hija = mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
// Se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
if (mysql_num_rows($consulta_hija) != 0){
While ($registro_hija=mysql_fetch_assoc($consulta_hija)) {
echo "<option value=\"".$registro_hija['id']."\">".$registro_hija['item_texto']."</option>\n";
}
} else {
echo "<option value=\"\"> No hay registros para este Item </option>";
}
} else {
echo "<option value=\"\"> <-- Seleccione un Item </option>";
}
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.
echo "</select>\n\n";
echo "<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
echo "</form>\n";
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas