Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Validación de usuario Responder al tema
Nuevo tema


Página 1 de 1  [ 8 mensajes ] 
 
Nota 2008-09-23 18:11 @799

Perlero Nuevo
Registrado: 2008-09-17 11:49 @534
Mensajes: 14
Validación de usuario
:shock: Hola de nuevo... estoy probando un CGI asociado a un formulario que pasa el password para ser validado... pero me muestra el siguiente mensaje:

Código:
No se puede mostrar la página
Hay un problema con la página solicitada y no puede ser mostrada..
--------------------------------------------------------------------------------
HTTP 500 - Error interno del servidor


Realmente este CGI es la unión de dos, en uno solo, que ejecutándolos independientemente me funcionan, pero al fusionarlos, ya no.

Agradecería su ayuda... Gracias.

El código del CGI es el siguiente:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
use strict;
use DBI;
my $pruser = "GJR";
my $identif = " ";
my $nombre = " ";
my $dbuser = "maest_gonzalo";
my $dbpass = "gjr";
my $dbhost = "localhost";
my $dbname = "maest_ME3REGIS";
read(STDIN, my $buffer, $ENV{"CONTENT_LENGTH"});
my @pairs = split(/&/, $buffer);
foreach my $pair (@pairs)
{
    (my $name, my $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}
my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost",$dbuser,$dbpass)|| die('No se puede conectar a la base de datos...');
my $query = $dbh->prepare( "SELECT nombre,identif FROM ME3REG WHERE identif = '$pruser'" );
$query->execute();
$query->bind_columns(\$nombre, \$identif);
while( $query->fetch() ) {
     }
$query->finish();
if ( $FORM{"password"} eq $identif) {
    print
        header,
        start_html('CGI MINIMO'),
        h1('VALIDACION PASSWORD'),
        hr,
        p("El password es correcto"),
        hr;
    print end_html;
} else {
    print
        header,
        start_html('CGI MINIMO'),
        h1('VALIDACION PASSWORD'),
        hr,
        p("El password es Incorrecto"),
        hr;
    print end_html;
}
exit;


Nota 2008-09-24 07:11 @341
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Usando el módulo CGI, las líneas
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
read(STDIN, my $buffer, $ENV{"CONTENT_LENGTH"});
my @pairs = split(/&/, $buffer);
foreach my $pair (@pairs)
{
    (my $name, my $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}

te sobran. Con param() puedes obtener el valor de cada parámetro.

¿El mensaje de error no da más pistas? Quizás el CGI no tenga permisos de ejecución. Yo miraría los ficheros de actividad del servidor web.

_________________
JF^D Perl programming


Nota 2008-09-24 11:06 @504

Perlero Nuevo
Registrado: 2008-09-17 11:49 @534
Mensajes: 14
Excelente la OBSERVACIÓN... así como está este código funciona. Me está retornando un mensaje por pantalla con la validación... correcta o incorrecta, realmente lo que quiero es retornar a la página que hizo el llamado del CGI y "mediante un parámetro que me retorne el CGI llamar otra página" no sé si esto es posible o no en este momento, por favor ¿puedes guiarme acerca de qué es lo que debo de hacer?

Gracias por todo...

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
my $prus = " ";
my $pruser = " ";
my $identif = " ";
my @parametros = param();
foreach $prus ( @parametros ) {
        $pruser = (param( $prus ));
}
use strict;
use DBI;
my $dbuser = "maest_gonzalo";
my $dbpass = "gjr";
my $dbhost = "localhost";
my $dbname = "maest_ME3REGIS";
my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost",$dbuser,$dbpass)|| die('No se puede conectar a la base de datos...');
my $query = $dbh->prepare( "SELECT identif FROM ME3REG WHERE identif = '$pruser'" );
$query->execute();
$query->bind_columns(\$identif);
while( $query->fetch() ) {
     }
$query->finish();
if ( $pruser eq $identif) {
    print
        header,
        start_html('ME3'),
        h1('VALIDACION PASSWORD'),
        hr,
        p("El password es correcto"),
        hr;
    print end_html;
} else {
    print
        header,
        start_html('ME3'),
        h1('VALIDACION PASSWORD'),
        hr,
        p("El password es Incorrecto"),
        hr;
    print end_html;
}
exit;



Cordial Saludo,

Gonzalo.


Nota 2008-09-24 20:22 @890
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Puedes enviar varias cosas: en el <head>, colocar un <meta> con un 'refresh' para que, pasados unos segundos, vuelva a la página anterior.

Otra forma es la clásica: incorporar un enlace para que sea el usuario el que vuelva.

Si quieres algo más drástico, sería no mandar una página de error, sino un 'Location:' para que sea el propio servidor el que sirva la página anterior.

A mí la que más me gusta es que sea el propio CGI el que crea la página inicial del formulario, por lo que siempre puede decidir volver a presentarse en caso de que ocurra un fallo. E irse a otra página se todo ha ido bien.

_________________
JF^D Perl programming


Nota 2008-09-25 04:57 @247
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;

use DBI;
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);

my $prus       = " ";
my $pruser     = param('pruser') || '';
my $identif    = " ";
my @parametros = param();

my $dbuser = "maest_gonzalo";
my $dbpass = "gjr";
my $dbhost = "localhost";
my $dbname = "maest_ME3REGIS";

my $dbh   = DBI->connect("DBI:mysql:$dbname:$dbhost", $dbuser, $dbpass)
          or die 'No se puede conectar a la base de datos...';
my $query = $dbh->prepare("SELECT identif FROM ME3REG WHERE identif = '$pruser'");

$query->execute();
$query->bind_columns(\$identif);
$query->fetch();
$query->finish();

print
    header,
    start_html('ME3'),
    h1('VALIDACION PASSWORD'),
    hr
;

print p( $pruser eq $identif ? "El password es correcto"
       :                       "El password es incorrecto"
       );

print
    hr;
    end_html
;

_________________
JF^D Perl programming


Nota 2008-09-25 17:26 @768

Perlero Nuevo
Registrado: 2008-09-17 11:49 @534
Mensajes: 14
Hola gracias por las alternativas... Realmente tu recomendada es la más óptima por muchas cosas y por seguridad.

Me decidí por el 'Location:' ... tengo una serie de estándares y complicada la cosa.

Me queda una pregunta, con el Redirect(), ¿no puedo pasar algún parámetro a la página?

Cordial Saludo,

Nota: Serraré los otros hilos, para quede solo este en observación...


GJR.


Nota 2008-09-25 17:49 @784
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10272
Sí que puedes pasar parámetros: en el mismo URL, como si fuera una petición GET normal y corriente.

_________________
JF^D Perl programming


Nota 2008-10-03 09:16 @427

Perlero Nuevo
Registrado: 2008-09-17 11:49 @534
Mensajes: 14
Ok. Gracias, explorer.


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