• Publicidad

FormBuilder

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

FormBuilder

Notapor noa86 » 2011-04-26 11:51 @535

Hola,

Estoy intentando trabajar dentro de un CGI::Application con CGI::FormBuilder.

Lo que quiero realizar es: realizando un select * a una base de datos en el que me devuelve una lista de usuarios con todos sus datos, quiero que se muestren en una tabla, utilizando FormBuilder.

No sé cómo debo interactuar para poder pasar el parámetro de la base de datos y se muestren todos los datos y a continuación poder seleccionar uno de ellos. Trabajo con MySQL.

Agradecería ayuda ya que en http://www.formbuilder.org/ no encuentro lo que quiero...

Gracias por adelantado.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Publicidad

Re: FormBuilder

Notapor explorer » 2011-04-26 13:42 @613

Sí que hay un ejemplo, más o menos parecido, en la página de manual de CGI::FormBuilder. En número 4 recupera la información de un usuario y crea un formulario con esos datos.

Yo no lo he probado, pero sería recuperar la información de la base de datos, metiéndola en un hash (o quizás un array... o un array de hash.... no lo tengo claro), para luego pasarlo al new() del módulo, en la opción 'options' o 'values' (tampoco lo tengo claro).

A ver si alguien más sabe de este asunto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: FormBuilder

Notapor noa86 » 2011-04-26 13:54 @621

Sí, pero eso es con los datos de un usuario. No una tabla con los datos de varios usuarios, línea por línea, que es lo que quiero.

De todos modos ese ejemplo lo he probado con mi base de datos y mis datos y no me funciona... y no sé por qué.
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: FormBuilder

Notapor explorer » 2011-04-26 14:56 @663

Mirando con más detalle el módulo, me parece que deberás usar una plantilla para poder presentar los datos en forma de tabla...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: FormBuilder

Notapor noa86 » 2011-04-27 14:13 @634

Estoy realizando un formulario para crear nuevos usuarios. Siguiendo con FormBuilder...

he visto en el tutorial una manera de validar que las passwords sean iguales y tengan un formato, pero no me funciona. Si me dierais alguna idea...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @fields = qw(usuario password confirm_password correo tlfno activado);
  2.  
  3. $form = CGI::FormBuilder->new(
  4.     fields   => \@fields,
  5.     required => 'ALL',
  6.     messages =>
  7.         { form_required_text => 'Los campos en negrita son obligatorios' },
  8.     validate => {
  9.         password         => \&check_password,
  10.         confirm_password => {
  11.             javascript => '== form.password.value',
  12.             perl       => 'eq $form->field("password")'
  13.         },
  14.     },
  15.  
  16. );
  17. $form->field(
  18.     name      => 'usuario',
  19.     label     => 'Nombre de usuario',
  20.     size      => 30,
  21.     jsmessage => " * Nombre de usuario no es el correcto"
  22. );
  23. $form->field(
  24.     name      => 'password',
  25.     size      => 30,
  26.     jsmessage => "* mínimo 6 caracteres"
  27. );
  28. $form->field(
  29.     name      => 'confirm_password',
  30.     size      => 30,
  31.     jsmessage => "* mínimo 6 caracteres"
  32. );
  33. $form->field(
  34.     name      => 'correo',
  35.     label     => 'Email',
  36.     size      => 30,
  37.     validate  => 'EMAIL',
  38.     jsmessage => " * El formato del correo no es el correcto"
  39. );
  40. if ( $form->submitted && $form->validate ) {
  41.  
  42.     # you would write code here to act on the form data
  43.     my $field = $form->fields;
  44.     $field->{usuario};
  45.     return $form->confirm;
  46. }
  47. else {
  48.     return $form->render;
  49. }
  50. }
  51.  
  52. sub check_password ($) {
  53.     my $v = shift;                     # first arg is value
  54.     return unless $v =~ /^.{6,8}/;     # 6-8 chars
  55.     return if $v eq "password";        # dummy check
  56.     return unless passes_crack($v);    # you write "passes_crack()"
  57.     return 1;                          # success
  58. }
  59.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2011-04-27 19:19 @847, editado 1 vez en total
Razón: Formatear el código con Perltidy
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: FormBuilder

Notapor noa86 » 2011-04-28 05:08 @255

¿Se puede utilizar correctamente FormBuilder con CGI::Application? Porque estoy teniendo varios problemas. que realizándolo en un cgi normal, no los tengo...

¿Hay algún módulo dentro de Perl para poder utilizar JavaScript para validar los campos de un formulario? O de igual manera. Utilizando el CGI::Application que tengo con Template Toolkit, sin form-builder, cómo tenía en un inicio, ¿puedo introducir a esas plantillas JavaScript? ¿cómo? ¿algún tutorial?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: FormBuilder

Notapor explorer » 2011-04-28 09:53 @453

A ver... no conozco FormBuilder también como para darte un buen consejo, pero sí una reflexión: lo que el servidor web está esperando es el HTML que hay que enviar el navegador del usuario. Y si estás en CGI::Application, eso corresponde con lo que debe retornar la subrutina que se ejecuta como runmode, en la última instrucción, generalmente con un return().

Entonces, la solución es pensar que, en lugar de enviar hacia la salida estándar (print) la página creada con FormBuilder, la guardamos en un escalar y eso es lo que devolvemos en el return() del runmode.

He encontrado un hilo de discusión en PerlMonks.org, de hace justamente cuatro años, que plantea los mismos problemas: Problem With CGI::Application and FormBuilder.

Ahí verás (en el segundo código), cómo el programador, en la subrutina login(), devuelve el formulario en caso de que el usuario no haya ingresado correctamente:
return $form->render;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: FormBuilder

Notapor noa86 » 2011-04-29 04:45 @239

Después de mucho mirar... He conseguido que me funcione el FormBuilder. El formulario me aparecía pero luego no trataba el
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($form->submitted){....}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Lo he solucionado introduciendo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. keepextras=>[qw(mode)]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
una de las opciones que tiene FormBuilder.

Mi duda ahora es. Introduzco un nombre de un usuario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $form->field(name => 'usuario', label  => 'Nombre de usuario',  size => 30,jsmessage  => " * Nombre de usuario no es el correcto");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero lo quiero validar de tal manera que me diga si existe otro usuario con el mismo nombre en la base de datos.

¿Sería en un nuevo sub, ya que estoy en cgi-app. Llamándome en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  validate=>/&comprobar
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y que el sub comprobar devuelva true o false? No sé muy bien si eso que estoy diciendo es correcto...
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Re: FormBuilder

Notapor explorer » 2011-04-29 07:08 @339

noa86 escribiste:Lo he solucionado introduciendo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. keepextras=>[qw(mode)]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
una de las opciones que tiene FormBuilder.
Eso es... en el código que te he enlazado, verás que hay unas líneas así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $form->field(name => 'rm', type => 'hidden');
  2. $form->field(name => 'rm', value => 'mode2');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que ayudan a CGI::Application a guardar el modo de ejecución.

noa86 escribiste:Mi duda ahora es. Introduzco un nombre de un usuario:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $form->field(name => 'usuario', label  => 'Nombre de usuario',  size => 30,jsmessage  => " * Nombre de usuario no es el correcto");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero lo quiero validar de tal manera que me diga si existe otro usuario con el mismo nombre en la base de datos.

¿Sería en un nuevo sub, ya que estoy en cgi-app. Llamándome en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  validate=>/&comprobar
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y que el sub comprobar devuelva true o false? No sé muy bien si eso que estoy diciendo es correcto...
Viendo el código que te enlacé, el proceso es: el control lo recibe CGI::Application, ya que la aplicación está basada en ella. Luego, dentro de un runmode (en el código, 'login'), es donde comprueba si el nombre de usuario y contraseña están bien, y si no, muestra el formulario creado con FormBuilder.

En caso de que el usuario sea correcto, el programador crea una nueva sesión, guardando en ella el parámetro 'logged-in' igual a 1. Crea una nueva página, con un nuevo runmode, donde se le da la bienvenida al usuario. En el resto de runmodes, se comprueba el valor de 'logged-in' para comprobar si el usuario de esa sesión está validado o no, y actuar en correspondencia.

En la página cgi-app.org, sí que aparece CGI::FormBuilder como módulo recomendado, pero de forma más "colateral": no hay ejemplos ni manuales. Y en el resto de Internet, tampoco encuentro ejemplos de C::A junto con C::F.

Los que sí recomiendan usar son los plugins:
Es decir: la página se crea con una plantilla; con FillInForm la rellenamos a los valores anteriores o con los valores que queramos; y con ValidateRM comprobamos los valores que nos devuelve el usuario.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron