Visualizzazione risultati 1 fino 18 di 18

Discussione: Timer Countdown php e numeri con cifre grosse

  1. #1
    Guest

    Wink Timer Countdown php e numeri con cifre grosse

    Ciao ragazzi. Ho da chiedervi un'altro favore ^^"

    Ho modificato uno script esistente in questo modo:

    Codice PHP:
    <?php

    ignore_user_abort
    (true);
    set_time_limit(0);

    echo
    "<html><head><script type='text/javascript'>

    var sec = 30; // set the seconds
    var min = 02; // set the minutes

    function countDown() {
    sec--;
    if (sec == -01) {
    sec = 59;
    min = min - 1;
    } else {
    min = min;
    }
    if (sec<=9) { sec = '0' + sec; }
    time = (min<=9 ? '0' + min : min) + ':' + sec + ' sec ';
    if (document.getElementById) { theTime.innerHTML = time; }
    SD=window.setTimeout('countDown();', 1000);
    if (min == '00' && sec == '00') { sec = '00'; window.clearTimeout(SD); }
    }

    function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
    window.onload = func;
    } else {
    window.onload = function() {
    if (oldonload) {
    oldonload();
    }
    func();
    }
    }
    }

    addLoadEvent(function() {
    countDown();
    });

    </script>
    </head><body>

    <table width='100%'>
    <tr><td width='100%' align='center'><span id='theTime' class='timeClass'></span></td></tr>
    </table>
    </body>
    </html>"
    ;

    ?>
    Il problema è che anche se c'è la funzione ignore_user_abort() quando aggiorno la pagina o la cambio il timer si blocca... Come potrei farlo non bloccare?

    Un'altra domanda, siccome in uno sciprt dovrei inserire numeri con tanti zeri, e dato che non li posso modificare direttamente nel DB perchè sennò verrebbe un disastro, esiste una funzione che modifica i numeri da (per esempio) 20000 a 20.000?

    Grazie e buona serata!
    Ultima modifica di dreadnaut : 29-07-2009 alle ore 22.43.33 Motivo: + tag [php]

  2. #2
    Guest

    Predefinito

    Un'altra domanda, siccome in uno sciprt dovrei inserire numeri con tanti zeri, e dato che non li posso modificare direttamente nel DB perchè sennò verrebbe un disastro, esiste una funzione che modifica i numeri da (per esempio) 20000 a 20.000?
    Una funziona vera e propia no...ma potresti creare tu qualcosa modificando la funzione substr (che in poche parole conta i caratteri e potresti fare ogni 3 cifre, partendo dalla fine, aggiunge ".")

    CIao!

  3. #3
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Il problema è che anche se c'è la funzione ignore_user_abort() quando aggiorno la pagina o la cambio il timer si blocca... Come potrei farlo non bloccare?
    Su AlterVista quella funzione dovrebbe essere disabilitata, ma non è questo il motivo per cui lo script non agisce come vorresti: ricorda che JS è lato client, e PHP lato server.

    Una volta stabilito il timestamp in corrispondenza del quale chiudere il conto alla rovescia, dovresti controllare ad ogni apertura la differenza rispetto a quello attuale; di lì in poi, potendo assegnare un valore alle variabili sec e min, lo script non subirebbe variazioni.

    Un'altra domanda, siccome in uno sciprt dovrei inserire numeri con tanti zeri, e dato che non li posso modificare direttamente nel DB perchè sennò verrebbe un disastro, esiste una funzione che modifica i numeri da (per esempio) 20000 a 20.000?
    number_format().
    Ultima modifica di programmazioned : 29-07-2009 alle ore 23.30.02

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Su AlterVista quella funzione dovrebbe essere disabilitata, ma non è questo il motivo per cui lo script non agisce come vorresti: ricorda che JS è lato client, e PHP lato server.

    Una volta stabilito il timestamp in corrispondenza del quale chiudere il conto alla rovescia, dovresti controllare ad ogni apertura la differenza rispetto a quello attuale; di lì in poi, potendo assegnare un valore alle variabili sec e min, lo script non subirebbe variazioni.
    eh... un'esempietto?

  5. #5
    Guest

    Predefinito

    Bastava cliccare sul link di programmazioned

    Codice PHP:
    <?php

    $number
    = 1234.56;

    // english notation (default)
    $english_format_number = number_format($number);
    // 1,235

    // French notation
    $nombre_format_francais = number_format($number, 2, ',', ' ');
    // 1 234,56

    $number = 1234.5678;

    // english notation without thousands seperator
    $english_format_number = number_format($number, 2, '.', '');
    // 1234.57

    ?>

    CIao

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Il timestamp è il numero di secondi trascorsi dalla mezzanotte del 1 gennaio 1970.

    Sapendo che in JavaScript Date.getTime() restituisce il numero di millisecondi, puoi operare la conversione arrotondando (Math.round()) il valore diviso per 1000.

    Sottraendo il timestamp di chiusura al valore attuale, ottieni il numero di secondi che mancano alla fine, che devi suddividere in minuti e secondi. Considerando s questo valore:

    • i minuti (variabile min) sono dati dall'arrotondamento di s/60;
    • i secondi in eccesso(sec) corrispondono a (s/60-minuti)*60.


    Prova a stendere da solo quale riga di codice, se non funziona cercheremo insieme di capirne il motivo.

    Ciao!
    Ultima modifica di programmazioned : 30-07-2009 alle ore 17.15.18

  7. #7
    Guest

    Predefinito

    @zomer si ma intendevo del timer

    @programmazioned

    ok ieri ho ragionato un po e qusta mattina mi sono messo a fare lo script (anche se qualcosa non quadra.

    Lo script funziona in questo modo: se non c'è nessuna variabile in get lo script funziona in modalità utente; in caso contrario (if $go == 1) parte in modalità admin.
    Lo script si basa sul'inserimento nell sql del timestamp di quando il contdown finirà di contare. Dopo di chè, sottrae l'end Timestamp al timestamp corrente e rileva il numero di secondi. Poi calcola i minuti facendo secondi diviso 60.
    Questa è una delle parti in cui mi sono bloccato. Pechè se i secondi rimanenti fossero 120 allora 120/60 si potrebbe fare. Ma se fosse 126 verrebbero numeri decimali. Ho messo una domanda su Y Answer e la risposta di uno mi è piaciuta particolarmente (l'ultima inserita). E' giusta? scommetto che ci sono errori nello script.

    timer.php

    Codice PHP:
    <?php

    include('config.php');

    @
    $go = htmlentities($_GET['go']);

    //Prelevo il time
    $time = time();

    if(!isset(
    $go)) {

    //Operazione: timestamp di adesso + tempo del contdown ($timer, impostato nel DB) = timestamp di quando sarà terminato il contdown
    $totstamp = $timer+$time;

    //Ricavo dai secondi ottenuti il numero di minuti e secondi
    $minuti = $totstamp/60;
    $secondi = $totstamp % 60;

    if(
    $time >= $endtimer) {

    echo
    "Evento passato!!";

    }else{

    echo
    "Mancano ancora $minuti e $secondi secondi!";

    }}

    elseif (
    $go == "1")
    {
    //inserisco nel DB il timestamp di quando sarà finito il contdown
    $query="UPDATE recupero SET timestamp = $endtimer WHERE id = 1 LIMIT 1;";
    $risultato=mysql_query($query);

    echo
    "Timestamp inserito con successo.<br>Timer riavviato.";
    }


    ?>
    config.php

    Codice PHP:

    <?php
    // Session start

    @session_start();

    // DB Connect ()

    mysql_connect("127.0.0.1","","") or die("Non riesco a connettermi al DB");
    mysql_select_db("recupero");

    $query="SELECT * FROM `recupero` LIMIT 1";
    $risultato=mysql_query($query);

    while(@
    $row=mysql_fetch_array($risultato))


    $timer = $row['time'];
    $timestamp = $row['timestamp'];

    ?>
    DB Querly:

    Codice:
    CREATE TABLE IF NOT EXISTS `recupero` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `timestamp` text NOT NULL,
      `time` varchar(50) NOT NULL DEFAULT '600',
      KEY `id` (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
    
    INSERT INTO `recupero` (`id`, `timestamp`, `time`) VALUES
    (1, '1249028707', '600');
    Ultima modifica di djpix95 : 31-07-2009 alle ore 10.50.20 Motivo: Ritocchi di capodanno lol

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Omg Yahoo Answers

    Non ho visto lo script, ma la formula è quella che ti ho scritto nel post precedente.

    Nel caso dei 126 secondi, t = 126/60 = 2.1.

    A questo punto la parte intera (2) corrisponde ai minuti, e quella decimale (0.1) moltiplicata per 60 da i secondi in eccesso (6).

    Per trovare i minuti m basta quindi arrotondare 2.1, mentre i secondi sono s = (2.1 t - 2 m)*60.

    Ciao!
    Ultima modifica di programmazioned : 31-07-2009 alle ore 12.28.29

  9. #9
    Guest

    Predefinito

    ok, capito tutto tranne una cosa: Come faccio ad approssimare i minuti? c'è una funzione che me lo permette?

  10. #10
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Per JS ti avevo già indicato Math.round(), in php c'è round().
    Ciao!

  11. #11
    Guest

    Predefinito

    ok, ho sviluppato il codice in questo modo. Però non funziona:

    ($timer = Sencodi del timer)

    Codice PHP:
    $preminuti = $timer/60;
    $minuti = round($preminuti);
    $presecondi = $preminuti-$minuti;
    $secondi = $presecondi*60;

  12. #12
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Cosa non funziona?
    Quelle tre righe fanno quanto devono, ergo l'errore è da qualche altra parte.
    Controlla lo script ( quello sopra è disastrato: ci sono variabili non dichiarate, o in posti sbagliati :S ) e postalo per intero, aggiornato.
    Ciao!
    Ultima modifica di programmazioned : 31-07-2009 alle ore 16.21.14

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    beh, come minimo c'e' un errore di logica, visto che round() arrotonda se necessario anche per difetto, e lui sta non sta "approssimando i minuti", ma a quanto pare cerca di prendere il resto della divisione e dovrebbe quindi usare floor().

  14. #14
    Guest

    Predefinito

    Mi potete ricontrollare il codice? ho trovato alcuni errori e li ho corretti, ma ce ne seono altri di sicuro per dopo aver impostato 100000000000000 in timestamp nel DB mi dice una cosa tipo 1.6666664584911E+14 e 58.125 secondi.

    Codice PHP:
    <?php

    include('config/config.php');

    @
    $go = htmlentities($_GET['go']);

    //Prelevo il time
    $time = time();

    if(isset(
    $go)) {

    //Operazione: timestamp di adesso + tempo del contdown ($timer, impostato nel DB) = timestamp di quando sarà terminato il contdown
    $totstamp = $timer+$time;

    //Operazione: Secondi
    $secondistamp = $timestampdb-$time;

    //Ricavo dai secondi ottenuti il numero di minuti e secondi
    $preminuti = $secondistamp/60;
    $minuti = floor($preminuti);
    $presecondi = $preminuti-$minuti;
    $secondi = $presecondi*60;

    if(
    $time > $secondistamp) {

    echo
    "Evento passato!!<br>
    "
    ;

    }else{

    echo
    "Mancano ancora $minuti e $secondi secondi!<br> $time
    <br>
    $secondistamp";

    }}

    elseif (
    $go == "1")
    {
    $totstamp = $timer+$time;

    //inserisco nel DB il timestamp di quando sarà finito il contdown
    $query2="UPDATE recupero SET timestamp = $totstamp WHERE id = 1 LIMIT 1;";
    $risultato=mysql_query($query2);

    echo
    "Timestamp inserito con successo.<br>Timer riavviato.";
    }


    ?>
    PS ho provato a mettere floor
    Ultima modifica di djpix95 : 31-07-2009 alle ore 17.16.46 Motivo: ps

  15. #15
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    ma stai cercando di contare 190 milioni di anni in secondi?

    Fra parentesi, accorcia quella firma: il limite su questo forum e' 80 pixel di altezza.

  16. #16
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Ti ho riordinato lo script, sistemando qualcosina:

    Codice PHP:
    <?php

    // timer.php

    include('config/config.php');

    if(!
    $q = mysql_query('SELECT time,timestamp FROM recupero'))
    exit(
    'Inserire il timestamp di chiusura prima!');

    $r = mysql_fetch_assoc($q);

    $time = time();

    if(!isset(
    $_GET['go']) && mysql_query('UPDATE recupero SET timestamp = '.($time+$r['time'])))
    exit (
    'Timestamp inserito con successo.<br />Timer riavviato.');

    $pmin = ($r['timestamp']-$time)/60;
    $min = floor($pmin);
    $sec = round(($pmin-$min)*60);

    echo (
    $time > $r['timestamp'])? 'Evento passato!':'Mancano ancora '.$min.' minuti e '.$sec.' secondi!';

    ?>
    Codice PHP:
    <?php

    //config.php

    mysql_connect('localhost','root','') or die('Non riesco a connettermi al DB');
    mysql_select_db('recupero');

    ?>
    Ciao!
    Ultima modifica di programmazioned : 31-07-2009 alle ore 18.43.22

  17. #17
    Guest

    Predefinito

    SIIIIIIIII!!!!! EVVAY!!!!! Sei mitico programmazioned!!! Grazie ai tuoi consigli oltre a sviluppare un scipt magnifico che in rete non si trova, ho pure capito come calcolare il tempo. Non so come ringraziarti! Non ti dimenticherò mai!

    Rispetto +7

    E' stato un piacere!
    Ultima modifica di djpix95 : 01-08-2009 alle ore 19.56.01

  18. #18
    Guest

    Predefinito

    Ciao, dovrei mettere lo script del contdown in un'immagine. Tutto ok, ma l'immagine ci mette tanto a caricare, e non è un problema del mio pc perchè anche su quello di un mio amico ci mette tanto.

    Questo lo script:

    Codice PHP:
    <?php

    require('config/config.php');

    include(
    'timer.php');

    putenv('GDFONTPATH=' . realpath('.'));

    $font = "arial";
    $ima = imagecreatefromjpeg("img/logo_reg.jpg");
    $textcol = imagecolorallocate($ima,0,0,0);
    list(
    $larg, $altez, $uno, $due) = getimagesize("img/logo_reg.jpg");
    imagettftext($ima,12,0,$larg-267,$altez-77,$textcol,$font, "100%");
    imagettftext($ima,12,0,$larg-185,$altez-77,$textcol,$font, "100/100");
    imagettftext($ima,12,0,$larg-95,$altez-77,$textcol,$font, $cariera);
    imagettftext($ima,14,0,$larg-152,$altez-38,$textcol,$font, $timer);
    imagepng($ima,"img/14729sas01d.jpg");
    echo
    "<img alt='' src='img/14729sas01d.jpg' style='border: 0px solid ;' usemap='#map'>";
    imagedestroy($ima); echo "<map name='map'>";
    ?>
    Ho racchiuso nella variabile $timer il valore dello scipt del timer sopra (minuti:secondi).
    Non capisco perchè...

    PS: Appena dici problema risolto, eccolo che arriva!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •