Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Cómo recibir parámetros desde un cgi

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Vie Jul 25, 2008 12:43 pm
lisandro
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Jul 2008
Mensajes: 4
Cómo recibir parámetros desde un cgi Responder citando

¡ Hola a todos !

Tengo que hacer un script que responda al servidor de un banco; éste me envía variables pero no sé por qué método; yo las tengo que tomar y meterlas en una db y despues de horas y horas de probar no he logrado nada. Tengo un código básico que lo saqué de este foro e intento modificar; tengo cero conocimientos de Perl, así que espero una mano Rolling Eyes

Perl:
#!/usr/local/bin/perl

push(@INC,"/kunden/homepages/htdocs/miweb/cgi-bin/");
require("cgi-lib.pl");

use strict;
use DBI;

my $importe = $in{'importe'};
my $operacion = $in{'num_operacion'};

# Funcion conectar
sub db_connect{

my $db_user = "";
my $db_pass = "";
my $host_name = "";
my $db_name = "";



my $q_string = "DBI:mysql:host=$host_name;database=$db_name";


        return (DBI->connect ($q_string, $db_user, $db_pass,
                                                        {PrintError => 1, RaiseError => 1}))  ;

}
# Fin funcion conectar

my $dbh = db_connect();

    my $sth = $dbh->prepare('INSERT INTO tipos SET operacion=?,importe=?') or die("Couldn't prepare statement: " . $dbh->errstr);
   $sth->execute($operacion,$importe) or die("Couldn't execute statement: " . $sth->errstr);
   $sth->finish;

$dbh->disconnect;
 

 
print "content-type: text/html \n\n";
print "<html>\n";
print "<head>\n";
print "<TITLE>Respuesta correcta a la comunicación ON-LINE</TITLE> \n";
print q($*$OKY$*$);
print "</BODY>\n";
print "</HTML>\n";
Mensaje Vie Jul 25, 2008 12:59 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Bienvenido a los foros de Perl en Español.

El cgi-lib.pl ya no se debería de usar, en vez de eso te recomiendo que uses el módulo CGI.pm.

A continuación te pongo la versión modificada de tu script:

Perl:
#!/usr/local/bin/perl

use strict;
use DBI;
use CGI;

my $query = new CGI;
my %Input = $query->Vars;


my $dbh = db_connect();
my $sth = $dbh->prepare('INSERT INTO tipos SET operacion=?,importe=?') or die("Couldn't prepare statement: " . $dbh->errstr);
$sth->execute($Input{'num_operacion'},$Input{'importe'}) or die("Couldn't execute statement: " . $sth->errstr);
$sth->finish;
$dbh->disconnect;



print "content-type: text/html \n\n";
print "<html>\n";
print "<head>\n";
print "<TITLE>Respuesta correcta a la comunicación ON-LINE</TITLE> \n";
print q($*$OKY$*$);
print "</BODY>\n";
print "</HTML>\n";


# Funcion conectar
sub db_connect{

my $db_user = "";
my $db_pass = "";
my $host_name = "";
my $db_name = "";



my $q_string = "DBI:mysql:host=$host_name;database=$db_name";


        return (DBI->connect ($q_string, $db_user, $db_pass,
                                                        {PrintError => 1, RaiseError => 1}))  ;

}
# Fin funcion conectar
Mensaje Vie Jul 25, 2008 1:24 pm
lisandro
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Jul 2008
Mensajes: 4
Responder citando

Funciona perfectamente, te lo agradezco mucho de verdad, me salvaste las papas Wink

¿ Funciona tanto para POST como para GET ?

Gracias otra vez, saludos
Mensaje Vie Jul 25, 2008 2:09 pm
lisandro
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Jul 2008
Mensajes: 4
Responder citando

Perdón, tengo una duda más, espero no sea mucho para un día...

Perl:
my $id = 'usuario@gmail.com';

my $dbh = db_connect();
my $sth = $dbh->prepare('INSERT INTO fichas SET num_operacion=?  WHERE email=?') or die("Couldn't prepare statement: " . $dbh->errstr);
$sth->execute($Input{'Num_operacion'}, $id) or die("Couldn't execute statement: " . $sth->errstr);


Lo único que cambió fue la consulta SQL ya que ahora tiene un WHERE por lo tanto tengo que pasar dos parámetros. Se me complica porque solo recibo un error 500 en el servidor.

¿ Alguna idea ?
Mensaje Vie Jul 25, 2008 2:11 pm
lisandro
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Jul 2008
Mensajes: 4
Responder citando

Bueno, parece que me equivoqué feo en la consulta, ¿ no ? :ops:
Mensaje Vie Jul 25, 2008 3:06 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Sí, el problema está en la línea de SQL:
SQL:
INSERT INTO fichas SET num_operacion=? WHERE email=?


Me parece que lo que quieres hacer es un UPDATE:

SQL:
UPDATE fichas SET num_operacion=? WHERE email=?
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group