• Publicidad

Validación de usuario

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

Validación de usuario

Notapor Gonzalojimenezroldan » 2008-09-23 18:11 @799

: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: Seleccionar todo
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:

Sintáxis: [ Descargar ] [ Ocultar ]
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;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Gonzalojimenezroldan
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2008-09-17 11:49 @534

Publicidad

Notapor explorer » 2008-09-24 07:11 @341

Usando el módulo CGI, las líneas
Sintáxis: [ Descargar ] [ Ocultar ]
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;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

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 & 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

Notapor Gonzalojimenezroldan » 2008-09-24 11:06 @504

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...

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



Cordial Saludo,

Gonzalo.
Gonzalojimenezroldan
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2008-09-17 11:49 @534

Notapor explorer » 2008-09-24 20:22 @890

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 & 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

Notapor explorer » 2008-09-25 04:57 @247

Sintáxis: [ Descargar ] [ Ocultar ]
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
;
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

Notapor Gonzalojimenezroldan » 2008-09-25 17:26 @768

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.
Gonzalojimenezroldan
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2008-09-17 11:49 @534

Notapor explorer » 2008-09-25 17:49 @784

Sí que puedes pasar parámetros: en el mismo URL, como si fuera una petición GET normal y corriente.
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

Notapor Gonzalojimenezroldan » 2008-10-03 09:16 @427

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


Volver a Web

¿Quién está conectado?

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