Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Cómo validar los datos de un formulario con CGI Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota 2010-12-02 19:29 @854

Perlero Nuevo
Registrado: 2010-10-28 17:52 @786
Mensajes: 5
Cómo validar los datos de un formulario con CGI
¡¡Hola a todos!!

Soy electrónico infiltrándome en informática. Tengo una web en la cual existe un formulario (nombre, apellidos, enviar, borrar todo) el cual consulta a una base de datos (MySQL).

El problema radica en que los datos que se ingresan al formulario no se validan y al momento de dar clic en el enviar, siempre presenta los datos según la sentencia SQL.

He leído sobre la función param() para validar, pero no estoy muy claro de cómo usarla.

CÓDIGO HTML (Acá está el formulario):
Syntax: [ Download ] [ Hide ]
Using html4strict Syntax Highlighting
<form  action="/cgi-bin/mostrar.pl" method="post">
Nombre <input name="nombre" maxlength="14" size="15" type="text">
Apellidos <input name="apellidos" maxlength="14" size="15" type="text">
  <input name="enviar" value="Enviar" type="submit"><input name="Borrar" value="Borrar Todo" type="reset">
</form>


Acá expongo el archivo.pl
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4. use strict;
  5. use CGI ':standard';
  6. use DBI;
  7.  
  8. # Imprimiendo las cabeceras
  9. print "content-type: text/html\n\n";
  10.  
  11. print "<html>\n";
  12. print "<head>\n";
  13. print "<title>Resultados</title>\n";
  14. print "</head>\n";
  15. print "<body>\n";
  16.  
  17. print h2("Conexión a MySQL con script de Perl");
  18.  
  19. #print "<h2><center>\n";
  20. #<b>Ejemplo de conexión a MySQL con script de Perl</b>
  21. #</center></h2>";
  22. print "<pre>";
  23.  
  24. # Conectando a la bd MySQL, cuyo nombre es usuarios, usuario root y clave diti2010
  25. my $dbh = DBI->connect("DBI:mysql:usuarios", "root", "diti2010");
  26. die "connect failed: " . DBI->errstr() unless $dbh;
  27.  
  28. # Preparando para obtener la consulta de datos de la tabla clientes
  29.  
  30. my $sth = $dbh->prepare("SELECT id,nombre,apellidos, ip FROM clientes")
  31.             or die "prepare failed: " . $dbh->errstr();
  32.  
  33. $sth->execute() or die "execute failed: " . $sth->errstr();
  34. my($id, $nombre, $apellidos, $ip );
  35.  
  36. # Observando a través de cada fila de data
  37. while (($id, $nombre, $apellidos, $ip) = $sth->fetchrow()) {
  38.     print "$id : $nombre : $apellidos: $ip\n";
  39. }
  40.  
  41. # Se desconecta de la bd
  42. $sth->finish();
  43. $dbh->disconnect();
  44.  
  45.  
  46. # Se escriben las cabeceras de fin
  47. print "</pre>\n";


Gracias.


Nota 2010-12-02 19:55 @871
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Cómo validar los datos de un formulario con CGI
Bienvenido a los foros de Perl en Español, kernelito.

No sé si entiendo la pregunta.

¿Lo que quieres es sacar los datos de un determinado usuario o saber si los datos pasados por el usuario están en la base de datos?

_________________
JF^D Perl programming


Nota 2010-12-03 09:21 @431

Perlero Nuevo
Registrado: 2010-10-28 17:52 @786
Mensajes: 5
Re: Cómo validar los datos de un formulario con CGI
Gracias por responder, voy a explicarme mejor.

Es lo último que digo: comprobar que los datos pasados por el usuario están en la base de datos y así responder la consulta.

Porque así como está, se pone cualquier cosa en el form y siempre responde sin importar que los datos existen en la base de datos.

Saludos.


Nota 2010-12-03 11:01 @501
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Cómo validar los datos de un formulario con CGI
Entonces, lo único que te falta es recuperar los parámetros pasados por el usuario y agregarlos a la sentencia SQL con una cláusula WHERE.

Algo así:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $par_nombre    = param('nombre'   );
  2. my $par_apellidos = param('apellidos');
  3.  
  4. my $sth = $dbh->prepare(
  5.         "SELECT id,nombre,apellidos,ip FROM clientes WHERE nombre = ? AND apellidos = ?"
  6.     )
  7.     or die "prepare failed: " . $dbh->errstr();
  8.  
  9. $sth->execute($par_nombre, $par_apellidos) or die "execute failed: " . $sth->errstr();


Otra cosa... estás cargando el módulo CGI, pero no te estás aprovechando de sus ventajas. Mira mi CGI mínimo para que veas un ejemplo.

_________________
JF^D Perl programming


Nota 2010-12-06 08:52 @411

Perlero Nuevo
Registrado: 2010-10-28 17:52 @786
Mensajes: 5
Re: Cómo validar los datos de un formulario con CGI
Gracias explorer,

Probaré, luego aviso cómo me fue.

Saludos


Nota 2010-12-09 08:44 @405

Perlero Nuevo
Registrado: 2010-10-28 17:52 @786
Mensajes: 5
Re: Cómo validar los datos de un formulario con CGI
Hola nuevamente.

Modifiqué el script, agregué lo recomendado, realicé la consulta desde la página web y no recupera los parámetros que se ponen en el campo del formulario (nombre y apellidos). Es decir, coloco cualquier dato en nombre y apellido y luego muestra solamente la frase "Conexión a MySQL con Script de PERL".

Abajo está el script completo, si hay alguna duda de lo que hice.

Saludos y gracias por el apoyo.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/us/bin/perl
  2. use warnings;
  3. use strict;
  4. use CGI qw(:standard);
  5. use CGI qw(param());
  6. use DBI;
  7.  
  8.  
  9. my $par_nombre    = param('nombre' );
  10. my $par_apellidos = param('apellidos' );
  11.  
  12. my ( $dbh, $sth  );
  13.  
  14.  
  15. # Imprimiendo las cabeceras
  16. print "content-type: text/html\n\n";
  17.  
  18. print "<html>\n";
  19. print "<head>\n";
  20. print "<title>Resultados</title>\n";
  21. print "</head>\n";
  22. print "<body>\n";
  23.  
  24. print h2("Conexion a MySQL con Script de PERL");
  25.  
  26. print "<pre>";
  27.  
  28. # Conectando a la bd mysql, cuyo nombre es usuarios, usuario root y clave xxxx
  29. $dbh = DBI->connect("DBI:mysql:host:=localhost;database=usuarios", "root", "xxxx");
  30. die "connect failed: " . DBI->errstr() unless $dbh;
  31.  
  32. # Preparando para obtener la consulta de datos de la tabla clientes
  33. $sth = $dbh->prepare("SELECT id,nombre,apellidos,ip  FROM clientes WHERE nombre = ? AND apellidos = ?")
  34.  or die "prepare failed: " . $dbh->errstr();
  35.  
  36. $sth->execute($par_nombre, $par_apellidos) or die "execute failed: " . $sth->errstr();
  37. #my($id, $nombre, $apellidos, $ip );
  38. $sth->finish();
  39. $dbh->disconnect();
  40.  
  41. # Se escriben las cabeceras de fin
  42. print "</pre>\n";


Nota 2010-12-09 14:29 @645
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Cómo validar los datos de un formulario con CGI
No sale nada porque has quitado el bucle while(). Además, tienes un ':' delante de un '=' en la conexión a la base de datos.

Esta es mi versión:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6.  
  7. use CGI       qw':standard *pre ';
  8. use CGI::Carp qw'fatalsToBrowser';      # avisos y errores a la página
  9. use DBI;
  10.  
  11.  
  12. $|++; # no caché de salida
  13.  
  14.  
  15. ## Leemos los argumentos
  16. my $par_nombre    = param('nombre');
  17. my $par_apellidos = param('apellidos');
  18.  
  19.  
  20. ## Si no nos han pasado argumentos, avisamos con un error
  21. if (not $par_nombre  and  not $par_apellidos) {
  22.     print
  23.         header,
  24.         start_html('Resultados: ERROR en la consulta'),
  25.         h1('ERROR: Debe indicarnos nombre y apellidos'),
  26.         p("Nombre: [$par_nombre]"),
  27.         p("Apellidos: [$par_apellidos]"),
  28.         end_html,
  29.         ;
  30.     exit;
  31. }
  32.  
  33.  
  34. ## Nos conectamos a la base de datos
  35. my $dbh = DBI->connect('DBI:mysql:host=localhost;database=usuarios', 'root', 'xxx')
  36. or
  37. die 'connect failed: ' . DBI->errstr();
  38.  
  39.  
  40. ## Preparando para obtener la consulta de datos de la tabla clientes
  41. my $sth = $dbh->prepare('SELECT id,nombre,apellidos,ip  FROM user WHERE username = ? AND domain = ?')
  42. or
  43. die 'prepare failed: ' . $dbh->errstr();
  44.  
  45. $sth->execute($par_nombre, $par_apellidos)
  46. or
  47. die 'execute failed: ' . $sth->errstr();
  48.  
  49.  
  50. ## Presentación de los resultados
  51. print
  52.     header,
  53.     start_html('Resultados'),
  54.     h2('Conexi&oacute;n a MySQL con programa de Perl'),
  55.     ;
  56.  
  57.  
  58. ## Bucle por los resultados
  59. print start_pre;
  60. while (my ($id,  $nombre,  $apellidos,  $ip) = $sth->fetchrow()) {
  61.     print "$id : $nombre : $apellidos : $ip\n";
  62. }
  63. print end_pre;
  64.  
  65.  
  66. ## Fin de página
  67. print end_html;
  68.  
  69.  
  70. ## Fin de la consulta
  71. $sth->finish();
  72. $dbh->disconnect();
  73.  
  74. __END__

_________________
JF^D Perl programming


Nota 2010-12-09 15:12 @675

Perlero Nuevo
Registrado: 2010-10-28 17:52 @786
Mensajes: 5
Re: Cómo validar los datos de un formulario con CGI
Muy agradecido, explorer,

Solo modifiqué la contraseña y funcionó al 100%.

Buscaré la manera de documentarme y leer más para poder sacarle provecho a este lenguaje de programación.

Saludos.


Responder al tema  [ 8 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO