Счетчик кликов по ссылкам.

asics

Новичок
Счетчик кликов по ссылкам.

На сайте непрямые ссылки, которые перекидывают посетителя сначала на goto.php, а оттуда через
PHP:
Header("location: ".$url);
на соответствующий урл.

Пишу счетчик кликов по этим ссылкам, статистику буду выводить в таком виде:
--------------------------------------------------------------------------------
|сcылка|переходы за сутки|за неделю|за месяц|за всё время|
--------------------------------------------------------------------------------
|сcылка1|число |число |число |число |
|сcылка2|число |число |число |число |
|сcылка3|число |число |число |число |

Механизм работы счетчика:

При нажатии на ссылку, скрипт goto.php прежде чем отправить пользователя на урл, записывает в ячейку таблицы МуSQL 'переходы за сутки' значение '$х+1' (где $х число в ячейке на момент этого перехода, в первый раз $x=0) , при втором переходе записывает '1+1', в третий '3+1' и так далее...
В 24:00 каждый день Cron запускает скрипт, который вписывает накопленные за сутки значения в ячейку 'за неделю', предварительно сложив с уже имеющемся в 'за неделю' числом, затем обнуляет ячейку 'переходы за сутки' . Каждое воскресенье в 24:00 он прибавляет недельные данные к месячным и обнуляет недельные, а 1 числа каждого месяца заносит месячные данные в поле 'всего' и обнуляет месяц.

Рационально ли писать счетчик по такой схеме? Пробовал придумать механизм с временными функциями ПХП, но ничего более изящного не придумал.
 

Viktor_Rez

Новичок
Я думаю рациональный подход.

Только я бы делал так:
При каждом запуске скрипта goto.php во все поля прибавляется по единице к текущему в них значению.

Расписание Cron’a:
Каждый день в 23:59 пишем 0 в «переходы за сутки»,
Каждое воскресение в 23:59 пишем 0 в «за неделю»,
Первого числа каждого месяца в 00:01 пишем 0 в «за месяц»
 

Dovg

Продвинутый новичок
asics
А хранить метку времени нельзя?
и при выборке уже сравнивать с текущим временем
--
в качестве бонусов получишь более детальную статистику, например по часам, дням недели и т.д.
 

Фанат

oncle terrible
Команда форума
Dovg
он построчно хранить вообще не хочет. только сумму.
 

asics

Новичок
Viktor_Rez, да так код будет проще, а результат тот же.
Dovg, детализация, действительно, ни к чему.

Спасибо всем за советы! Пойду писать скриптинку :)

-~{}~ 04.06.07 20:49:

Кстати, а то, что скрипт goto.php перед редиректом будет данные в базу писать не замедлит открытие конечного сайта?

Сколько обычно по времени такая операция занимает?
 

asics

Новичок
Написал счетчик, всё работает, но есть 2 вопроса:

1. вот код моего счетчика:

PHP:
$query0 = "SELECT * FROM counter WHERE name='$id'";
$x=mysql_query($query0) or die(mysql_error()); 
$y=mysql_fetch_array ($x);
$z1=1+$y['day'];
$z2=1+$y['week'];
$z3=1+$y['month'];
$z4=1+$y['summ'];
$query	= "UPDATE `counter` SET `day` = '$z1',`week` = '$z2',`month` = '$z3',`summ` = '$z4' WHERE `name` = '$id' ";
mysql_query($query) or die(mysql_error());
т.е. сначала извлекаются значения из ячеек, а потом прибавляется еденица ко всем и записывается на место. Довольно сложная конструкция получилась.

Я нашел в сети как сделать это всё в одну строчку:
PHP:
$query= "UPDATE `counter` SET `day`  =  `day`+1 WHERE `name` = '$id' ";
т.е. он в один прием извлекает значение и апдейтит его, только вот у меня не работает такой код.
Почему?

2. С помощью какой функции можно реализовать отсев повторных кликов с одного компьютера, т.е. чтобы в течении суток с одного IP засчитывался только один переход по конкретной ссылке?
 

Фанат

oncle terrible
Команда форума
у меня не работает такой код.
PHP FAQ: Ничего не работает! Что делать???
С помощью какой функции можно реализовать отсев повторных
"Функции", разумеется, никакой нет. Почему - следует прочесть в PHP FAQ: Самые основы. Как работает PHP., чтобы понимать - с чем ты работаешь и что такое php
А отсев делай с помощью cookie
 

asics

Новичок
Фанат, спасибо за совет,скажи, действительно ли можно упростить код?
 
Сверху