Página 1 de 1

Cómo recibir parámetros desde un cgi

NotaPublicado: 2008-07-25 13:43 @613
por lisandro
¡ 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 :roll:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-07-25 13:59 @624
por kidd
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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-07-25 14:24 @642
por lisandro
Funciona perfectamente, te lo agradezco mucho de verdad, me salvaste las papas ;)

¿ Funciona tanto para POST como para GET ?

Gracias otra vez, saludos

NotaPublicado: 2008-07-25 15:09 @672
por lisandro
Perdón, tengo una duda más, espero no sea mucho para un día...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $id = '[email protected]';

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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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 ?

NotaPublicado: 2008-07-25 15:11 @674
por lisandro
Bueno, parece que me equivoqué feo en la consulta, ¿ no ? :ops:

NotaPublicado: 2008-07-25 16:06 @712
por kidd
Sí, el problema está en la línea de SQL:
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
INSERT INTO fichas SET num_operacion=? WHERE email=?
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Me parece que lo que quieres hacer es un UPDATE:

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
UPDATE fichas SET num_operacion=? WHERE email=?
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4