[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оптимизация кода счетчика
Гость_Petr
всем привет. в инете пока искал счетчик готовый, наткнулся на популярный код, который везде наверно:

function searchID($id)
{
$result = mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'");
$num_rows = mysql_num_rows($result);
if ($num_rows>0)
{
return True;
}
else
{
return False;
}
}




function MySQLRead($id)
{
$id = addslashes($id);
$result = mysql_query ("SELECT * FROM `my_log` WHERE `page_id` LIKE '".$id."'");
return (array)mysql_fetch_assoc($result);
}


function UpdateTime($id, $time)
{
$id = addslashes($id);
$time = addslashes($time);
$result = mysql_query ("UPDATE `my_log` SET `date` = '".$time."' WHERE `page_id` = '".$id."'");
return $result;
}


function UpdateCounders($id, $all, $today)
{
$id = addslashes($id);
$time = addslashes($time);
$result = mysql_query ("UPDATE `my_log` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'");
return $result;
}


function Default_Write($id)
{
$id = addslashes($id);
$result = mysql_query ("INSERT INTO `my_log` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60*60*24)."');");
return $result;
}


$unical_page_id_gid = md5($_SERVER['REQUEST_URI']); // получение md5() хэша из url страницы



if (!searchID($unical_page_id_gid) || isset($_COOKIE['frll_count'])) // существует ли запись с таким id
{
Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
}
else // если не существует
{
$tmp = MySQLRead($unical_page_id_gid); // считаем значения
$all = $tmp['all'] + 1;
$today = $tmp['today'] +1;
if (time()>=$tmp['date']) // если сутки с момента записи прошли
{
UpdateTime($unical_page_id_gid, (time()+60*60*24)); // обновим дату
UpdateCounders($unical_page_id_gid, $all, 1); // обновим счетчики
}
else // если еще нет
{

UpdateCounders($unical_page_id_gid, $all, $today);
}
}


define("Today_and_all_counter", "Всего просмотров этой страницы: $all. Сегодня: $today");


Он работает замечательно, быстро, но как его обезопасить от накручивания просмотров? При каждом обновлении появляется новый просмотр, а мне надо чтоб один чел - один просмотр. Вот. Я в пхп недавно, так что если можно доступнее. Спасибо



Спустя 1 час, 32 минуты, 59 секунд (17.08.2011 - 16:54) TMake написал(а):
Цитата
а мне надо чтоб один чел - один просмотр.

Сохраняй в БД ip пользователя ($_SERVER['REMOTE_ADDR']) и при заходи пользователя проверяй - был ли пользователь с таким ip сегодня...

Для экранирования лучше пользуйся вместо :
Цитата
$id = addslashes($id);
$time = addslashes($time);

вот этим ->
$id = intval($id);
$time = mysql_real_escape_string($time);

Спустя 14 часов, 15 минут, 17 секунд (18.08.2011 - 07:09) Гость_Petr написал(а):
stepan, спасибо. А так не будет у нас строк куда, так как у всех динамические адреса?

Спустя 28 секунд (18.08.2011 - 07:09) Гость_Petr написал(а):
Имел ввиду строк "куча")

Спустя 6 минут, 24 секунды (18.08.2011 - 07:16) Гость_Petr написал(а):
а все, понял. Наверно ты имел ввиду создать отдельную таблицу в БД с ip, а я подумал в эту же поле добавить. И тем более эта таблица будет очищаться наверно через 24 часа
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.