Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/10/2004, 17:34
Avatar de MaBoRaK
MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
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