Foros del Web » Programando para Internet » PHP »

donde falla el progress bar d esta funcion

Estas en el tema de donde falla el progress bar d esta funcion en el foro de PHP en Foros del Web. Buenas, consegui hacer un progress bar para la siguiente funcion, el problema esta q no lo carga uno a uno sino q cuando acaba de ...
  #1 (permalink)  
Antiguo 10/02/2005, 01:30
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
Pregunta donde falla el progress bar d esta funcion

Buenas,
consegui hacer un progress bar para la siguiente funcion, el problema esta q no lo carga uno a uno sino q cuando acaba de hacer la consulta muestra la progress bar entera
Alguien sabe donde esta mi error?

Código PHP:
<?
actualizame
();
function 
actualizame()
{
    
$sql="SELECT  * FROM tabla";
    
$res=mysql_query($sql);
    
$numeroRegistros=mysql_num_rows($res);
    if(
$numeroRegistros<=0)
    {
          echo 
"<div align='center'>";
          echo 
"<font face='verdana' size='-2'>No Hay Resultados</font>";
          echo 
"</div>";
    }
    else
    {
    echo 
"<div id='progress' style='position:relative;padding:0px;width:450px;height:60px;left:25px;'>";
        while(
$registro=mysql_fetch_array($res)){
            echo 
"<div style='float:left;margin:5px 0px 0px 1px;width:2px;height:12px;background:red;color:red;'> </div>";
            
flush();
            
ob_flush();
            
$campo1=$registro["campo1"];
            
$sql="INSERT INTO tabla(campos) 
                  VALUES ('"
.$campos."')";
            
$res1=mysql_query($sql);
            if(!
$res1){ 
                echo 
mysql_error(); 
            } 
        }
//fi while
        
echo "</div>";
        echo 
"<script>document.getElementById('progress').style.display = 'none'</script>";
    }
//fi if

}//fi function
Gracias de antemano
  #2 (permalink)  
Antiguo 10/02/2005, 01:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Puede que el fallo sea que para optimizar la circulacion por la internete, los datos se mandan en paquetes de cierta longitud. Puede que tu servidor web almacene toda la salida de PHP hasta que ocupe cierto tamaño, y en ese momento lo envia.

Puedes probar a usar la funcion flush() (www.php.net/flush) despues de cada elemento. Aunque tambien recuerda que el navegador web tiene que permitir mostrar elementos no concluidos. Por ejemplo, algun navegador no muestra el contenido de una tabla hasta que recibe el </table>.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/02/2005, 02:18
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
ya esta solucionado, me falta un sleep(); detras de flush(); supongo q no le daria tiempo de ir mostrando el progress mientras insertava los campos...
pero ahora me sale el siguiente error:
Fatal error: Maximum execution time of 30 seconds exceeded in ... on line 45
a que es debido?
  #4 (permalink)  
Antiguo 10/02/2005, 02:23
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 10 meses
Puntos: 10
la progress quedaria asi...

Código PHP:
<?
actualizame
();
function 
actualizame()
{
    
$sql="SELECT * FROM tabla";
    
$res=mysql_query($sql);
    
$numeroRegistros=mysql_num_rows($res);
    if(
$numeroRegistros<=0)
    {
        echo 
"<div align='center'>";
        echo 
"<font face='verdana' size='-2'>No hay resultados</font>";
        echo 
"</div>";
    }
    else
    {
    echo 
"<div id='progress' style='position:relative;padding:0px;width:450px;height:60px;left:25px;'>";
        while(
$registro=mysql_fetch_array($res)){
            echo 
"<div style='float:left;margin:5px 0px 0px 1px;width:2px;height:12px;background:red;color:red;'> </div>";
            
$campo=$registro["campo"];
            
$sql="INSERT INTO tabla(campo) 
                  VALUES ('"
.$campo."')";
            
flush();
            
sleep(1);
        }
//fi while
        
echo "</div>";
        echo 
"<script>document.getElementById('progress').style.display = 'none'</script>";
    }
//fi if
}//fi function
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.