Newsgroup: it.comp.www.php
Titolo: Gestione timestamp

Ciao a tutti ho una pagina che riceve in ingresso dei parametri, tra i 
quali il timestamp
index.php?name=events&timestamp=2010-01-12%2012:36:58
primo dubbio:
il formato che passo ï¿œ corretto?? in caso contrario come dovrebbe essere??
nel mio DB ho il timestamp in questo formato:
2010-01-14 12:36:58
secondo dubbio:
come interrogo la mia query per confrontare i due timestamp?
if (!isset($_GET["timestamp"])) die();
$timestamp=$_GET["timestamp"];
$query="SELECT * FROM events WHERE timestamp >= " $timestamp;
mi aiutate a risolvere questi due problemi legati alla gestione dei 
timestamp?
Grazie mille

claudia ha scritto:

usa lo unix time cosï¿œ non ti perdi tra formati diversi o altro
fai in pratica una roba cosï¿œ
index.php?name=event&timestamp=17003721973
la query ora non posso provarla ma ad occhio credo possa andare bene, a 
patto di modificare il campo nel db per farlo risultare compatibile con 
lo unix timestamp (io di solito uso un integer), perï¿œ quella query cosï¿œ 
ï¿œ sensibile di sql injection quindi occhio a quello che stai scrivendo, 
almeno metti un controllo sul fatto che il parametro $timestamp lo 
associa a $_GET['timestamp'] solo se quest'ultimo ï¿œ totalmente numerico

 usa lo unix time cosï¿œ non ti perdi tra formati diversi o altro
Il problema ï¿œ che nel mio DB ho giï¿œ il formato timestamp e devo 
mantenere quello .... sai darmi qualche suggerimento per mantenere 
questa logica??
Grazie mille

claudia ha scritto:

in questo caso penso che al massimo puoi usare lo unix solo per passare 
il valore piï¿œ comodamente tra le pagine e poi all'interno dello script 
fai la conversione tra timestamp e formato umano con
$timestamp = date('Y-m-d H:i:s',$_GET['timestamp']);
per la query vale quanto di cui prima, diciamo che cosï¿œ tecnicamente il 
problema dell'sql injection non *dovrebbe* esserci perch+ se qualcuno 
scrive roba tu la converti, perï¿œ non conoscendo tutti i casi di sql 
injection io ti consiglierei comunque di controllare per bene tutti gli 
input e andare di prepared statement (sono pochi "comandi" in piï¿œ ma ti 
possono salvare)

 2010-01-14 12:36:58
In che senso? Nel DB ï¿œ memorizzato come stringa? Se no, con quale
datatype? E soprattutto, *quale* DB? MySQL?

 datatype? E soprattutto, *quale* DB? MySQL?
Db MySQL
Ho salvato il campo come timestamp e si aggiorna, ovviamente, ad ogni 
modifica al record
Io devo confrontare un valore passato alla mia pagina PHP nella mia 
query, per recuperare solo i record (ad esempio) maggiori del mio timestamp
Grazie infinite!!

 possono salvare)
Scusa ma non ho capito che soluzione dovrei adottare....
la pagina viene chiamata da un altra applicazione ... leggo il parametro 
che contiene un timestamp (o cmq qualche cosa nel formato data/ora) e 
devo fare un confronto con i record della mia tabella (che sono in 
formato timestamp, ho postato un esempio di quello che vedo nei record 
timestamp del mio DB)
Grazie per l'aiuto!

 query, per recuperare solo i record (ad esempio) maggiori del mio timestamp
Premetto che non conosco MySQL e cerco di avere a che farci il meno
possibile.
Teoricamente secondo lo standard SQL quello che dovresti fare lato DB ï¿œ
di fare il cast della tua variabile PHP (che ï¿œ una stringa) al datatype
definito nella tabella, quindi:
$query="SELECT * FROM events WHERE timestamp >= cast('$timestamp' as
timestamp)" ;
Perï¿œ vedo che per motivi a me sconosciuti in MySQL il cast a timestamp
non funziona:
mysql> select cast('2009-12-10 10:12:12' as timestamp);
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near 'timestamp)' at line 1
Puoi provare a fare un cast a datetime, sembra funzionare ma non so che
implicazioni abbia:
$query="SELECT * FROM events WHERE timestamp >= cast('$timestamp' as
datetime)" ;
BTW sembra funzionare anche un cast implicito:
$query="SELECT * FROM events WHERE timestamp >= '$timestamp' ;
Occhio che incollare brutalmente i parametri all'interno delle query
come se fossero costanti ï¿œ inefficiente e insicuro. Per un modo piï¿œ
intelligente di parametrizzare le query cerca con Google "mysql php
prepared statements".
Ciao
	Y.

 =
Ciao