[Perl] PROBLEMAS CGI-DBI

Jose Antonio Galicia jcgalici@cbbanorte.com.mx
Tue, 27 May 2003 18:14:29 -0500 (CDT)


On Mon, 26 May 2003, Juan Carlos Lopez wrote:


 Este... sigiero cambio en el código por claridad:

> for $i ( 0 .. $#{$table} ) {
>                 $num_total=($table->[$i][-1])+$num_total;
> }

	for $row ( @{$table} ) {
	  $num_total+=$row->[-1];
	}

 con cada iteración asiganas una referencia a $row y queda
menos obscuro lo que haces.

> ###+++++AQUI ES DONDE ESTA EL PROBLEMA######
>
> for $i ( 0 .. $#{$table} ) {
> 	print "<TR>";
> 	for $j ( 0 .. $#{$table->[$i]} ) {
>         	print "<TD>$table->[$i][$j]</TD>";
>     	}
> 	$promedio=(($table->[$i][-1])*100)/$num_total;
> 	$promediogral=$promediogral+$promedio;
> 	printf ("<TD align='CENTER'>%.2f %</TD>",$promedio);
> 	print "</TR>";
> }

	for $row (@{$table}) {
	  print "<TR>";
	  print join('',map{"<td>$_</td>"}@{$row}) . "\n";
	  $promedio=(($row->[-1])*100)/$num_total;
	  $promediogral+=$promedio;
	  printf ("<TD align='CENTER'>%.2f %</TD>",$promedio);
	  print "<TR>";
	}

> $sth->finish();

 Si estas leyendo toda la consulta en una sola operación
usando "fetchall_arrayref" deberias soltar la conexión de
inmediato. Si vas a mantenerla abierta hasta este punto
podrias hacer un fetch por cada registro y ahorrarte toda la
memoria y procesador para crear el contenido de "$table".

 Esto en cuando al código, no al problema. :(

 De este no veo el por qué, ya he leido las respuestas que
te dan y dices que no es un problema de "timeout" de apache.
Lo que no me queda claro es por qué dices que hace un
refresh. A ver, pongámoslo así:

	< solictas la forma
	> aparece la forma
	< llenas la forma y das submit (cámbialo por post)
	> inicia despliegue de la información....
	... algo pasa y solicita nuevamente la página
	> regresa una consulta incorrecta.

 ¿Es así?

 ¿Estas usando frames? Tal vez en uno de ellos tienes un
refresh. Has esto (expicación del post):

	$ telnet maquina 80
	GET /ruta/al.cgi?losparametros=valores&van=aqui HTTP/1.0

 Dos enteres más y ves el resultado. Para evitar escribir
todos los campos (perecen muchos) haslo en tu browser y
copia el URL ;)

 Saludos,
 Toño
---
nolo contendere:
	A legal term meaning: "I didn't do it, judge, and I'll never do
	it again."