Aggiungere un ora a un DATETIME del DB
Aggiungere un ora a un DATETIME del DB postato il 18/08/2011 22:14:00 nel forum programmazione, open source e hosting
Mesi e mesi di silenzio e poi due domande in due giorni... beh, spero che sarete così pazienti con me come ieri :-)
La domanda è quella dell'oggetto:
Ho un valore in database nella Tabella Personaggio. Chiamiamo "data" il nome del campo in questione.
Ora, vorrei eseguire un controllo IF su questa data e dire:
Se sono passati più di 30min dalla "data" (valore del DB) esegui qualcosa.
Avevo pensato a qualcosa tipo:
$MySql3 = "SELECT $data FROM Personaggio WHERE Nome = 'NomePG'";
mysql_query($MySql3);
if ( strtotime('NOW()') >= strtotime('$data+60*30') ) {
esegui...}
Ma non vole funzionare.
Che altri modi (magari che funzionano XD) esistono? Cosa posso provare?
Grazie a tutti :-)
Pagine → 1
18/08/2011 23:10:47
Dipende da cosa devi fare, la queryu deve essere eseguita solo per utente specifico alla volta o va eseguita per tutti gli utenti?
Perchè nel primo caso si può fare più o meno come hai fatto tu. Nel secondo caso invece è decisamente il caso di filtrare i dati con la query e non con PHP.
Nel mentre anlizziamo i tuoi errori:
$MySql3 = "SELECT $data FROM Personaggio WHERE Nome = 'NomePG'";
mysql_query($MySql3);
if ( strtotime('NOW()') >= strtotime('$data+60*30') ) {
esegui...
}
Il primo luogo mi sembra che tu non abbia esattamente afferrato il funzionamento delle query in PHP. Se il campo nel Db si chiama "data" perchè nella query hai scritto "$data"? mettendoci un dollaro davanti il valore del campo del db non verrà magicamente trasferito nella variabile "$data". XD
Al contrario, hai usato la doppie virgolette per la query, quindi PHP interpola le variabili nella stringa e la query risulta vuota nella parte della lista dei campi. XD
Parte due, la condizione dell'if. NOW() è una funzione di MySql, non puoi usarla come parametro di una funzione di PHP, quello che stai cercando è la funzione time() che ti restituisce il timestamp pronto per essere usato per l'operazione del maggiore o uguale. Poi, "$data" secondo la tua logica dovrebbe contenere una stringa con la data nel formato MySql (YYYY-MM-GG HH:mm:SS), se la sommi e/o moltiplichi con un numero....beh PHP è magnanimo e considera la stringa come se fosse uno 0, altri linguaggi avrebbero cercato di insultarti XD
Quindi...in definitiva il tuo codice corretto dovrebbe essere così:
$MySql3 = "SELECT data FROM Personaggio WHERE Nome = 'NomePG'";
$result=mysql_query($MySql3);
$rs=mysql_fetch_array($result);
if ((strtotime($rs['data'])+30*60)<time()) {
esegui...
}
19/08/2011 01:24:22 e modificato da dyrr il 19/08/2011 01:25:22
Mysql ha delle funzioni apposite per le date, perchè non usare el funzioni native visto che ci sono del tipo:
$MySql3 = "SELECT data FROM Personaggio WHERE Nome = '".NomePG."' AND DATE_ADD(data, INTERVAL 30 MINUTE) < NOW() LIMIT 0,1";
$result=mysql_query($MySql3);
if (mysql_num_rows($result) == 1) {
esegi...
}
non sod a dove recuperi il nome pg ma se non sei sicuro che abbia gia subito un'escape ti consiglierei di passarlo con un mysql_real_escape_string();
19/08/2011 02:12:03
Ecco il reference sulla documentazione di mysql riguardo i campi datetime, e le funzioni che è possibile utilizzare:
Datetime, date e timestamp:
http://dev.mysql.com/doc/refman/5.6/en/datetime.html ↗
Funzioni mysql:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html ↗
La funzione sopra citata è DATE_ADD(), ma ci sono molti altri modi per fare quello che dici :-)
19/08/2011 02:44:19
Grazie mille a tutti... un po' con le correzioni che mi avete fatto notare, un po' con la documentazione messa... funziona tutto.
Grazie mille! :-)
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Enlisted ↗
CRSED: F.O.A.D. ↗
Exclusive Villa GdR ↗
Wuthering Waves ↗