entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

eliminar una linea en php

bueno a ver la ultima pregunta relacionada con este codigo, lo tengo ya completo pero para que quede mas bonito quiero que solo se muestre una linea a la vez, es decir, no quiero que ponga:
wait 60
wait 59
wait 58
sino que se la ultima linea se vaya sustituyendo por el nuevo valor y que solo aparezca este ultimo,no se si esto se puede hacer ya que he oido que el php es un codigo que solo se ejecuta del lado del servidor pero por si acaso lo pregunto, el codigo en cuestion es este

<?php
$form=$_POST['form'];
if($form=1){
define('DB_SERVER','xxx');

define('DB_NAME','xxx');

define('DB_USER','xxx');

define('DB_PASS','xxx');

$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
$tiempoactual= time();

function tiempo($tiempo) {

$sql = "INSERT INTO tiempo(tiempo)"." VALUES ('$tiempo')";
    $rec = mysql_query($sql);

}

tiempo($tiempoactual);
$a1=mysql_query("SELECT*FROM tiempo WHERE numero='1'");
$a2=mysql_num_rows($a1);
$consulta=mysql_query("SELECT*FROM tiempo");
$a3=mysql_data_seek($consulta,$a2-1);
$consulta2=mysql_fetch_array($consulta);
$consulta3=$consulta2["tiempo"];
$resta=$tiempoactual-$consulta3;
$var=0;
$espera=60;
while($resta<=$espera){
        echo "wait";
        $espera2=$espera-$resta;
        echo $espera2;
        echo "<br>";
        $seconds=1;
        $retraso=sleep ( $seconds );
        $tiempoactual=time();
        $resta=$tiempoactual-$consulta3;
    if (ob_get_contents())
        {
            ob_end_flush();
        }

        flush();

if($espera2<=0){echo "tiempo completado";}  
}
}else{
    echo "error";
}
?>

1 Respuesta

2votos

dairon Puntos17140

Bueno como bien dices php es un lenguaje del lado servidor lo que si puedes hacer es una llamada tipo Ajax que invoque tu función tiempo y aplicando JavaScript y css puedes poner hasta un progress que se valla llenando mientras se ejecuta el código.

0voto

oscar rodriguez comentado

joder he leido un poco de las llamadas tipo ajax y excede a mis conocimientos actuales, bueno habra que ponerse a estudiar, muchas gracias

0voto

dairon comentado

@white hace tiempo me ayudó con un código para subir imágenes con ajax y php y este hiba mostrando en % por cuanto hiba el archivo.

0voto

white comentado

para mi la mejor opción es la que menciona @dairon pero si deseas tambien puedes imprimir javascript.

echo '<div id="conteo">10</div>';

while ( condicion )
{
    echo '<script>
            document.getElementById('conteo').innerHTML = ' . $restante . ';</script>';
}

lo que hace es actualizar el elemento con id conteo con javascript.

0voto

oscar rodriguez comentado

vale, lo que no entiendo de tu mensaje es la variable $restante ya que si utilizas el echo de esa manera seria una variable de javascript y yo la variable del tiempo restante la tengo en php no?

0voto

dairon comentado

claro @oscar rodriguez, lo que dice @white es para actualizar el contenido de la etiqueta en html con el id #conteo pasandole solamente el valor de la variable restante del php lo cual te imprimiría estáticamente el valor en incremento dentro del div con id='conteo' haciendo exactamente lo que quieres. y utilizando bootstrap puedes ponerle progressbar para ir llenando con el mismo método que mostró white solo tendrías que hacer unos pequeños ajustes.
Saludos

0voto

oscar rodriguez comentado

vale ahora lo entiendo lo que me habia confundido es que yo uso comillas dobles para el echo en vez de simples, pero lo he implementado a mi codigo y no me funciona,simplemente pone 60 y no se actualiza, mirar el codigo quedaria asi

<?php
$form=$_POST['form'];
if($form=1){
define('DB_SERVER','xxx');

define('DB_NAME','xxx');

define('DB_USER','xxx');

define('DB_PASS','xxx');

$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
$tiempoactual= time();

function tiempo($tiempo) {

$sql = "INSERT INTO tiempo(tiempo)"." VALUES ('$tiempo')";
    $rec = mysql_query($sql);

}

tiempo($tiempoactual);
$a1=mysql_query("SELECT*FROM tiempo WHERE numero='1'");
$a2=mysql_num_rows($a1);
$consulta=mysql_query("SELECT*FROM tiempo");
$a3=mysql_data_seek($consulta,$a2-1);
$consulta2=mysql_fetch_array($consulta);
$consulta3=$consulta2["tiempo"];
$resta=$tiempoactual-$consulta3;
$var=0;
$espera=60;
echo '<div id="conteo">10</div>';
$restante= $espera-$resta;
while ( $restante>0 )
{
    echo '<script>
            document.getElementById(\'conteo\').innerHTML = ' . $restante . ';</script>';
}

    if (ob_get_contents())
        {
            ob_end_flush();
        }

        flush();

if($restante<=0){echo "tiempo completado";} 

}else{
    echo "error";
}
?>

0voto

white comentado

Hola @osccar rodriguez, talvez no actualiza por que en el while no hay un incremento o decremento de la variable $restante, el while nunca terminaría tal y como lo veo.

intenta actualizando $restante:

while ( $restante>0 )
{
    $restante = $espera-$resta;
    ...

0voto

oscar rodriguez comentado

igualmente no funciona se queda el valor 60 estatico y la pagina no acaba de cargar nunca, me refiero al circulo ese que da vueltas, mi while es este

while ( $restante>0 )
{
    $tiempoactual=time();
            $resta=$tiempoactual-$consulta3;
            $restante= $espera-$resta;
    echo '<script>
            document.getElementById(\'conteo\').innerHTML = ' . $restante . ';</script>';}

0voto

white comentado

Estas seguro que la variable $restante está restando su valor en el bucle?

intenta así:

http://paste.ofcode.org/8kby8ma7TzxxmC3Vg2mZxj

0voto

oscar rodriguez comentado

joder va perfecto xd, y por que no me funcionaba a mi?

0voto

white comentado

Tengo en mente 3 posibilidades

  • La variable $restante no restaba su valor, haciendo del bucle interminable
  • no forzabas la salida del buffer, debías usar flush dentro del bucle.
  • en ocasiones es problema del navegador, se corrige agregando el codigo <html>...</html>

slaudos!

0voto

oscar rodriguez comentado

ok, muchas gracias

0voto

oscar rodriguez comentado

hay algun problema en implementar ese codigo a una pagina html ya que lo he copiado y pegado tal cual y me sale un error en la linea de echo '<script> document.getElementById(\'conteo\').innerHTML = ' . $restante . ';</script>'; me pone que es un error de sintaxis pero no me sale nada mas

0voto

dairon comentado

la parte de conteo se queda en el aire sin ser variable ni nada por eso te debe dar error

0voto

oscar rodriguez comentado

como que se queda en el aire sin ser variable? como lo soluciono?

0voto

dairon comentado

no disculpa me equivoque pero copie el código y lo monté un ejemplito sencillo y me funcionó.

<?php
    $restante = 'kuko';
    echo '<div id="conteo"></div>';
    echo '<script> document.getElementById(\'conteo\').innerHTML = "' . $restante . '";</script>';
?>

0voto

oscar rodriguez comentado

si , si el codigo funciona solo pero al añadirlo al html y ponerle que si no se cumple la condicion salga un boton y si se cumple salga el contador no funciona, y no funciona porque sale que tiene un error de sintaxis en esa linea

0voto

dairon comentado

era unas comillas este ejemplo ultimo si funciona

0voto

oscar rodriguez comentado

perdon por tardar tanto en responder pero he estado liado, el ejemplo en cuestion sigue sin funcionar, te paso el codigo completo a ver si me puedes ayudar

<?php

$form1=$_POST['form'];
if($form1=1){
define('DB_SERVER','mysql12.000webhost.com');

define('DB_NAME','a8741833_1');

define('DB_USER','a8741833_admin');

define('DB_PASS','04061997ab');

$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
$tiempoactual= time();

    function tiempo($tiempo) {

    $sql = "INSERT INTO tiempo(tiempo)"." VALUES ('$tiempo')";
        $rec = mysql_query($sql);

    }

    tiempo($tiempoactual);
    $a1=mysql_query("SELECT*FROM tiempo WHERE numero='1'");
    $a2=mysql_num_rows($a1);
    $consulta=mysql_query("SELECT*FROM tiempo");
    $a3=mysql_data_seek($consulta,$a2-1);
    $consulta2=mysql_fetch_array($consulta);
    $consulta3=$consulta2["tiempo"];
    $resta=$tiempoactual-$consulta3;
    $var=0;
    $espera=300;
    $restante = $espera-$resta;

    echo '<!DOCTYPE html>
        <html>
        <head></head>
        <body>
        <div id="conteo">' . $restante . '</div>';

    while ( $restante >= 0 )
    {
        echo '<script> document.getElementById(\'conteo\').innerHTML = "' . $restante . '";</script>';

        if( $restante == 0 )
        {
            echo '<script>
                    document.getElementById(\'conteo\').innerHTML = "completado";</script>';
        }

        if (ob_get_contents())
        {
            ob_end_flush();
        }

        flush();

        $restante -= 1;

        sleep(1);
    }

    echo '</body>
        </html>';

}
else
    echo "

<form method=\"POST\" action=\"http://www.allfreebitcoins.tk/INDEX.html\">
<input type=\"hidden\" name=\"s\" value=\"200\">
<input type=\"hidden\" name=\"form1\" value=\"1\">
<input class=\"btn btn-success\" type=\"submit\" value=\"Ready to visit\">
</form>"
?>

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta