Добавляем TIMESTAMP


При проектировании данной таблицы мы обсуждали варианты, когда мы используем отдельные поля для даты и времени, или же сохраняем в одном поле типа DATETIME или timestamp. Давайте теперь вернемся к этому обсуждению.

Далее мы избавимся от отдельных полей и объединим информацию о времени и дате в одном поле с типом TIMESTAMP. Мы изменим команду SELECT таким образом, чтобы данные о времени возвращались в привычном виде - этс избавляет нас от необходимости извлекать информацию о времени и дате и временной метки с помощью PHP.

Для того чтобы не потерять уже имеющуюся в нашем распоряжении информацию, мы воспользуемся небольшой уловкой. Обычно MySQL автоматически обрабатывает поля с типом TIMESTAMP, и игнорирует все попытки записать в эти поля данные. Добавим в нашу таблицу поле с типом TIMESTAMP, значения для этого поля MySQL будет создавать самостоятельно: все уже имеющиеся в базе данных записи теперь будут содержать в этом поле время и дату для того момента, когда в таблице было создано это новое поле. Только в том случае, когда в таблицу начнут добавляться новые записи, для них это иоле будет содержать корректные значения, Далее, мы хотим стереть уже имеющуюся Информацию о дате и времени. Добавим теперь еще одно (уже второе) иоле с типом TIMESTAMP, которое MySQL-сервер просто проигнорирует и за-полнит его нулями. С помощью небольшого PHP-скрипта мы теперь можем заполнить это второе TlMESTAMP-поле теми значениями, которые уже хранятся в отдельных полях для времени и даты. После этого достаточно просто уничтожить первое поле TIMESTAMP - во втором поле будет сохранена вся уже собранная информация о дате и времени, а при добавлении новых записей информация о времени и дате будет сохраняться автоматически (рис. 6,21).

В программе PHPMyAdmin вызовите таблицу log и с помощью вкладки Структура добавьте два новых поля ниже поля id: dummy и time_stamp. Эти два новых поля должны иметь тип TIMESTAMP, первое их них мы не используем и его позднее просто уничтожим (рис. 6.22).

Давайте еще раз посмотрим на содержание таблицы. Как мы видим, первое поле содержит точное время и дату, показывающие когда были внесены изменения в структуру базы данных, второе же поле содержит нулевые значения - и это мы должны сейчас исправить.

Для того чтобы сохранить данные в поле типа TIMESTAMP, время и дата должны быть представлены в виде ряда цифр, между которыми не существует никаких разделительных знаков. Для этого мы должны считать время й дату из таблицы, объединить их и затем удалить тире из даты и двоеточия из времени, Объединить два значения мы легко можем с помощью оператора конкатенации (.), а ненужные символы мы удалим с помощью функции str_replace(), с которой уже знакомились в главе 2. Напомним вам синтаксис этой функции на простом примере, давайте изменим слово «Небо» на слово «Небеса»: для этого нам понадобится следующий PHP-код, который также выводит полученный результат на экран:

<?
$test = "Небо";
$test = str_replace ("о", "еса", $ test);
echo $test;
?>

Если нам необходимо не заменить одни символы на другие, а просто стереть некоторые символы из строки, то просто не надо указывать второй параметр при вызове функции str_replace(). Следующий скрипт позволяет получить из «Котенок» слово «Кот»:

<?
$test - "Котенок";
$test = str_replace("енок","",$test);
echo $test;
?>

Используем эту функцию для наших целей и создадим небольшой скрипт, который сначала считывает время и дату, объединяет их в одной переменной и затем удаляет ненужные символы:

<?
include("http://localhost/inc/mysql.inc");
$query = "SELECT date, time FROM log";
$sql = mysql_query($query);
while ($dp = mysql_fetch_object ($sql) ) {
$date = $dp->date;
$time = $dp->time;
$stamp = $date.$time;
$stamp = str_replace("-","",$stamp);
$stamp = str_replace(":", "", $stamp);
}
mysql_close($dp);
?>

Для того, чтобы сохранить содержание переменной $stamp в новом поле time_stamp, мы используем команду update. Для того чтобы эта инструкция относилась к нужной записи, мы считываем значение поля id текущей записи и сохраняем полученное значение в переменной $id. Эта команда выглядит следующим образом:

UPDATE log SET time_stamp = $stamp WHERE id = $id

Добавим теперь к команде SELECT в нашем скрипте ту часть кода, которая опрашивает значение поля id и обновляет записи с помощью UPDATE. В результате мы получаем следующий скрипт:

<?
include("http://localhost/inc/mysql.inc");
$query = "SELECT id, date, time FROM log";
$sql = mysql_query($query);
while ($dp = mysql_fetch_object($sql) ) {
$date = $dp->date;
$time = $dp->time;
$id = $dp->id;
$stamp = $date.$time;
$stamp = str_replace("-","",$stamp);
$stamp = str_replace(":", "", $stamp);
$query = "UPDATE log SET time_stamp = $stamp WHERE id = $id";
$dummy = mysql_query($query);
}
mysql_close($dp);
?>

Помните о том, что после выполнения данного скрипта информация на экране не изменится, хотя скрипт был успешно выполнен. Вы можете убедиться с помощью программы PHPMyAdmin, что теперь поле time_stamp содержит корректные данные.

Поля dummy, date и time нам больше не нужны и их с помощью PHPMyAdmin можно уничтожить. После того, как будет уничтожено поле dummy, поле time_stamp становится первым и единственным полем типа TIMESTAMP, и сервер MySQL начнет автоматически сохранять в этом поле время и дату при создании новых записей.

Теперь мы должны внести необходимые изменения и в скрипт, который записывает данные о посетителях в таблицу - нам просто необходимо уничтожить те строки, которые явно записывали время и дату:

<?
include ("http://localhost/inc/mysql.inc");
$referer = $JSERVER ['HTTP_REFERER'];
$browser = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
$webpage = $_SERVER[’PHP_SELF'];
$query = "INSERT INTO log (referer, browser, ip, webpage) "
."VALUES "
." (' $referer', '$browser', '$ip' , ' $webpage')";
$dummy = mysql_query ($query);
mysql_close($dp);
?>

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика