Estoy haciendo un script en Perl usando CGI::Ajax que trata de lo siguiente:
Que al recibir en un campo de entrada una clave de "State" me devuelva en la misma página todas las ciudades que en mi tabla "Cities" pertenezcan a ese estado.
Por ejemplo en el estado = "CA" tengo tres ciudades (Los Angeles, San Diego y San Francisco), pero al ejecutar mi script solo me da "Los Angeles", es decir, siempre me da solo una ciudad aunque haya más en la tabla.
El script se ve muy sencillo, pero no le encuentro.
Aquí va el código:
Using perl Syntax Highlighting
use strict;
use CGI;
use CGI::Ajax;
use DBI;
my @doc = "";
my @ent = "";
my $i = 0;
my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'js_func' => \&perl_func );
print $pjx->build_html( $cgi, \&Show_HTML);
sub perl_func {
my $input = shift;
# Configurar el acceso a la DB
my $con = DBI->connect('DBI:mysql:database=blackman;host=localhost','root','root') or die('No me puedo conectar to DB');
print "<B>Ya abri la base de datos</B>";
print "<BR>";
my $sth = $con->prepare("SELECT city FROM cities where state = '$input' ");
$sth->execute() or die "Error al leer Ciudades...$!";
while (@doc = $sth->fetchrow_array)
{
$ent[$i] = $doc[0];
$i++;
}
return( @ent );
}
sub Show_HTML {
my $html = <<EOHTML;
<HTML>
<BODY>
Teclee el Estado:
<input type="text" name="val1" id="val1"
onkeyup="js_func( ['val1'], ['resultdiv'] )">
<br>
<div id="resultdiv"> </div>
</BODY>
</HTML>
EOHTML
return $html;
}
use CGI;
use CGI::Ajax;
use DBI;
my @doc = "";
my @ent = "";
my $i = 0;
my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'js_func' => \&perl_func );
print $pjx->build_html( $cgi, \&Show_HTML);
sub perl_func {
my $input = shift;
# Configurar el acceso a la DB
my $con = DBI->connect('DBI:mysql:database=blackman;host=localhost','root','root') or die('No me puedo conectar to DB');
print "<B>Ya abri la base de datos</B>";
print "<BR>";
my $sth = $con->prepare("SELECT city FROM cities where state = '$input' ");
$sth->execute() or die "Error al leer Ciudades...$!";
while (@doc = $sth->fetchrow_array)
{
$ent[$i] = $doc[0];
$i++;
}
return( @ent );
}
sub Show_HTML {
my $html = <<EOHTML;
<HTML>
<BODY>
Teclee el Estado:
<input type="text" name="val1" id="val1"
onkeyup="js_func( ['val1'], ['resultdiv'] )">
<br>
<div id="resultdiv"> </div>
</BODY>
</HTML>
EOHTML
return $html;
}
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4
Como pueden ver el resultado cae en la <div> de nombre "resultdiv" pero estoy seguro que me falta algo.
Gracias por la ayuda que me puedan dar.
Negrazo.