Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/06/2010, 04:15
informa
 
Fecha de Ingreso: noviembre-2005
Mensajes: 86
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: actualizacion de option select


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.