- Home
- Categorie
- Coding e Sistemistica
- Coding
- Articolo programmato in php
-
Articolo programmato in php
Salve a tutti,
ho un sito dove inserisco articoli sempre aggiornati, però spesso capita che non ci sono a casa in giorni importanti per l'inserimento, quindi avrei pensato di fare un articolo programmato che si attivi ad una certa data/ora.Ho pensato che quando inserisco l'articolo la data e l'ora viene scelta da me con i dovuti controlli, e viene salvata nella tabella dove è presente l'articolo, però non riesco a capire a livello di database come strutturarlo.
Quando eseguo la query, come faccio a far capire che determinato articolo lo devo stampare in una certa data/ora ?
il campo data è un campo varchar e memorizzo così : 23/03/13 14:36:50
Qualcuno mi aiuta ? grazie
-
Se è un campo varchar non ci fai nulla lato MySQL, devi farlo leggere al PHP, convertirlo in un'entità temporale e poi ragionare.
Rappresentare una data ed un ora in un varchar è sbagliato, non puoi consentire al MySQL di riconoscerle in quanto tali e quindi fargli fare i calcoli di confronto.
Considera di avere tre campi, data_inserimento, data_inizio_pubblicazione e data_fine_pubblicazione tutti e tre di tipo DATETIME.
La tua query di estrazione è:[php]
<?php
$adesso = date("Y-m-d H:i:s");
$sql = "SELECT * FROM articoli WHERE data_inizio_pubblicazione <= '$adesso' AND data_fine_pubblicazione >= '$adesso'";
?>
[/php]
-
@Francesco Di Caprio said:
Se è un campo varchar non ci fai nulla lato MySQL, devi farlo leggere al PHP, convertirlo in un'entità temporale e poi ragionare.
Rappresentare una data ed un ora in un varchar è sbagliato, non puoi consentire al MySQL di riconoscerle in quanto tali e quindi fargli fare i calcoli di confronto.
Considera di avere tre campi, data_inserimento, data_inizio_pubblicazione e data_fine_pubblicazione tutti e tre di tipo DATETIME.
La tua query di estrazione è:[php]
<?php
$adesso = date("Y-m-d H:i:s");
$sql = "SELECT * FROM articoli WHERE data_inizio_pubblicazione <= '$adesso' AND data_fine_pubblicazione >= '$adesso'";
?>
[/php]Scusami io nel db ho 500 articoli salvati con il campo data di tipo varchar cioe cosi : 23/03/13 13:45 volendo cambiare strategia come faccio?
P.s. se prendo l'articolo dalla query mysql e poi ci faccio il confronto in php? Cioe : se la data del db è uguale alla data di oggi allora esegui.....
-
Ma la data che hai tu è la data di immissione nel db di quell'articolo. Io ti sto parlando di un nuovo campo, data_inizio_pubblicazione. Visto che devi farlo nuovo, fallo bene, e cioè fallo di tipo DATETIME.
Se proprio non vuoi convertirlo, devi trasformare con il PHP la data e l'ora in un timestamp e poi confrontarla con il timestamp attuale.[php]
<?php
$sql = "SELECT * FROM articoli";
$query = mysql_query($sql);
$ts_adesso = time();
while ($articolo = mysql_fetch_object($query)) {
list($data, $orario) = explode(" ", $articolo->data_inizio_pubblicazione);
list($giorno, $mese, $anno) = explode("/", $data);
list($ora, $minuto) = explode(":", $orario);
$ts_articolo = mktime($ora, $minuto, 0, $mese, $giorno, $anno);
if ($ts_adesso >= $ts_articolo) {
// stampa l'articolo
}
}
?>
[/php]Rimane il fatto che un campo che contiene data ed ora contrassegnato come VARCHAR è una macchia che ti darà problemi con qualsiasi cosa tu voglia fare con quel campo.
Se vuoi trasformarlo in un DATETIME, i dati in esso contenuti devono avere questo formato: YYYY-MM-DD HH:MM:SS (ovviamente nel tuo caso i secondi saranno sempre 00).
-
Volendo cambiare il campo varchar che ho io nel db e farlo diventare datetime, come faccio ? non avrò problemi con le query dell'articolo che sn in formato varchar ?
-
@infosicurezza said:
Volendo cambiare il campo varchar che ho io nel db e farlo diventare datetime, come faccio ? non avrò problemi con le query dell'articolo che sn in formato varchar ?
Dipende da come sono fatte le query. In ogni caso ti vorrei far presente ancora una volta che il campo data_inizio_pubblicazione è un nuovo campo, non faccio riferimento al tuo campo pre-esistente.
-
A questo punto mi conviene aggiungere il campo nuovo come consigliato da te, e modificare leggermente le query aggiungendo un'altra condizione al where.
P.s. se metto il campo datetime posso salvare la data e l'ora che mi restituisce l'utente ??