• Publicidad

Cómo validar los datos de un formulario con CGI

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Cómo validar los datos de un formulario con CGI

Notapor kernelito » 2010-12-02 19:29 @854

¡¡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):
Sintáxis: [ Descargar ] [ Ocultar ]
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>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Acá expongo el archivo.pl
Sintáxis: [ Descargar ] [ Ocultar ]
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";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Gracias.
kernelito
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-10-28 17:52 @786

Publicidad

Re: Cómo validar los datos de un formulario con CGI

Notapor explorer » 2010-12-02 19:55 @871

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo validar los datos de un formulario con CGI

Notapor kernelito » 2010-12-03 09:21 @431

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.
kernelito
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-10-28 17:52 @786

Re: Cómo validar los datos de un formulario con CGI

Notapor explorer » 2010-12-03 11:01 @501

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í:

Sintáxis: [ Descargar ] [ Ocultar ]
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();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo validar los datos de un formulario con CGI

Notapor kernelito » 2010-12-06 08:52 @411

Gracias explorer,

Probaré, luego aviso cómo me fue.

Saludos
kernelito
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-10-28 17:52 @786

Re: Cómo validar los datos de un formulario con CGI

Notapor kernelito » 2010-12-09 08:44 @405

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.

Sintáxis: [ Descargar ] [ Ocultar ]
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";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
kernelito
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-10-28 17:52 @786

Re: Cómo validar los datos de un formulario con CGI

Notapor explorer » 2010-12-09 14:29 @645

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:
Sintáxis: [ Descargar ] [ Ocultar ]
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__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo validar los datos de un formulario con CGI

Notapor kernelito » 2010-12-09 15:12 @675

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.
kernelito
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-10-28 17:52 @786


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados

cron