php non prende l'orario del server? Eppure uso timestamp()

Malware

Utente Attivo
19 Lug 2012
112
0
0
Buona sera e buona estate a tutti voi:rolleyes:

Come sempre i titoli delle mie discussioni saltano agli occhi:hammer:

Allora, tento di spiegare nel miglior modo possibile.
Sto scrivendo un browsergame, e sono incappato in un problema che mai pensavo di avere.
In questo BG c'è un edificio, l'accademia.
All'interno dell'accademia posso inserire degli scienziati che mi diano un tot di punti ricerca l'ora, e fin qui tutto bello e perfetto.
Il problema arriva quando il solito giocatore furbo porta avanti l'orario del suo pc, ricarica la pagina, e i punti ricerca prendono il volo e salgono magicamente.
Direte voi: certo, devi usare l'orario del server. Embè, lo sto facendo :)
Sicuramente sbaglio io, ma dove?

Quando un giocatore inserisce dei scienziati, prendo il timestamp del momento, lo salvo nel db nel suo bel record.
Quando ricarica la pagina, prendo il timestamp attuale, faccio la differenza tra questo e quello precedente salvato nel db, e mi calcolo i punti ricerca da dare al giocatore.
Ecco il codice che mi aggiorna i punti ricerca:

PHP:
function update_research_points() {

$playerid=$_SESSION['playerid'][prefix_s]; //prefix_s è in base al numero del server di gioco

$query="SELECT SUM(cittadini_acca), puntiscienza, ora FROM ".prefix_tb."ricerche, ".prefix_tb."citta WHERE id = idproprietario AND id = $playerid";

$esegui=mysql_query($query) or die(mysql_error());

$risultato=mysql_fetch_row($esegui);

$scienziati=$risultato[0];
$puntiscienza=$risultato[1];
$ora=$risultato[2]; //precedente timestamp

$mktime=mktime(); //timestamp attuale
$secondi_trascorsi = $mktime - $ora; 		//secondi trascorsi dal momento in cui il giocatore visita game.php al momento precedente

if ($ora != 0 and $scienziati != 0 and $secondi_trascorsi > 19 ) { //l'ultima condizione perchè non aggiorno i punti ad ogni secondo, ovviamente:)
	
	$ore_trascorse = $secondi_trascorsi/3660;				//ore trascorse... " "
	
	$punti_nuovi = $scienziati * $ore_trascorse;			//punti da aggiungere al giocatore
	
	$query="UPDATE ".prefix_tb."ricerche SET ora = $mktime , puntiscienza=puntiscienza + $punti_nuovi WHERE id = ".$_SESSION["playerid"][prefix_s];
	mysql_query($query);

} 

}

Un grazie in anticipo:fonzie:


EDIT
Nel titolo ho scritto timestamp(), ma la funzione è mktime()
 

Malware

Utente Attivo
19 Lug 2012
112
0
0
Se potessi scavare una buca e nascondermi dentro, lo farei.
Ho sempre provato in locale, quindi modificando l'ora del pc anche quella del server si adattava:incazz2:

Scusate, ma a volte l'età fa questi scherzi.
Un grazie comunque:)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
per leggere la data devi usare
time()
PHP:
$mktime=time(); //timestamp attuale
mktime(ore,min,sec,mese,giorno,anno) dove ore, min ecc... numeri interi
serve per trasformare una data in formato "umano" in data timestamp
 

Malware

Utente Attivo
19 Lug 2012
112
0
0
ciao
per leggere la data devi usare
time()
PHP:
$mktime=time(); //timestamp attuale
mktime(ore,min,sec,mese,giorno,anno) dove ore, min ecc... numeri interi
serve per trasformare una data in formato "umano" in data timestamp

Ciao
Mmmm io con
PHP:
$mktime=mktime(); //timestamp attuale
mi raco il timestamp del momento...

Ora vado a vedere cosa fa questop time()

Grazie:)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
mktime() senza parametri ha la stessa funzione di time()
mi sono permesso di testare la velocita di entrambe le funzioni
time() è nettamente piu veloce

PHP:
<?php
    $data = date('Y-m-d H:i:s');
    $time_start = microtime(true);
    for ($i = 0; $i < 1000; $i++) {
    $time_attuale = time();
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "Script eseguito in " . substr($time, 0, 6) . " secondi -> time() " . time() . "<br/>";
    
    $data = date('Y-m-d H:i:s');
    $time_start = microtime(true);
    for ($i = 0; $i < 1000; $i++) {
    $time_attuale = mktime();
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;
    echo "Script eseguito in " . substr($time, 0, 6) . " secondi -> mktime() " . mktime();
    ?>
output
Codice:
Script eseguito in 0.0030 secondi -> time() 1374763809
Script eseguito in 0.0324 secondi -> mktime() 1374763809
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
C'è un metodo ancora più veloce : $_SERVER['REQUEST_TIME']
PHP:
$data = date('Y-m-d H:i:s');
$time_start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
    $time_attuale = $_SERVER['REQUEST_TIME'];
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Script eseguito in " . substr($time, 0, 6) . " secondi";
output
Codice:
Script eseguito in 0.0007 secondi
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] non prende la query PHP 0
A [PHP] Non prende variabile $provincia ma tutte le altre si PHP 6
L php mysql non salva solo id PHP 21
A php metodo post jquery non da mai errore jQuery 4
M Guestbook - non funziona dopo upgrade di PHP PHP 5
Valerio93 [PHP] non capisco come mai mi da la data NULL PHP 3
WebmasterFioriniAndrea [PHP] Problema che non mi fa vedere niente PHP 2
Leshabituelles Non riesco ad aggiornare PHP PHP 0
Max 1 [PHP] Script che funziona in locale e non online PHP 16
R [PHP] pagina inclusa che non viene visualizzata PHP 2
Punix [PHP] query non valida PHP 1
M [PHP] Visualizzare un array partendo dal numero 1 e non 0 PHP 5
gandalf1959 [PHP] Inserimento di più righe non funziona come mi aspetto... PHP 2
M [PHP] Query UPDATE che non mi aggiorna campi seconda tabella PHP 3
M [PHP] header (location..) non funzionante dopo login PHP 3
B [PHP] Valore variabile non riconosciuto PHP 1
M [PHP] Selezionare immagini directory non presenti in db PHP 11
P [PHP] $_GET non preleva variabile nell’URL PHP 4
R mojave php non interpretato PHP 11
M Non corretta lettura del file php.ini della sezione CLI PHP 3
P [PHP] Input Type="date" non va correttamente con Apple PHP 2
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
S [PHP] Selezionare i campi non in comune con le altre colonne della tabella PHP 4
Monital [PHP] Insert into non inserisce tutti i dati PHP 1
T interpretare uno script php non fatto da me... PHP 3
M PHP - Funzione non e scrive il risultato PHP 3
L [PHP] case then e campo non riconosciuto PHP 0
T [PHP] aiuto....Fatal error: Uncaught Error:non riesco a capire PHP 1
T [PHP] ...Parse error che non c'è... PHP 7
M [PHP] Non si connette PHP 7
W [PHP] Non esegue il parsing su un dato sito e negli altri si... PHP 0
A Php mail non invia due mail di seguito PHP 3
O PHP 5.6 non riesco ad abilitare TSL 1.2 PHP 1
L [PHP] Nuovo server, query non funzionano PHP 3
M [PHP] Escludere campi non valorizzati PHP 22
Tommy03 Perchè non si apre una pagina PHP PHP 4
F [PHP] if(isset($_POST['Invia'])) non mi riconosce le variabili PHP 3
D [PHP] Update non trasferisce condizione where PHP 1
V Creare tabella mysql con php non funziona PHP 1
V [PHP] Perché non funziona ? PHP 1
V [PHP] Variabile modificata in un if non mantiene quel valore PHP 5
alessandra86 [PHP] Elementi di un array non visualizzabili PHP 7
C [PHP] non trovo l'errore? PHP 3
M [css][php] codice php esterno non vede il css PHP 6
M [PHP] Non calcola l'ultimo record inserito PHP 13
M [PHP] Problema IF non riconosciuta PHP 2
webimage [PHP] Non inserimento in tabella PHP 19
D [PHP] in una determinata fascia oraria non visualzzare campo PHP 5
T PHP: aggiunta a query che non so fare... PHP 2
ICTSM [PHP] Collegamento a database non localhost PHP 3

Discussioni simili