Página 1 de 1

Validación de usuario

NotaPublicado: 2008-09-23 18:11 @799
por Gonzalojimenezroldan
: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.011 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-09-24 07:11 @341
por explorer
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.001 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.

NotaPublicado: 2008-09-24 11:06 @504
por Gonzalojimenezroldan
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.001 segundos, usando GeSHi 1.0.8.4



Cordial Saludo,

Gonzalo.

NotaPublicado: 2008-09-24 20:22 @890
por explorer
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.

NotaPublicado: 2008-09-25 04:57 @247
por explorer
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.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-09-25 17:26 @768
por Gonzalojimenezroldan
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.

NotaPublicado: 2008-09-25 17:49 @784
por explorer
Sí que puedes pasar parámetros: en el mismo URL, como si fuera una petición GET normal y corriente.

NotaPublicado: 2008-10-03 09:16 @427
por Gonzalojimenezroldan
Ok. Gracias, explorer.