Foros del Web » Programando para Internet » PHP »

Duda combox anidados

Estas en el tema de Duda combox anidados en el foro de PHP en Foros del Web. Hola a todos: Tengo una duda, de como hacer para que una vez que se elija una tabla me mustre los id´s de los registros ...
  #1 (permalink)  
Antiguo 20/09/2006, 19:11
 
Fecha de Ingreso: diciembre-2002
Ubicación: d.f
Mensajes: 79
Antigüedad: 21 años, 3 meses
Puntos: 0
Duda combox anidados

Hola a todos:

Tengo una duda, de como hacer para que una vez que se elija una tabla me mustre los id´s de los registros que contiene usando combox anidados.
Bien el código que a continuación presento le tengo que poner el nombre de la tabla en el código, pero quisiera que una vez seleccionada la tabla en automático me presenten los registros que corresponden a esa tabla.

PD: Estoy utilizando javascript,php y manejador de datos posgresql
y la tabla estoy desplegando se llama -> perfil
Saludos
rvargas
---------
Adjunto código:

include ("funciones.php");
/////////////////////// Me conecto a la Base de datos
$conBD =abreConnBD();
global $conBD;
$query =""; $datosTabla=""; $get_datos="";
$query="";
$query = " select id, nombre, abrev from perfil";

$query=$conBD->exec($query);

if (strlen (trim($query ))!=0){
while($var=pg_fetch_array($query)) {
$reg_tabla="Reg: ".$var['id']."--".$var['nombre'];
$array .="\""."perfil"."\",\"".$var['id']."\",\"".$reg_tabla."\",";
$reg_tabla="";
}//Del while

$array=substr($array,0,-1);
}//del id
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>actualiza Catalogos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META HTTP-EQUIV="Expires" CONTENT="Mon, 06 Jan 1990 00:00:01 GMT">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</head>
<body>
<?php
echo "
<script language='JavaScript'>
var tabla_registrosMap = new Array( ".$array." );

function get_lista(p_tabla, p_registros) {
var manCode = p_tabla.options[p_tabla.selectedIndex].value;
var i, j ,cadena;

j = p_registros.options.length = 1;
p_registros.options.selectedIndex = 0;


for(i=0; i<tabla_registrosMap.length/3; i++) {
if (tabla_registrosMap[i*3] == manCode) {

p_registros.options.length = j+1;
//B
p_registros.options[j].value = tabla_registrosMap[i*3+1];
//C
p_registros.options[j].text = tabla_registrosMap[i*3+2];
j += 1;
}
}
return;
}
</script>";

?>
<h1>Actualizar registro a los catalogos de la Base de datos</h1>
<form action="update_altaCatalogo.php" method="post" enctype="multipart/form-data" name="form1">
<table>
<tr><td>
<select name="tabla" onChange="get_lista(this,this.form.registros)" >
<option value="" selected>---Seleccione la tabla---</option>;
<option value="perfil">Perfil</option>
<option value="categoria">Categoría</option>
</select>
</td></tr>
<tr><td>
<select name="registros" >
<option value=""selected> ---Seleccione el registro--- </option>
</select>
</td></tr>
</table>
</form>
</body>
</html>
  #2 (permalink)  
Antiguo 21/09/2006, 02:55
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Los combos anidados se suelen hacer con javascript. Te invito a que consultes ese foro.
Un saludo.
  #3 (permalink)  
Antiguo 21/09/2006, 06:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por jerkan Ver Mensaje
Los combos anidados se suelen hacer con javascript. Te invito a que consultes ese foro.
Un saludo.
El ejemplo que propone y que usa combina javascript y PHP .. PHP genera el "javascript" que luego trabajará la parte javascript.

Soluciones al respecto tienes:

* Sólo PHP: un ejemplo (usa Msyql pero el conecpto es el mismo):
http://www.forosdelweb.com/showthrea...999#post664999

* Vía Ajax (sin recargar la página y tomando datos del servidor): Revisa el foro de "Ajax".

* Remote scripting (en la FAQ que te dejé sobre la solución PHP tines un link hacia la versión en dicha técnica .. usan Mysql pero son sencillas adaptar a otros motores de BBDD).

* Javascript+PHP como lo haces ahora, donde se "pre-carga" o generan todas las combinaciones posibles en el "cliente" para que este trabaje la iteracción entre ambos "combos".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 21/09/2006, 11:05
 
Fecha de Ingreso: diciembre-2002
Ubicación: d.f
Mensajes: 79
Antigüedad: 21 años, 3 meses
Puntos: 0
Cluster

Cluster
Muchas gracias por la ayuda, ya me salio lo que quería, gracias al ejemplo que mencionas, adjunto código.

Saludos!
rvargas


Código PHP:
<?php
include ("funciones.php");

$query  =""
               
// 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 {
    
/////////////////////// Me conecto a la Base de datos
    
$conBD =abreConnBD(); 
    global 
$conBD

   
// 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()\">";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";

            
///Agrego en los selecs los nombres de las tablas que deseo consultar sus campos
            
if ($id_padre == "perfil"){
                echo 
"<option value=\"perfil\" selected>Perfil</option>\n";
            } else {
                echo 
"<option value=\"perfil\">Perfil</option>\n";
            }

            if (
$id_padre == "areaart"){
                echo 
"<option value=\"areaart\" selected>Área x</option>\n";
            } else {
                echo 
"<option value=\"areaart\">Área artística</option>\n";
            }

       echo 
"</select>\n\n";

       
// 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)){
          
$query " select id, nombre, abrev from $id_padre";
          
$query=$conBD->exec($query);    

          echo 
"el query es:".$query;    
          while(
$var=pg_fetch_array($query)) { 
               if (empty(
$id_padre)) {
                    echo 
"<option value=\"".$var['id']."\" selected>ID:".$var['id']."--".$var['nombre']."</option>\n";
                } else {
                    echo 
"<option value=\"".$var['id']."\">ID:".$var['id']."--".$var['nombre']."</option>\n";
                }
            
            }
//Del while

     
} else {
        echo 
"<option value=\"\"> <-- Seleccione un Item  </option>";
     }
//del else

    //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";
}
//del else principal 
?>

Última edición por Cluster; 21/09/2006 a las 11:10 Razón: Usa el botón "PHP" para que el código quede coloreado y de mejor lectura.
  #5 (permalink)  
Antiguo 21/09/2006, 11:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Gracias a tí por compartir tu solución.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 13:40.