Ora posto il codice, così magari sapete dirmi dove sbaglio...
1) Questa è la funzione che calcola la differenza tra la fine della missione e il tempo corrente, in modo da dirti quanto manca alla fine.
Codice PHP:
function tempo_missione($id_giocatore)
{
$sql = "SELECT TIMEDIFF (fine, now()) FROM missioni WHERE id_giocatore = '$id_giocatore'";
$risultato = mysql_query($sql);
$row = mysql_fetch_row ($risultato);
return $row[0];
}
2) Questo script invece calcola i secondi totali che rimangono prima che la missione sia finita, in pratica trasforma in secondi la differenza calcolata con la funzione tempo_missione.
Codice PHP:
$sec = explode (":", tempo_missione($_SESSION['id']));
$secondi = ($sec[0] * 3600) + ($sec[1] * 60) + $sec[2];
3) Ora mediante uno script ajax provo ad aggiornare il contatore con la differenza, facendo in mondo che quando arrivi a 0 spunti una img, ed il titolo della pagina cambi.
Codice HTML:
<script type="text/javascript">
//<![CDATA[
var countertimer = null;
var Targetcounter = document.getElementById( 'counter' );
var Secondscounter = <?php echo"$secondi"; ?>;
var TargetTimecounter = new Date();
var TimeBeginncounter = TargetTimecounter.getTime();
var TimeEndcounter = TimeBeginncounter + ( Secondscounter * 1000 );
TargetTimecounter.setTime( TimeEndcounter );
var Daycounter = TargetTimecounter.getDate();
var Monthcounter = TargetTimecounter.getMonth() + 1;
var Yearcounter = TargetTimecounter.getYear();
if(Yearcounter < 999) Yearcounter += 1900;
var hcounter = TargetTimecounter.getHours();
var mcounter = TargetTimecounter.getMinutes();
var scounter = TargetTimecounter.getSeconds();
var fdaycounter = ( (Daycounter < 10) ? '0' : '' );
var fmonthcounter = ( (Monthcounter < 10) ? '.0' : '.' );
var fhcounter = ( (hcounter < 10) ? '0' : '' );
var fmcounter = ( (mcounter < 10) ? ':0' : ':' );
var fscounter = ( (scounter < 10) ? ':0' : ':' );
var EndDatecounter = fdaycounter + Daycounter + fmonthcounter + Monthcounter + '.' + Yearcounter;
var EndTimecounter = fhcounter + hcounter + fmcounter + mcounter + fscounter + scounter;
var finished = false;
function CountDowncounter()
{
var CurrentDatecounter = new Date();
var CurrentTimecounter = CurrentDatecounter.getTime()
var OpenTimecounter = Math.floor( (TargetTimecounter - CurrentTimecounter) / 1000 );
var scounter = OpenTimecounter % 60;
var mcounter = ( (OpenTimecounter - scounter) / 60 ) % 60;
var hcounter = ( (OpenTimecounter - scounter - mcounter * 60) / (60 * 60) );
var fhcounter = ( (hcounter < 10) ? '0' : '' );
var fmcounter = ( (mcounter < 10) ? ':0' : ':' );
var fscounter = ( (scounter < 10) ? ':0' : ':' );
var Timecounter = fhcounter + hcounter + fmcounter + mcounter + fscounter + scounter;
var OutputStringcounter = Timecounter;
if( OpenTimecounter <= 0 ) {
if( !finished ) {
var finishedcounter = document.createElement('div');
finishedcounter.id = 'finishedcounter';
finishedcounter.className = 'center';
finishedcounter.innerHTML = '<a href="finito.php"><img src="img/immagine.jpg" alt="" /><' + '/a>';
Targetcounter.parentNode.insertBefore(finishedcounter, Targetcounter);
finished = true;
}
window.clearTimeout( countertimer );
}
Targetcounter.innerHTML = ( !finished ) ? OutputStringcounter : '';
document.title = ( !finished ) ? OutputStringcounter : 'Finito!';
document.title += " - NomeGioco";
countertimer = window.setTimeout( "CountDowncounter()", 1000 );
}
//]]>
</script>
Da notare è che attraverso questa riga: var Secondscounter = <?php echo"$secondi"; ?>; passo allo script i secondi totali rimanenti al termine della missione.
Il problema è che questo script non mi stampa il countdown scrivendo questa riga:
Codice HTML:
<div align="center" id="counter"><script type="text/javascript">CountDowncounter();</script></div>
Sapete dirmi come mai ?
Grazie in anticipo,
Marco
P.S.: Se osservo il sorgente della pagina, la var Secondscounter contiene i secondi effettivi al termine della missione, almeno quello funziona :P