Foros del Web » Programando para Internet » PHP »

Combo k se llena segun otro combo casi listo

Estas en el tema de Combo k se llena segun otro combo casi listo en el foro de PHP en Foros del Web. hola a todos, buscando en este foro encontre este scprit muy weno para llenar un comobo a partir de otro. pero tiene un problema al ...
  #1 (permalink)  
Antiguo 30/09/2006, 21:57
 
Fecha de Ingreso: septiembre-2006
Mensajes: 196
Antigüedad: 17 años, 7 meses
Puntos: 0
Combo k se llena segun otro combo casi listo

hola a todos, buscando en este foro encontre este scprit muy weno para llenar un comobo a partir de otro. pero tiene un problema al escojer el primer combo en vez de cargarse el segundo con algun dato, los 2 combos vuelven a kedar como selecione..., pense k podia ser el PHP_SELF k cargaba nuevamente los combos y no dejaba ver los valores, pero lo sake y seguia =. ojla alguien lo revise y pueda encontrar la solucion para que todos lo usemos
saLU2
combos.php
Código PHP:
<? 
// datos de conexion a la BD. 
$servidor  ="localhost"// host 
$usuario   ="";  
$clave     =""
$basedatos =""// Indicar una Base de datos. 

// si se ha pulsao el boton 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 segun 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 q el $id_padre q 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 ningua opcion 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"


?>
TABLAS
Código:
CREATE TABLE tabla_hija (
   id tinyint(3) unsigned NOT NULL auto_increment,
   id_padre tinyint(3) unsigned DEFAULT '0' NOT NULL,
   item_texto varchar(255) NOT NULL,
   PRIMARY KEY (id)
);

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');


CREATE TABLE tabla_padre (
   id tinyint(3) unsigned NOT NULL auto_increment,
   item_texto varchar(255) NOT NULL,
   PRIMARY KEY (id)
);

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');
  #2 (permalink)  
Antiguo 01/10/2006, 07:58
 
Fecha de Ingreso: septiembre-2006
Mensajes: 59
Antigüedad: 17 años, 7 meses
Puntos: 0
Hola.

El php es un lenguaje dinamico, Que ejecuta el codigo al cargar......
Una vez cargado todo lo que hace es por el html a no ser que vuelvas a recargar la pagina.

Aqui en este script, tienes 2 combos, y un solo form...

Que ocurre? que si no enviamos los datos en el form con el id_padre...
El id_hijo no se cargara...(ya que que no sabemos el id_padre...)

Por lo que o haces 2 forms y unas variables $_POST o me parece que no te funcionara.

Otra opcion es hacerlo con javascript:

Cargas los datos y luego cargas los combos segun los datos....

relentiza la carga pero tambien es eficaz...

Bueno, esto es a gusto del consumidor...

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:00.