Sab Jul 22, 2006 3:07 am
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
| Ayuda con Perl, CGI y MySQL |
|
|
TENGO EL SIGUIENTE CODIGO Y NECESITO CONECTARME A LA BASE DE DATOS PERO ME PRODUCE UN ERROR... NO SE QUE ESTA MAL...
| Código: |
#!/usr/bin/perl -d
use DBI;
use CGI;
$dbh=DBI->connect('DBI:mysql:host=208.232.83.166:database=SistemaEscolar',root,SD2);
$co=new CGI;
$cgicontrol=$co->param("control");
$cgipassword=$co->param("password");
$control.="";
$control.=$cgicontrol;
$control.="";
$password.="";
$password.=$cgipassword;
$password.="";
$sth=$dbh->prepare("select * from alumnos where control=$control and password=$password");
$sth->execute;
if(($control,$nombre,$password)=$sth->fetchrow())
{$bandera=1;
print $co->center($co->h1('Numero de Control:'));
print $control;
print $co->center($co->h1('Nombre:'));
print $nombre;
}
$sth->finish;
$dbh->disconnect;
print $co->header,
$co->start_html
(
title=>'Envio de datos al y desde el servidor utilizando CGI'
),
$co->center
(
$co->h1('Resultados de Log in')
),
$co->hr;
if(!$bandera)
{ print $co->center($co->h1('No se encontro ningun usuario con esos datos'));
}
$dbh->disconnect;
print $co->end_html; |
Y AL EJECUTARLO CON LA OPCION DE DEBBUGER ME DICE LO SIGUIENTE
| Código: |
doceguera@paxuco:~$ perl /usr/lib/cgi-bin/doceguera.cgi
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main:: (/usr/lib/cgi-bin/doceguera.cgi:4):
4: $dbh=DBI->connect('DBI:mysql:host=208.232.83.166;database=SistemaEscolar',root,SD2); |
QUE PUEDE SER YA INTENTE MUCHAS COSAS PERO PSS NO ME SALE.. ALGUIEN ME PODRIA AYUDAR MUCHAS GRACAIS!!!!!!! |
|
|
|

Sab Jul 22, 2006 9:13 am
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
Sab Jul 22, 2006 2:47 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
¿Por qué empieza el script con -d? ¿Eso no hace que entre directamente en modo debug?
Yo lo quitaría antes de nada...
Y después de ejecutarlo con debugger... yo no veo ningún error en pantalla... |
|
Sab Jul 22, 2006 2:59 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
Pon
después de las líneas 'use'. Verás los errores que hay en el programa...
De momento ya veo uno: No está definido por ningún sitio el objeto SD2. |
|
Sab Jul 22, 2006 4:40 pm
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
|
|
|
ok.. ya quite el -d y puse "use warnings"... en ninguna parte me mostro warnings y al ejecutarlo con perl -d xxxxxx me aparece solamente esto....
main: /usr/lib/cgi-bin/daniel.cgi:6):
6: $dbh=DBI->connect('DBI:mysql:host=208.232.83.166:database=SistemaEscolar','alumno','sd2'); |
|

Dom Jul 23, 2006 2:37 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
Vamos a ver.... si no sale warnings es que el código, 'aparentemente' está bien.
Y lo que haces al ejecutarlo con -d es entrar en modo debug. En ese modo, Perl se PARA en la primera instrucción esperando tus próximas órdenes, y eso es justo lo que nos muestras. Pero no se vé ningún error.
No entres en modo debug A NO SER que quieras ejecutar el programa paso a paso, con puntos de ruptura o ver el contenido de las variables.
Mirando el programa con más calma, veo que hay un error también en lo siguiente: pintas el resultado de la consulta a pantalla (mejor dicho, a la página web) ANTES de haber impreso el header y el inicio de la página html.
Prueba con esta versión:
| Código: |
#!/usr/bin/perl
use DBI;
use CGI ':standard';
use warnings;
$dbh=DBI->connect('DBI:mysql:host=208.232.83.166:database=SistemaEscolar','root','sd2');
$co=new CGI;
$cgicontrol=$co->param("control");
$cgipassword=$co->param("password");
$control.="";
$control.=$cgicontrol;
$control.="";
$password.="";
$password.=$cgipassword;
$password.="";
print $co->header,
$co->start_html
(
title=>'Envio de datos al y desde el servidor utilizando CGI'
),
$co->center
(
$co->h1('Resultados de Log in')
),
$co->hr;
$sth=$dbh->prepare("select * from alumnos where control=$control and password=$password");
$sth->execute;
if(($control,$nombre,$password)=$sth->fetchrow())
{
$bandera=1;
print $co->center($co->h1('Numero de Control:'));
print $control;
print $co->center($co->h1('Nombre:'));
print $nombre;
}
$sth->finish;
$dbh->disconnect;
if(!$bandera)
{ print $co->center($co->h1('No se encontro ningun usuario con esos datos'));
}
print $co->end_html; |
Y NO HACE FALTA QUE CHILLES
Actualización: Faltaba una 'd' en 'standard'. Cosas del spanglish
Actualización: Cambiado SD2 a 'sd2'
Ultima edición por explorer el Dom Jul 23, 2006 2:47 pm, editado 2 veces |
|

Dom Jul 23, 2006 12:10 pm
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
|
|
|
| ya cambie lo que me dijsite.. si entiendo ejecutarlo condebbuger de hecho asi lo hago para ver paso a paso y sigue marcando un error al tratar de conectarse al servidor estoy empezando a sospechar que no esta bien instalado el mysql en el servidor debian o que no estoy empleando la forma correcta para conectarme o necesito hacer algomas para una conexion exitosa...cambie el print como me dijiste pero aun nada gracias!!! |
|
Dom Jul 23, 2006 12:50 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
Yo creo que el servidor esta muerto, chequea que el ip sea el corecto.
Crea otro programa que solo lea la BD, asi te figas si se esta conectando, si no, porque lo esta haciendo. |
|
Dom Jul 23, 2006 1:07 pm
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
|
|
|
| no seeee, porque yo desde aki me conecto desde linea de comandos al servidor y acceso al mysql y modifico la base de datos y todo muy bien pero ps ya en el programa perl no quiere conectarse |
|
Dom Jul 23, 2006 1:24 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
1.- Si lo estás ejecutando como un CGI, añade
| Código: |
| use CGI::Carp qw(fatalsToBrowser); |
a la lista de módulos.
2.- Cambia la línea
| Código: |
| $dbh=DBI->connect('DBI:mysql:host=208.232.83.166:database=SistemaEscolar',root,'sd2'); |
por
| Código: |
$dbh=DBI->connect('DBI:mysql:database=SistemaEscolar;host=208.232.83.166','root','sd2')
or die $DBI::errstr; |
y pruebas, a ver qué error sale...
¿Seguro que funcionan los CGI?
Usa mi CGI mínimo para comprobarlo.
Actualización: Cambiado el orden del DSN.
Actualización: Cambiado root por 'root'.
Ultima edición por explorer el Dom Jul 23, 2006 2:15 pm, editado 1 vez |
|

Dom Jul 23, 2006 1:44 pm
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
|
|
|
| los cgi sii funcionan wey porque ese programa ya lo trate de hacer pero con archivos y si puedo jalar los datos de la forma de html y consultarlos con cgi en perl... la linea que me dijiste quepusiera al final la del "die" tambien la trate de poner y pss si me dice que no se puede conectar al server pero lo del "Carp qw(fatalsToBrowser);" no se donde ponerlo o que pex..l gracias |
|
Dom Jul 23, 2006 2:12 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
¿Has hecho el cambio del DSN...? Fíjate que he cambiado el orden de host y database y he cambiado un ':' por un ';', que es lo que dice el manual que hay que hacer...
Sobre lo del fatals... hay que ponerlo después de la línea use CGI....
Y acabo de hacer otro cambio más... lo del root también estaba mal... |
|
Dom Jul 23, 2006 2:24 pm
|
 |
john
Perlero Nuevo

|
Registrado: 22 Jul 2006
Mensajes: 6
|
|
|
|
|
| noprobe tu cgi proque si funcionan los que he hecho pero pss el pedo es en la conexion de mi programa a la base de datos del servidor |
|
Dom Jul 23, 2006 2:30 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
A ver, miro mi libro....
| Código: |
my $dbh = DBI->connect('DBI:mysql:host=208.232.83.166:database=SistemaEscolar', 'root', 'sd2',
{
RaiseError => 0,
PrintError => 1
}
) || die DBI->errstr;
|
Intentalo. |
|
Dom Jul 23, 2006 2:44 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
Bueno, pues si no puedes conectarte puede ser por:
1.- Ese no es el host
2.- El nombre de usuario y/o contraseña están mal
3.- Esa base de datos no existe
4.- Mysql no está escuchando en el puerto suyo (el 3306). Haz un netstat para averiguar si hay algún mysql escuchando en ese puerto. Si no lo está, es que tiene bloqueado el 'networking'.
¿Puedes publicar un programa que sí te funcione? |
|
Powered by phpBB © 2001, 2005 phpBB Group
|