За последние 24 часа нас посетили 17490 программистов и 1672 робота. Сейчас ищут 1944 программиста ...

Помогите с счетчиком

Тема в разделе "PHP для новичков", создана пользователем MrAndrew, 31 янв 2011.

  1. MrAndrew

    MrAndrew Активный пользователь

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Вообщем такая проблема... Если, как гость, обновлять фотографию на моем сайте, просмотры будут считаться, тем самым, как бы накручиваться... Что и делают некоторые умники, поднимая свое фото вверх в рейтинге! :)

    Я сделал следующее:

    PHP:
    1. if (!function_exists('get_image_hits_table')) {
    2.     function get_image_hits_table($image_id, $session_ip, $user_id) {    
    3.         global $site_db;
    4.  
    5.         if ((int)$user_id > GUEST) {
    6.             $sql = "SELECT h.user_id
    7.                       FROM " . IMAGES_HITS_TABLE . " h
    8.                       INNER JOIN " . IMAGES_TABLE . " i ON (i.image_id = h.image_id)
    9.                       INNER JOIN " . CATEGORIES_TABLE . " c ON (c.cat_id = i.cat_id)
    10.                       WHERE i.image_active = 1 AND i.image_id = " . (int)$image_id . " AND h.user_id = " . (int)$user_id . " AND i.cat_id NOT IN (".get_auth_cat_sql("auth_viewcat", "NOTIN").")";
    11.  
    12.             $hits_info = $site_db->query_firstrow($sql);
    13.             if (!empty($hits_info['user_id'])) {
    14.                 return true;
    15.             }
    16.  
    17.         } elseif ($user_id == GUEST) {
    18.             $sql = "SELECT h.session_ip
    19.                       FROM " . IMAGES_HITS_TABLE . " h
    20.                       INNER JOIN " . IMAGES_TABLE . " i ON (i.image_id = h.image_id)
    21.                       INNER JOIN " . CATEGORIES_TABLE . " c ON (c.cat_id = i.cat_id)
    22.                       WHERE i.image_active = 1 AND i.image_id = " . (int)$image_id . " AND i.cat_id NOT IN (".get_auth_cat_sql("auth_viewcat", "NOTIN").")";
    23.  
    24.             $result = $site_db->query($sql);
    25.             if ($num_rows > 0) {
    26.                 $ip_check = false;
    27.                 while ($hits_row = $site_db->fetch_array($result)) {
    28.                     if ($hits_row['session_ip'] == $session_ip) {
    29.                         $ip_check = true;
    30.                     }
    31.                 }
    32.                 if ($ip_check == true) {
    33.                     return true;
    34.                 }
    35.             }
    36.         }
    37.     }
    38. }
    PHP:
    1. // Update Hits
    2. if (function_exists('get_image_hits_table') && get_image_hits_table($image_id, $session_info['session_ip'], $session_info['session_user_id']) !== true) {
    3.   $sql = "UPDATE ".IMAGES_TABLE."
    4.          SET image_hits = image_hits + 1
    5.          WHERE image_id = $image_id";
    6.   $site_db->query($sql);
    7.  
    8.   $sql = "INSERT INTO " . IMAGES_HITS_TABLE . "
    9.             (field_id, image_id, session_ip, user_id)
    10.             VALUES(NULL, " . (int)$image_id . ", '" . addslashes($session_info['session_ip']) . "', '" . addslashes($session_info['session_user_id']) . "')";
    11.  
    12.   $result = $site_db->query($sql);
    13. }
    PHP:
    1. define('IMAGES_HITS_TABLE', $table_prefix.'images_hits');
    И создал сл. таблицу в БД

    PHP:
    1. CREATE TABLE 4images_images_hits (
    2. field_id INT(11) unsigned NOT NULL AUTO_INCREMENT,
    3. image_id INT(11) NOT NULL DEFAULT '0',
    4. session_ip VARCHAR(15) NOT NULL DEFAULT '',
    5. user_id INT(11) NOT NULL DEFAULT '0',
    6. PRIMARY KEY(field_id)
    7. ) TYPE=MyISAM;
    Но блокировка по IP адресу не происходит, хотя IP и записывается в БД.

    Помогите, пожалуйста решить мою проблему...

    Благодарю!