Исходя из нашего небольшого обсуждения выше, кажется, что проще всего сделать ваше поле eventdate
типом данных INT.Таким образом, когда вы берете пользовательский ввод как строку (например, «15/03/2011»), вы можете запустить этот ввод через функцию PHP strtotime()
и получить из нее временную метку UNIX.
<?php
$eventts = strtotime($_POST["eventdate"]);
$q = "UPDATE eventsDB SET eventdate = ".$eventts." WHERE keyfield = whatever";
$r = mysql_query($q);
?>
Обратите внимание, что strtotime()
возвращает INT (или логическое значение FALSE), поэтому мы не настраиваем вас для атаки SQL-инъекцией выше.Чтобы запросить базу данных, вы можете сделать следующее:
<?php
$q = "SELECT *
FROM eventsDB
WHERE eventdate > UNIX_TIMESTAMP()
ORDER BY eventdate ASC
LIMIT 30";
$r = mysql_query($q);
?>
Чтобы ответить на ваш вопрос в комментариях к этому ответу:
if ( $_POST['eventdate'])
$eventdate = mysql_real_escape_string($_POST['eventdate']);
будет заменен на
if ( $_POST['eventdate'])
$eventdate = strtotime($_POST['eventdate']);
Обратите внимание, что для производственной системы я действительно не рекомендовал бы размещать код администратора на той же странице, что и код дисплея, и вам следует использовать функцию isset()
, чтобы проверить,была установлена переменная массива $_POST
(чтобы вы не вызывали всевозможные предупреждения или уведомления в журналах веб-сервера).
Чтобы отобразить дату, вы должны использовать функцию PHP date()
в частности:
$entry_display = date("d/m/Y", $eventdate);
Где $eventdate
- это отметка времени UNIX, которую вы извлекли из базы данных.