Yo encontré el siguiente script en internet (creo que en este mismo foro) y va de maravilla. Lo he modificado un poco para que te sea más comprensible para los novatos:
Es evidente que hace falta una base de datos con dos tablas: paises y provincias
primer_formulario.php:
Código:
<?php
include("conexion_base_de_datos.php");
echo "<form action=\"segundo_formulario.php\" method=\"POST\">\n\n";
echo "<b>País: </b>";
// Formar Selec "Padre".
echo "<select name=\"pais\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Selecciona... </option>\n";
$SQLconsulta_padre="SELECT * FROM paises";
$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 q el $id_nacion q recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
if ($pais == $registro_padre['pais']){echo "<option value=\"".$registro_padre['pais']."\" selected>".$registro_padre['pais']."</option>\n";
} else {echo "<option value=\"".$registro_padre['pais']."\">".$registro_padre['pais']."</option>\n";}
}
echo "</select>\n\n";
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.
echo "<br /><b>Provincia:</b>";
if (!empty($pais)){ echo "<select name=\"provincia\">\n";echo "<option value=\"bbb\">Cualquier provincia..</option>";echo "</select>\n\n";
} else {echo "<select name=\"provincia\">\n";echo "<option value=\"\">Elige antes un pais</option>";echo "</select>\n\n";}
echo "<br />";
echo "<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
echo "</form>\n";
?>
Este formulario envia los datos (onChange) al segundo_formulario.php:
Código:
<?php
$pais=$_POST["pais"];
$provincia=$_POST["provincia"];
include("conexion_base_de_datos.php");
echo "<form action=\"procesar_formulario.php\" method=\"POST\">\n\n";
//el pais lo ponemos SOLO con el dato del pais elegido
echo "<select name=\"pais\">\n";
echo "<option value=\"$pais\">$pais</option>\n";
echo "</select>\n\n";
//ahora ponemos el select de la provincia con solo los datos de provincias del pais elegido
if (!empty($pais)){
$SQLconsulta_hija="SELECT * FROM provincias WHERE pais='$pais'";
$consulta_hija = mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
if (mysql_num_rows($consulta_hija) != 0){
echo "<select class=\"option_bus\" name=\"provincia\">\n";
While($registro_hija=mysql_fetch_assoc($consulta_hija)){ echo "<option value=\"".$registro_hija['provincia']."\">".$registro_hija['provincia']."</option>\n";}
mysql_free_result($consulta_hija);
echo "</select>\n\n";
} else {echo "<input type=\"text\" name=\"provincia\" size=\"35\" maxlenght=\"35\" />";}
} else {echo "<select name=\"provincia\">\n";echo "<option value=\"\">Selecciona antes un pais</option>";echo "</select>\n\n";}
echo "<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
echo "</form>\n";
?>
El script de procesar_formulario.php es el tipico de una página que procesa los datos de un formulario: primero recoger los datos enviados por post y luego procesarlos como convenga en cada caso.
Espero que te sirva.