Flood Kontrol

Üyelerin gönderdikleri mesajlarda ve başlıklarda flood yapmalarına engel olacak bir kaç moda ihtiyaç vardı, ben bunları hazırlayıp bir tek başlık altında topladım...

Kullanım şekli
Burada flood kontrol modunun farklı şekilleri size sunulacaktır... Bütün bu kodların hepsi posting.php dosyasında aynı yere eklenmesi gerekmektedir. Bu açıdan hepsini birden kurmaya kalkmayın!

Flood kontrol kodlarını nereye yerleştirmemiz gerekmektedir



----- [ AÇ ] --------------------- 

posting.php 

----- [ BUL ] --------------------- 

// 
// What auth type do we need to check? 
// 

----- [ ÖNCESİNE EKLE ] ---------------------
Not: Bloklar numaralandırılmıştır. Hata bildirimi yaparken lütfen bu numaraları kullanarak referans veriniz.

Dil dosyasına eklenecek hata mesajları

$lang['flood_error_1'] = 'Sorry, you have already started your maximum number of topics today. Please try again later!';
$lang['flood_error_2'] = 'Sorry, you have already started a topic / the maximum number of topics in this forum!';
$lang['flood_error_3'] = 'Sorry, there are too many topics being started at the moment. Please try again later!';
$lang['flood_error_4'] = 'Sorry, the maximum amount of posts for this forum has been reached today. Please try again later!';
$lang['flood_error_5'] = 'Sorry, your maximum amount of posts for this forum has been reached today. Please try again later!';
$lang['flood_error_6'] = 'Sorry, your maximum amount of posts for today has been reached. Please try again later!';
$lang['flood_error_7'] = 'Sorry, your maximum amount of posts for today has been reached. Please try again later!';

1. YENİ BAŞLIK: Üyelerin 24 saat içinde 3 mesajdan fazla mesaj göndermesine engel olmak




if ($mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
     $time_span = time() - 24*3600; //24 hours 
     $topic_limit = 3; // 3 topics per day 
     $error_msg = $lang['flood_error_1']; 
     $sql = "SELECT count(topic_id) as topic_count 
        FROM " . TOPICS_TABLE . " 
        WHERE topic_time > $time_span 
        AND topic_poster = " . $userdata['user_id']; 
     if ( $result = $db->sql_query($sql) ) 
     { 
        $row = $db->sql_fetchrow($result);            
        $topic_count = $row['topic_count']; 
        if ($topic_count >= $topic_limit) message_die(GENERAL_MESSAGE, $error_msg); 
     }          
  } 
}
2. YENİ BAŞLIK: forumlar için zaman sınırı olmaksızın mesaj sınırı



if ($mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
    $forum_list = array(12); //Forum id list like array(1, 2, 3, 5, 8) 
    $topic_limit = 1; // 1 topic 
     $error_msg = $lang['flood_error_2']; 
    if (in_array($forum_id, $forum_list)) 
    { 
      $sql = "SELECT count(topic_id) as topic_count 
         FROM ".TOPICS_TABLE." 
         WHERE forum_id = $forum_id 
           AND topic_poster = ".$userdata['user_id']; 
      if ($result = $db->sql_query($sql)) 
      { 
        $row = $db->sql_fetchrow($result)); 
        $topic_count = $row['topic_count']; 
        if ($topic_count >= $topic_limit) message_die(GENERAL_MESSAGE, $error_msg);          
      } 
    } 
  } 
}


3. YENİ BAŞLIK: 3 dakika da 5 mesaj sınırı 


Kod:

if ($mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
     $time_span = time() - 5*60; //5 minutes 
     $topic_limit = 3; // 3 topics per 5 minutes    
     $error_msg = $lang['flood_error_3']; 
     $sql = "SELECT count(topic_id) as topic_count 
        FROM " . TOPICS_TABLE . " 
        WHERE topic_time > $time_span"; 
     if ( $result = $db->sql_query($sql) ) 
     { 
        $row = $db->sql_fetchrow($result);            
        $topic_count = $row['topic_count']; 
        if ($topic_count >= $topic_limit) message_die(GENERAL_MESSAGE, $error_msg); 
     }          
  } 
}
4. YENİ MESAJ: belli forumlar için 24 satte 100 mesaj sınırı


if ($mode == 'reply' || $mode == 'quote' || $mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
    $forum_list = array(12); //Forum id list like array(1, 2, 3, 5, 8) 
    $time_span = time() - 24*3600; //24 hours 
    $post_limit = 100; //Max messages per time 
     $error_msg = $lang['flood_error_4']; 
    if (in_array($forum_id, $forum_list)) 
    { 
       $sql = "SELECT count(post_id) as post_count 
         FROM " . POSTS_TABLE . " 
         WHERE post_time > $time_span 
             AND forum_id = $forum_id"; 
       if ($result = $db->sql_query($sql)) 
       { 
          $row = $db->sql_fetchrow($result); 
          $post_count = $row['post_count']; 
          if ($post_count >= $post_limit) message_die(GENERAL_MESSAGE, $error_msg); 
       } 
    } 
  } 
}
5. YENİ MESAJ: belli forumlar için, 24 saat içinde üye başına 3 mesaj sınırı




if ($mode == 'reply' || $mode == 'quote' || $mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
    $forum_list = array(12); //Forum id list like array(1, 2, 3, 5, 8) 
    $time_span = time() - 24*3600; //24 hours 
    $post_limit = 3; //Max messages per time 
    $error_msg = $lang['flood_error_5']; 
    if (in_array($forum_id, $forum_list)) 
    { 
       $sql = "SELECT count(post_id) as post_count 
         FROM " . POSTS_TABLE . " 
         WHERE post_time > $time_span              
           AND forum_id = $forum_id 
           AND poster_id = ".$userdata['user_id']; 
       if ($result = $db->sql_query($sql)) 
       { 
          $row = $db->sql_fetchrow($result); 
          $post_count = $row['post_count']; 
          if ($post_count >= $post_limit) message_die(GENERAL_MESSAGE, $error_msg); 
       } 
    } 
  } 
}
6. YENİ MESAJ: üye 15 mesaj ve 50 mesaj arasında ise günde en fazla 3 mesaj gönderebilsin



if ($mode == 'reply' || $mode == 'quote' || $mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
    $time_span = time() - 24*3600; //24 hours 
    $post_limit = 3; //Max messages per time 
    $threshold = 15; //Until this amount has been posted 
    $post_maximum = 50; //Never more than this 
    $error_msg = $lang['flood_error_6']; 
    $sql = "SELECT count(post_id) as post_count_total 
      FROM " . POSTS_TABLE . " 
      WHERE poster_id = ".$userdata['user_id']; 
    if ($result = $db->sql_query($sql)) 
    { 
      $row = $db->sql_fetchrow($result); 
      $post_count_total = $row['post_count_total']; 
      $sql = "SELECT count(post_id) as post_count 
        FROM " . POSTS_TABLE . " 
        WHERE post_time > $time_span 
          AND poster_id = ".$userdata['user_id']; 
      if ($result = $db->sql_query($sql)) 
      { 
        $row = $db->sql_fetchrow($result); 
        $post_count = $row['post_count']; 
        if (($post_count_total < $threshold && $post_count >= $post_limit) || $post_count >= $post_maximum ) message_die(GENERAL_MESSAGE, $error_msg); 
      } 
    } 
  } 
}
7. YENİ MESAJ: belli bir üyeye, gün başına 10 mesaj sınırı koymak...




if ($mode == 'reply' || $mode == 'quote' || $mode == 'newtopic') //Only in these cases 
{ 
  $user_id_list = array(1); //Fill in the user id(s) of the users you want to block, 
   //for example array(5, 10, 45, 81) 
  $time_span = time() - 24*3600; //24 hours 
  $post_limit = 10; //Max messages per time 
  $error_msg = $lang['flood_error_7']; 

  if (in_array($userdata['user_id'], $user_id_list) ) 
  { 
     $sql = "SELECT count(post_id) as post_count 
       FROM " . POSTS_TABLE . " 
       WHERE post_time > $time_span 
       AND poster_id = ".$userdata['user_id']; 
     if ($result = $db->sql_query($sql)) 
     { 
        $row = $db->sql_fetchrow($result); 
        $post_count = $row['post_count']; 
        if ($post_count >= $post_limit) message_die(GENERAL_MESSAGE, $error_msg); 
     } 
  } 
}