Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Creación de Formularios Dinámicos

Estas en el tema de Creación de Formularios Dinámicos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a tod@s, Antes de nada tengo que deciros que siempre he programado en ASP, pero estoy ya un poco cansado y he decidido empezar ...
  #1 (permalink)  
Antiguo 27/07/2006, 10:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Mensaje Creación de Formularios Dinámicos

Hola a tod@s,

Antes de nada tengo que deciros que siempre he programado en ASP, pero estoy ya un poco cansado y he decidido empezar con PHP. Mis nociones son muy básicas y para empezar y aprender tengo un pequeño proyecto que quisiera llevar a buen puerto. Iré poniendo mis avances y toda la ayuda que tenga será bienvenida.

Quisiera realizar una clase que pasándole el nombre de una tabla de una BD me analizara la misma y me crease un formulario con sus campos dinámicamente.

Mi idea es hacer una clase tabla y en ella desgranarla... utilizando las faq comienzo mi clase por conectar con la base de datos, más o menos sería así:


Estoy un poco atrancado y no sé por donde seguir.

Bueno, continúo con la tarea, cuando avance otro poco seguiré poniendo código.

Gracias a tod@s y un saludo!!!

Última edición por f_murciano; 02/08/2006 a las 01:08
  #2 (permalink)  
Antiguo 02/08/2006, 01:08
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Creo que no empecé bien

Creo que la idea no la tengo bien estructurada y por eso no puedo seguir con el código. Y antes de convertirlo en algo mal hecho desde el principio, paro y comienzo de nuevo.

He leido en muchos sitios que un buen diseño de las clases evita muchas complicaciones en el futuro. Y al ser nuevo en estos lares pido humildemente vuestros consejos acerca de mi proyecto.

Comento en el post anterior, que mi idea es hacer una clase a la que le paso el nombre de una tabla de mi BD. Pensé que al instaciar esta clase se podrían obtener el número de campos y las características de cada uno y en otra clase diferente, a la que le paso el objeto de la primera, se montara el formulario.

¿el planteamiento es correcto?

Muchas gracias a tod@s.
  #3 (permalink)  
Antiguo 02/08/2006, 08:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Creo que el problema que tienes es que hablas de "classes" y de un proyecto bien concreto.

Antes de hacer una "classe" .. deberías conocer que eso es la implementación final en PHP de lo que se denomina "Programación Orientada a objetos" .. Este tipo de "paradigma" tiene un montón de teoría al respecto para "diseñarlo" bien ... Antes de tirarte con la "classe" deberías tener claro el planteamiento de lo que necesitas en "papel" tal vez un diseño en UML o por lo menos definir los "objetos" .. las "propiedades de estos" y las relaciones entre ellos .. Luego vendrá su "translación" a código PHP como una "classe" que lo empaquetará todo ..

----------
Sobre tu idea ...

A mi en lo personal no me gustan esas "classes" que me leen los nombres de los campos de mi BBDD para crearme formularios "automáticos" .. así al final no puedes separar bien el "diseño" (la "vista") o presentación de la programación PHP .. a modo por ejemplo de usar un "motor de gestión de plantillas" y poder "dar" el trabajo del diseño de tus formularios a un "diseñador", en ese tipo de casos es un -programador- el que debe diseñar esos "formularios" ya que tus classes van a "generar" dinámicamente ese "HTML" de los mismos.

Esto no quiere decir que no tengas classes para validaciones de tus datos de formulario o ingreso de datos/rescate de datos de tus BBDD en función de los "campos" de tus formularios .. que de hecho es lo que al final acabamos haciendo todos, sea como una simple función o conjunto de estos o encapsulado en una classe o un "real" objeto dentro de una aplicación.

Te recomiendo ver "classes" al respecto ya implementadas para que veas como trabajan .. las pruebes y veas si es lo que necesitas .. ya sea para usarlas tal cual o tomar ideas para desarrollar las tuyas:

www.phpclasses.org

(veras por ejemplo en el apartado "HTML" classes que generan HTML .. formularios y demás, también en la categoria de Base de datos veras pequeñas classes para crear ABM (Altas, Bajas .. modificaciones) )

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 02/08/2006, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Mira si te sirve, yo tengo una clase (o una serie de) clases que te hacen eso, desde el nombre de una tabla y un esquema en XML, crea una tabla con posibilidades de editar, borrar e insertar nuevos datos, te crea el formulario y la validacion (en JavaScript y PHP) para facilidad de uso, aparte tiene la "cualidad" de separar el codigo del html, ya que usa templates (si estan definidos, si no son autogenerados) para crear el formulario y la vista.

El esquema que manejo es este:
Código:
Clase DB  ----------------> Clase DBTabla ----\         Clase HTMLUtils
                               |                                 \             |
Clase Tabla  -------\   |                                  \            |
Clase Formateador ----+> Clase DataGrid --------+--> Clase ABM(altas,bajas,modificaciones)
Clase Paginador -----/                                    /
                                                                /
Clase Formulario ---> Clase PluginsFormulario -/
  #5 (permalink)  
Antiguo 02/08/2006, 11:35
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Muchas gracias por responder,

No conocía la web www.phpclasses.org , es muy interesante. Me ayudará mucho. Gracias Cluster.

Y Gracias también a GatorV por mostrarme el esquema, aunque tengo que confesar que es demasiado complicado para mí. Aunque supongo que todo el mundo termina aprendiendo.

Un saludo.
  #6 (permalink)  
Antiguo 02/08/2006, 16:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
El problema es que esta en texto jaja, a ver si me animo y mas tarde lo hago en UML y lo pego como imagen
  #7 (permalink)  
Antiguo 03/08/2006, 00:22
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Jejeje, muchas gracias GatorV. Por cierto, utilizo php4 por cuestiones del servidor ¿no habrá problema no?

Y con respecto al esquema que me mandaste, hay dos clases que creo que las veo más o menos claras, que son;

Clase DB; para conectarse a la base de datos
Clase DBTabla; para obtener la información de la tabla (número de campos, nombre de campos, tipo, etc...)

Las otras no las tengo muy claro. Intuyo su funcionamiento, pero nada más. ¿te importaría aclararmelo un poco? Muchas gracias.

Un saludo.
  #8 (permalink)  
Antiguo 03/08/2006, 08:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Claro:
Clase DB -> Conecta a la Base de datos, y manda querys, algo simple/complejo
Clase DBTabla -> Obtiene informacion de la tabla en cuestion, asi como generar y ejecutar INSERTS, DELETES, UPDATES, SELECTS en base a un array solamente (en mi caso)
Clase HTMLUtils -> Sirve para generar links, y otros controles HTML
Clase Tabla -> Sirve para generar Tablas HTML desde codigo (oop)
Clase Formateador -> Sirve para poder hacer plugins y poder presentar los datos de cierta forma que se requiera (como por decir hacer una columna un link con un dato, etc.)
Clase DataGrid -> Es un conjunto de clases se encarga de seleccionar los datos, y crear la tabla HTML utilizando las demas clases
Clase ABM(altas,bajas,modificaciones) -> Es un conjunto de todas las clases que inicializa cada clase que depende de ella con sus datos en concreto.
Clase Paginador -> Crea un paginador para la tabla para solo mostrar X filas cada que se dibuja la tabla, y pone los links para poder avanzar o retroceder en la tabla.
Clase Formulario -> Se encarga de dibujar los controles HTML, para formar un formulario, asi como la validacion, y tambien utliza "plugins" para cada control en especifico se genere del lado del servidor sin que el usuario tenga que hacer nada de HTML
Clase PluginsFormulario -> Cada "control" HTML tiene una clase en el servidor que se encarga de validar cada dato que contiene y dibujar el control en la forma web.
  #9 (permalink)  
Antiguo 03/08/2006, 08:57
 
Fecha de Ingreso: octubre-2005
Mensajes: 85
Antigüedad: 18 años, 6 meses
Puntos: 0
Olas bueno estuve viendo los post, y la verdad Gatorv, comentas mucho sobre tu framework, lo hiciste en este post tambien,(que por cierto se ve muy interesante), pero no crees que seria bueno que lo compartas para estudiarlo y quizas con la ayuda de todos darle mejoras y hasta hacer la documentacion, bueno no es que quiera aprovecharme de tu proyecto, sino que como mucho hablas de ello, despiertas esa curiosidad, pero en fin todo es de buena voluntad.
  #10 (permalink)  
Antiguo 07/08/2006, 11:39
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Gracias GatorV, pero me he perdido un poco en el diagrama. Le dí 1000 vueltas pero hay aspectos que no logro ver. Creo que mi mente no se quiere despegar de la programación estructurada (y mira que lo intento).

Empezaré en este proyecto por lo básico, con las clases:

Clase DB
Clase DBTabla


Intentaré mostrar por pantalla todos los campos de mi tabla y las propiedades que utilizaré. A ver si logro avanzar un poco.

Iré poniendo mis pobres logros.

Muchas gracias por todo.

Un saludo.
  #11 (permalink)  
Antiguo 08/08/2006, 10:58
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
En esta duda, quizás se me note demasiado lo verde que estoy. Pero bueno, allá vá:

Al conectarme a la base de datos con mi ClaseBD le tengo que pasar unos cuantos parámetros:

$obj=new conectarMySQL("SERVIDOR","USUARIO","PASSWORD","BAS E DE DATOS");

Estos parámetros ("SERVIDOR","USUARIO","PASSWORD","BASE DE DATOS") son convenientes que estén en variables globales? o nada de variables globales por el tema de la encapsulación? (no sé si he dicho una barbaridad)

Muchas gracias!!
  #12 (permalink)  
Antiguo 08/08/2006, 21:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
jajaj NADA DE GLOBALES, lo que te recomiendo ahi es usar objetos privados dentro de la clase para almacenarlos o usar una forma de datastore donde los puedas almacenar dentro de un txt o xml :)
  #13 (permalink)  
Antiguo 10/08/2006, 09:56
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Bueno amigos, poco a poco estoy enterandome del asunto, ya tengo realizado lo siguiente:

Mi clase para conectarme a la BD

Una clase tablaAt en la que tengo los diferentes atributos de cada uno de los campos (nombre, longitud, tipo, etc...)

Una clase TablaBD en la que recorro con un bucle todos los campos de la tabla que estoy desgranando y creo una instancia del objeto tablaAt (la clase anterior) por cada campo.

Ahora lo que quiero es ir metiendo en un array todos esos objetos que me estoy creando en el bucle de la clase TablaBD.

1º) no sé como hacer ese "arraylist" ???
2º) como utilizo ese array de objetos ??? con un return???

No sé si me expliqué bien o estoy liando más la cosa.

Muchas gracias a todos!!!
  #14 (permalink)  
Antiguo 17/08/2006, 01:12
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Amigos, algo avanzo...

Encontré una clase ya realizada llamada arrayList. Con lo que investigando un poco pude completar un array de objetos sin problemas. Y utilizo return para capturar este array de objetos por otra clase.

Me cree una nueva clase TablaHtml que la utilicé para pintar el formulario. Yyyyy... biiiiieeeeen!!! consigo pintar mi formulario sin problemas!!

Ahora me encuentro otra vez atrancado, por que no sé como enfocar la inserción, modificación y borrado de registros con las clases que tengo.

¿alguna idea? ¿alguna ayuda?¿algún ejemplo?


Muchas gracias por todo.

PD: está interesante el mundo este de OO. Aunque esté muy verde aún.
  #15 (permalink)  
Antiguo 18/08/2006, 01:02
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Amigos,

Antes de la edición (inserción, modificación y borrado) de mis campos, me encuentro con otro contratiempo al pintar mi formulario. Se trata de las claves foráneas (foreing key).

Si en mi tabla tengo una clave foránea, lo ideal al pintar el formulario sería que en lugar de pintar una caja de texto en dicho campo, pintase un combo con los campos de la tabla relacionada, por ejemplo:

TABLA USUARIOS: id, nombre, apellidos, idIdioma
TABLA IDIOMAS: idIdioma, descripción

Al pintar el formulario para la tabla usuarios, lo ideal es que el campo idIdioma fuese un combo con el contenido de la tabla IDIOMAS.


Se me ocurre que puedo hacer esto, pasándole por parámetro a mis clases todas las foreing key en un array o algo así. Pero no sé si será lo mejor.

Por eso acepto todas las propuestas para hacer esto de una manera automática, sin tener que pasarle parámetros.


Muchas gracias por todo, y perdonad que sea tan pesao.
  #16 (permalink)  
Antiguo 18/08/2006, 09:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Hola Murciano, pues realmente depende de lo que quieras hacer, yo te puedo decir en mi caso lo dejo como un "parametro extra" o sea si no esta definido por default se pinta el idIdioma en su caso, pero le puedes pasar el parametro para definir el foreign key para pintar el combo en su caso.

Yo te recomendaria hacerlo asi, ya que de esta forma le dejas esa extensibilidad, al proyecto que vayas a realizar, o sea si requieres que te pinte el combo lo pones y si no, no lo pones.

Espero sea claro! saludos!
  #17 (permalink)  
Antiguo 18/08/2006, 10:52
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Gracias por responder GatorV,

Otra opción que tengo es crearme en mi Base de Datos una tablita con las foreign key, puesto que una tabla puede tener más de una. ¿que te parece esta idea?

Ahora no sé por cual decidirme si hacerme la tablita o pasarle un parámetro (que supongo que sería un array) como me comentas en el post anterior.

Muchas gracias por todo.

Saludos.
  #18 (permalink)  
Antiguo 24/08/2006, 11:17
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola a todos,


Ya pinto mi formulario, el problema que tengo es que no sé como recoger los datos del submit para llevarlos a otra clase que será la que me inserte.

Osea como leches llamo a esa clase???

Muchas gracias por todo

Saludos
  #19 (permalink)  
Antiguo 24/08/2006, 21:07
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Pues me imagino que si tu le pasas por parametro a tu clase el $_POST, podrias con un metodo de tu clase(y el foreach como no) armar la sentencia SQL que te inserte los datos del formulario... claro que lso nombres de los campos(variables) de tu formulario deberian ser iguales a los campos de la tabla donde deseas insertar.

Bueno, ojala te sirva de algo mi comentario.

Saludos!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #20 (permalink)  
Antiguo 25/08/2006, 02:02
 
Fecha de Ingreso: febrero-2004
Mensajes: 157
Antigüedad: 20 años, 2 meses
Puntos: 0
Muchas gracias por responder Fridureiks,

Me ayudó, tomo en mi clase de pintarFormulario si hay un valor $_POST del botón aceptar, si es así paso a guardar los datos en la BD y si no pinto el formulario.

Muchas gracias, me estaba ahogando en un baso de agua.

Bueno, ahora me voy a liar con la validación de los formularios, supongo que al mismo tiempo que pinto el formulario tendré que pintar unas funciones javascript que me validen los datos ¿no?


Muchas gracias,

Saludos

PD: Ya se ve un fin en este túnel
  #21 (permalink)  
Antiguo 25/08/2006, 08:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Asi es, puedes hacer las dos cosas poner las funciones javascript y tambien validar del lado del server para que no haya problemas con los clientes que no soporten javascript.
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 08:09.