Programación Web y Scripting > PHP

 Re: Posible Solucion A Catálogos

(1/4) > >>

ibito:
Bueno, solo quiero ayudar y que me den ideas a ver que piensan de lo siguiente, creo que algunos podemos salir beneficiados de ésto:

Por lo general, cuando estamos trabajando en alguna empresa, nos piden que hagamos catálogos de algunas tablas (ya saben, altas, bajas y modificaciones), entonces, pensé que debería existir alguna manera de hacer ésto mas fácil cada vez que vamos a hacer catálogos, a mi se me ocurrió lo siguiente, hacer una página, que tome el nombre de la tabla por medio del método get, revise los nombres de los campos y todos aquellos que empiecen con "id_" sean llaves foráneas, excepto la que empiece con "id_" y siga con un nombre igual al nombre de la tabla.

Haría una consulta por cada "id_"campo, y mostraría las opciones que se pueden dar por medio de un select (o combo como lo llamen).

En fin, los requisitos para éste script, es que las llaves foráneas se llamen "id_"+el nombre exacto de la tabla, otro requisito es que en las tablas donde se generan los combos o selects, debe haber un campo con el nombre "nombre". En un futuro cercano (pues tengo que trabajar ahora con éstos catálogos :P) quiero agregarle AJAX para mostrar el contenido de la tabla.

En fin, me gustaría que apoyaran con ideas/código, igual yo pongo aqui lo poco que llevo, si alguien ve algo mal, pues adelante puede criticar, pero quiero que ésto sirva para todos  :D.


--- Código: Text --- <?php//Catalogos.include('conexion.php');$tabla=$_GET['catalogo']; $SQL="SELECT * FROM $tabla";$res=mysql_query($SQL); for($i=0; $i<mysql_num_fields($res); $i++){    if(substr(mysql_field_name($res, $i),0,3)=="id_")  {    $ids=explode("id_", mysql_field_name($res, $i));    $campos_ids[$i]=$ids[1];  }  else   {    echo ucfirst(mysql_field_name($res, $i)).": <input type=\"text\" name=\"".mysql_field_name($res, $i)."\"><br>";  }  if($tabla!=$campos_ids[$i] && substr(mysql_field_name($res, $i),0,3)=="id_")  {    $SQL="SELECT * FROM $campos_ids[$i]";    $r=mysql_query($SQL);    echo ucfirst($campos_ids[$i]).': <select name="'.$campos_ids[$i].'">';    while($row=mysql_fetch_array($r))    {      echo '<option value="'.$row[mysql_field_name($res, $i)].'">'.$row['nombre'].'</option>';    }    echo '</select><br>';  } }  ?>  

Disculpen por el código sin comentarios, mas adelante lo comentaré.

vitoretor:
Orale que buena onda que te interese facilitarnos el trabajo jejeje...suena interesaten, faltaria chekarlo en pekeños ejemplos para ver los detallitos k puedan hacer falta... pero esta bien, las ideas se hacen que las cosas grandes pasen.....hasta luego y buen trabajo

F_Tanori:
Me parecemuy buena idea..


espero poder coloborar con tu 'proyecto' de mejorar los clasicos catalogos y espero poder aportar algo en cuanto se me ocurran ideas


saludos

Suerte!

F_Tanori:
que tal...


hice unas pequeñas adaptaciones no es mucho pero pretendo seguir colaborando en esto, me ha interesado, es de gran utilidad para todos y creo que es bueno saber que hay muchos cerebros que pueden aportar ideas



--- Código: Text ---  <?//Archivo con las Opciones de conexioninclude("conexion.php"); //Archivo con Funciones para crear controles en HTMLinclude("forms.php"); //Tomar el nombre de la tabla$tabla=$_GET['catalogo'];  if (isset($tabla)){      //Ejecutar una consulta a la tabla seleccionada       $SQL="SELECT * FROM $tabla";      $res=mysql_query($SQL);      ?>      <br><br><br>      <!--Crear el Form -->      <Form name=<? echo "frm_$tabla"?> action="guardar.php" method="GET">       <!-- Crear una Tabla HTML para ordenar los campos -->      <table border=0 cellspacing=0 cellpadding=0>      <?       //Tomar los nombres de los campos y generar una pantalla para captura       for($i=0; $i<mysql_num_fields($res); $i++)        {         //Tomar las llaves foraneas en un arreglo para generar un combo con sus posibles valores de la tabla        //de referencia           if(substr(mysql_field_name($res, $i),0,3)=="id_")            {            $ids=explode("id_", mysql_field_name($res, $i));            $campos_ids[$i]=$ids[1];            }          else            {             echo "<tr><td>".ucfirst(mysql_field_name($res, $i)).":&nbsp&nbsp</td><td>".Creartxt(mysql_field_name($res, $i),"text",25,"","")."</td></tr>\n";            }       //Comprobar si es una llave foranea si lo es crear un combo (Select)          if($tabla!=$campos_ids[$i] && substr(mysql_field_name($res, $i),0,3)=="id_")          {            echo "<tr><td>$campos_ids[$i]</td><td>".CrearCombo($campos_ids[$i],"")."</td></tr>";          }        }        echo "<tr><td colspan=2><center><br>".Creartxt("OK","submit","0","Guardar","")." ".Creartxt("Borrar","reset","0","Limpiar","")."</center></td></tr>";}?></form></table>   
Archivo Forms.php

--- Código: Text ---  <?//Jose Carlos García  http://www.webestilo.com/php/articulo.phtml?art=48//// F_Tánori// Agosto del 2006 function CrearCombo($Tabla,$Extra){    include("conexion.php");    $query="select * from $Tabla";    $resultado =mysql_db_query($bd,$query);    $HTMLCombo="<select name='$Tabla' id=='$Tabla' $Extra><option value='0' selected>[Selecione una opcion]</option>";      while($registro = mysql_fetch_array($resultado))          {            $HTMLCombo.="\n<option value='$registro[0]'>$registro[1]</option>";          }      mysql_free_result($resultado);      return "$HTMLCombo\n</select>";  } //===============================================================================================================function Creartxt($Nombre,$Tipo,$Tamano,$Valor,$Extra){    include("conexion.php");     return "<input name='$Nombre' id='$Nombre' type='$Tipo' size='$Tamano' value='$Valor' $Extra>";} ?>   
Espero no haber modificado la idea que se tiene con esto por ahora no es mucho el avance pero ya vendra... ya estoy trabajando  :comp:  en unas validaciones en las capturas


Saludos

ibito:
Ahora que mencionas eso de las validaciones, estaba pensando, en usar la función mysql_field_type() para saber que tipo de dato tiene el campo, si es double, se puede usar una función de javascript que hay en la web para que solo se puedan introducir números (con decimal), si es int, pues solo enteros, y así  :D

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa