Foros del Web » Programando para Internet » PHP »

Para los que quieran lista despegables dependientes. con mySQL

Estas en el tema de Para los que quieran lista despegables dependientes. con mySQL en el foro de PHP en Foros del Web. loading...... Por si a alguien le sirve creo que vi post sobre esto. Tomé el ejemplo de las FAQ de Javascript sobre como cambiar la ...
  #1 (permalink)  
Antiguo 04/10/2004, 15:02
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Para los que quieran combos desplegables dependientes. con mySQL y Javascript

loading......


Por si a alguien le sirve creo que vi post sobre esto.
Tomé el ejemplo de las FAQ de Javascript sobre como cambiar la ista de un select de acuerdo a otro.
Solo que esta vez sacando datos de las Bases de Datos.
Código PHP:
<?php
$bdconex 
mysql_connect("166.144.10.20""root""");
if(isset(
$_GET['ok']))
{
$os mysql_query("SHOW DATABASES");
$fnd=1;
/*Buscar los valores pasados porque solo los muestra en números
ejemplo: BD= laBDnumero44 --> 44
su tabla: latabla7 --> 7
Osea BD 44 tabla 7
*/
while ($find mysql_fetch_array($os))
{
mysql_select_db($find[0]);
$findTBL mysql_query("SHOW TABLES");
$ftbl=1;
//Comenzar a comparar valores de las cajas
while ($tbb mysql_fetch_array($findTBL))
{
//Si la TABLA es = a la de la caja salimos
if($ftbl == $_GET['latabla'])
{
$TABLA=$tbb[0];
break;
}
$ftbl++;
}
//Si la BD es = a la de la caja salimos
if($fnd == $_GET['laBD'])
{
$BD=$find[0];
break;
}
$fnd++;
}
//[MOSTRAR LO QUE SE ELIGIÓ]
echo"<u><b>BD elegida:</b></u>".$BD;
echo 
"<br><u><b>TABLA Elegida:</b></u>".$TABLA;
//[/MOSTRAR LO QUE SE ELIGIÓ]
}
else
{}
?>
<html>
 <head>
  <script language="JavaScript">
   var alaBDes = new Array(
<?php
$az 
mysql_query("SHOW DATABASES");
echo
"\"\"";
//Generar el Array de BD´s para la Primera Caja
while ($bd mysql_fetch_array($az)) {
echo 
",\"".$bd[0]."\"";
}
echo
");
var aTABLITAS0 = new Array(\"\");"
;
$ay mysql_query("SHOW DATABASES");
$a=1;
//Generar los Arrays de acuerdo a la cantidad de BD´s
while ($bd mysql_fetch_array($ay)) {
echo
"aTABLITAS$a = new Array(";
mysql_select_db($bd[0]);
$tb mysql_query("SHOW TABLES");
$a2=0;
echo
"\"\"";
//GEnerar el contenido de los Arrays de cada BD
while ($b mysql_fetch_array($tb)) {
echo 
",\"".$b[0]."\"";
$a2++;
}
mysql_free_result($tb);
echo
");

"
;
$a++;
}
echo
"var aTABLITAS = new Array(
aTABLITAS0"
;

$x=1;

$ah mysql_query("SHOW DATABASES");
while (
$b mysql_fetch_array($ah)) {
echo
",aTABLITAS$x
"
;
$x++;
}
echo
");";



?>

function opcion(oCntrl, iPos, sTxt, sVal){
     var selOpcion=new Option(sTxt, sVal);
     eval(oCntrl.options[iPos]=selOpcion);
   }

function cambia(oMster, oCntrl){
    var nSelected = oMster.selectedIndex;
    while (oCntrl.length) oCntrl.remove(0);
    for(var i = 0; i < aTABLITAS[nSelected].length; i++)
     opcion(oCntrl,  i, aTABLITAS[nSelected][i], String(i));
   }

function llena(oCntrl){
    while (oCntrl.length) oCntrl.remove(0);
    for(var i = 0; i < alaBDes.length; i++)
     opcion(oCntrl,  i, alaBDes[i], String(i));
   }


</script>


 </head>
 <body>
<?php
echo"<form name=frm action=".$_SERVER['PHP_SELF']." method=GET>";
?>
   laBD
   <select name="laBD" onchange="cambia(this, document.frm.latabla)">
    <option value=" ">&nbsp;</option>
   </select>
   &nbsp;&nbsp;&nbsp;
   latabla
   <select name="latabla">
    <option value=" ">&nbsp;</option>
   </select>
<input type=submit name='ok' value='Comprobar'>
</form>
  <script language="JavaScript">
   llena(document.frm.laBD);
</script>
 </body>
</html>
Espero no sea tarde.



connection closed.
__________________

Maborak Technologies

Última edición por MaBoRaK; 14/10/2004 a las 19:46
  #2 (permalink)  
Antiguo 05/10/2004, 08:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te propongo una cosa, .... Haz un ejemplo pero que se base en un par de tablas fijas (que por otro lado es lo común) poniendo aquí la estructura de ambas tablas usadas y algunos datos de ejemplo de la misma y lo subes a las FAQ's del foro PHP.

Un saludo,
  #3 (permalink)  
Antiguo 06/10/2004, 14:59
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
loading......


no entiendo :S osea por ejmplo acà se listan tablas dependiendo de la base de datos tu quieres que se muestren los campos de 2 tablas? segun la tabla que se elija? ok lo harè :D pero serìa lo mismo o no te entendì? explicame mas suave porfavor >=)



connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 07/10/2004, 06:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Por lo que veo .. en los select HTML le dices bajo su "name" el nombre de la tabla "padre" y la "hija" (si no es así corrijeme).

En tal caso .. si, el código es bastante versatil.. pero, deberías explicar como funciona el código y como se usa. Por ejemplo .. pon un ejemplo con una estructura de tablas conocida e indica que campo es la "clave foránea" el cual relaciona ambas tablas.

Algo tipo:

Tabla Padre:
id_tabla_padre
campo1
campo2

Tabla Hija
id_tabla_hija
id_tabla_padre <--- Campo que relaciona ambas tablas "clave foránea"
campo1
campo2

No sé si será así la estructura que ha de cumplir las tablas para establecer las relaciones .. pero en tal caso .. indicalo con más "blabla" (no sólo el código como ya pusistes sino la explicación en texto ...), por qué esta -breve- explicación:

Cita:
/*Buscar los valores pasados porque solo los muestra en números
ejemplo: BD= laBDnumero44 --> 44
su tabla: latabla7 --> 7
Osea BD 44 tabla 7
*/
por mi parte no la entendí ..

Un saludo,

Última edición por Cluster; 07/10/2004 a las 06:32
  #5 (permalink)  
Antiguo 14/10/2004, 17:34
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Mensaje Para los que necesiten combos desplegables dependientes de otro combo con mySQL

loading.........


Vaya mi tardanza pero no entraba a mi email y perdí este post xD
Pues bien el script no encuentra relacion en ninguna de las tablas osea no hace uso de claves foraneas para referirse a una tabla segun al otra este script solo te muestra

Cada Tabla con sus respectivas Columnas, sirve de mucho si vas a trabajar con alguna edicion de base de datos

El codigo que está mas arriba lo que hacìa era: Mostrar Todas las bases de datos del servidor con sus respectivas tablas.

Ahora este codigo muestra: Todas las tablas con sus respectivas columnas y se verifica que columnas fueron seleccionadas lamentablemente no pude hacer que la seleccion de columnas fueran multiples =( creo que hay que manejar bien javscript para que agarre un array para expandir los datos dentro de su camio automàtico.

Estoy usando palabras como PADRE que referencia a la TABLA e HIJO a su respectiva columna para ubicarse mejor.

Puse el Script en un servidor gratuito que tengo instalado phpBB
http://usuarios.lycos.es/oraculomist...automatico.php
Se puede ver como se generan las tablas y columnas, veanlo.

Código PHP:
<?php
//La conexion
$server="localhost";
$usuario="";
$pass="";
$labasededatos="";
//Conexion con la Base de Datos
$bdconex mysql_connect($server,$usuario,$pass);
mysql_select_db($labasededatos,$bdconex);
?>
<html>
 <head>
<style>
<!--
BODY {
cursor : crosshair;
font-family:Tahoma;
font-size: 8pt;
margin-left:0; margin-right:0
font-color:#FFB76F;
background-color: #ffffff
}
TD{font-family:Tahoma;font-size: 8pt;}
select {font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;font-size: 8pt;color: #666666;
        background-color: #ffffff;}
input {font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
font-size: 8pt;
}
-->
</style>

<script language="JavaScript">
var alaBDes = new Array(
<?php
//Mostramos todas las tablas para crear los PADRES
$az mysql_query("SHOW TABLES");
echo
"\"Selecciona la Tabla\"";
//Comenzamos a generar el Array PADRE
while ($bd mysql_fetch_array($az)) {
//Escribimos nombres para los PADRES de acuerdo al nombre de todas las Tablas
echo ",\"".$bd[0]."\"";
}
echo
");

var aTABLITAS0 = new Array(\"\");
"
;
//Mostramos todas las tablas para crear los PADRES
$ay mysql_query("SHOW TABLES");
$a=1;
//Generar los Arrays HIJOS de acuerdo al PADRE de cada uno de Ellos
while ($bd mysql_fetch_array($ay))
{
//Escribimos nombres los HIJOS de acuerdo al nombre del PADRE
echo"aTABLITAS$a = new Array(";
//llenamos el array HIJOS con los nombres de las columnas  de acuerdo al nombre del PADRE
$tb = @mysql_query("SELECT * FROM ".$bd[0]);
$a2 0;
echo
"\"Selecciona la Columna\"";
while (
$a2 mysql_num_fields($tb))
{
//escribimos nombres de columnas
echo ",\"".mysql_field_name($tb,$a2)."\"";
$a2++;
}
//liberamos memoria
mysql_free_result($tb);
echo
");
"
;
$a++;
}
//liberamos memoria
mysql_free_result($ay);
//Volvemos a declarar a los Arrays PAdres
echo"var aTABLITAS = new Array(
aTABLITAS0"
;
$x=1;
//Mostramos todas las tablas para crear los PADRES
$ah mysql_query("SHOW TABLES");
while (
$b mysql_fetch_array($ah)) {
//Escribimos la cantidad de Arrays Que necesitamos para los PADRES
echo",aTABLITAS$x
"
;
$x++;
}
mysql_free_result($ah);
echo
");
"
;



?>

function opcion(oCntrl, iPos, sTxt, sVal){
     var selOpcion=new Option(sTxt, sVal);
     eval(oCntrl.options[iPos]=selOpcion);
   }

function cambia(oMster, oCntrl){
    var nSelected = oMster.selectedIndex;
    while (oCntrl.length) oCntrl.remove(0);
    for(var i = 0; i < aTABLITAS[nSelected].length; i++)
     opcion(oCntrl,  i, aTABLITAS[nSelected][i], String(i));
   }

function llena(oCntrl){
    while (oCntrl.length) oCntrl.remove(0);
    for(var i = 0; i < alaBDes.length; i++)
     opcion(oCntrl,  i, alaBDes[i], String(i));
   }


</script>


 </head>
 <body>
<?php
echo"<form name=frm action=".$_SERVER['PHP_SELF']." method=GET>";
?>
<table align=center border=1><tr>
<td align=center>Tablas</td><td align=center>Columnas</td>
   </tr><tr> <td align=center>
   <select name="PADRE" onchange="cambia(this, document.frm.HIJO)">
    <option value="">&nbsp;</option>
   </select></td><td align=center>
   <select name="HIJO">
    <option value="">&nbsp;Selecciona la Tabla</option>
   </select></td></tr>
<tr><td colspan=2 align=center>
<input type=submit name='ok' value='Trabajar con la Seleccion'>
</td></tr></table>
</form>
<script language="JavaScript">
llena(document.frm.PADRE);
</script>
<br><br>
<?php

if(isset($_GET['ok']))
{
if(!empty(
$_GET['PADRE']))
{
$az mysql_query("SHOW TABLES");
//Comenzamos la busqueda del PADRE
$a=1;
while (
$bd mysql_fetch_array($az)) {
if(!empty(
$_GET['HIJO']))
{
//Si contiene una seleccion hacemos la busqueda respectiva
//segun el PADRE que se haya elegido
//osea le buscamos el hijo al padre
$buscarHIJO mysql_query("SELECT * FROM ".$bd[0]);
$k 0;
while (
$k <= mysql_num_fields($buscarHIJO))
{
//Comparamos lo que se eligiò en el select con los hijos del padre
if($k == $_GET['HIJO'])
{
//y asignamos el nombre que encontrò a la varibale HIJOd
$HIJOd=mysql_field_name($buscarHIJO,$k-1);
//Se encontrò al hijo terminamos la busqueda
break;
}
$k++;
}
mysql_free_result($buscarHIJO);
}else{
$HIJOd="Simplemente no se Seleccionò nada";}
//Hacemos la busqueda del PADRE
if($a==$_GET['PADRE'])
{
//PADRE  ya fuè encontrado terminamos el bucle
//y asignamos el nombre que encontrò a la varibale PADRE
$PADRE=$bd[0];break;}
//liberar memoria
@mysql_free_result($buscarHIJO);
$a++;
}
echo
"<div align=center>La Tabla Seleccionada(PADRE) es: <b>".$PADRE."</b>&nbsp;&nbsp;&nbsp;La Columna(HIJO) es: <b>".$HIJOd."</b></div>";
}
else{}
}
?>
 </body>
</html>

Ahora bien no domino para nada Javascript el script para los combos fuè tomado de su FAQ.

En las Faq de PHP cluster puso un script para buscar relacion de tablas con una clave forànea podrìa hacerse tambien con javascript serìa interesante.


connection closed.
__________________

Maborak Technologies

Última edición por MaBoRaK; 14/10/2004 a las 19:44
  #6 (permalink)  
Antiguo 15/10/2004, 06:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Ahh .. Ok, .. yo creía que las tablas eran relacionadas .. no sólo generar "listas <select>" independientes ...

[quoteEn las Faq de PHP cluster puso un script para buscar relacion de tablas con una clave forànea podrìa hacerse tambien con javascript serìa interesante.[/quote]

Si, .. en alguna ocasión se han propuesto soluciones hibridas entre PHP+Javacript para tal fin . .incluso tienes el tema de "Remote Scripting" para solventar el problema de listas dependientes (en la FAQ que haces referencia dejé el link hacia el ejemplo para esa técnica).

Un saludo,
  #7 (permalink)  
Antiguo 15/10/2004, 08:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 55
Antigüedad: 20 años, 1 mes
Puntos: 0
Gracias Cluster, buen comentario.

Saludos
__________________
Horacio
SitiosHispanos.Com
Tu Sitio en Internet
Tel: +(54) 341- 4245171
Urquiza 1357 PA
www.sitioshispanos.com
  #8 (permalink)  
Antiguo 11/11/2004, 22:01
Avatar de gaitagarcia  
Fecha de Ingreso: julio-2002
Mensajes: 79
Antigüedad: 22 años, 4 meses
Puntos: 0
Desacuerdo ayuda

copie el primer codigo que es para hacer listas dependientes y la adapte a mi sitio, pero tengo el problema que cuando hago el volcado de mi base de datos a la subcategoria, son 490 campos msa o menos, y no tiraba el error por el tinyint. Lo que hize fue pasar de tinyint a int, y me deja volcar. Pero no me funciona las listas dependientes snif!!! alguien sabe que sera???

Gracias
g
  #9 (permalink)  
Antiguo 12/11/2004, 07:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
gaitagarci

El ejemplo propuesto aquí no crea listas dependientes . .sólo muestra el contenido de tablas .. pero no las relaciona bajo tu campo "llave" .. Para eso debes probar esta FAQ:

http://www.forosdelweb.com/f18/faqs-php-530600-post664999/

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 21:55.