Наших модераторов порядком подзамучило удалять вторые посты. Чаще всего подобное возникает при отправке сообщения из под МиниОперы, или при проблемах с соединением. Защита методом отключения кнопки "Отправить" в данном случае неэффективна, т.к. Мини Опера Яваскрипты не обрабатывает, а при проблеме соединения пользователь делает шаг назад и снова отправляет. В итоге частенько возникали двойные посты. Флуд-интервал у меня поставлен минимальный по просьбам пользователей - модемщиков, использующих тактику "Подключился, закачал интересующие темы, отключился, спокойно написал ответы, подключился, отправил все подряд." Пришлось немного перелопатить фунцию флуд-контроля. Вместо
Код: Выделить всё
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT MAX(post_time) AS last_post_time
FROM " . POSTS_TABLE . "
WHERE $where_sql";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
}
}
в файле functions_post.php поставил
Код: Выделить всё
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT p.post_time AS last_post_time, p.post_id, pt.post_text
FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
WHERE $where_sql AND pt.post_id = p.post_id ORDER BY post_time DESC LIMIT 1";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
if ($row['post_text']==$post_message)
{
message_die(GENERAL_MESSAGE, $lang['Double_post_Error']);
}
}
}
Естественно добавив константу в языковой файл.
Проблемы нет.
Добавлено спустя 8 секунд:
Наших модераторов порядком подзамучило удалять вторые посты. Чаще всего подобное возникает при отправке сообщения из под МиниОперы, или при проблемах с соединением. Защита методом отключения кнопки "Отправить" в данном случае неэффективна, т.к. Мини Опера Яваскрипты не обрабатывает, а при проблеме соединения пользователь делает шаг назад и снова отправляет. В итоге частенько возникали двойные посты. Флуд-интервал у меня поставлен минимальный по просьбам пользователей - модемщиков, использующих тактику "Подключился, закачал интересующие темы, отключился, спокойно написал ответы, подключился, отправил все подряд." Пришлось немного перелопатить фунцию флуд-контроля. Вместо
Код: Выделить всё
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT MAX(post_time) AS last_post_time
FROM " . POSTS_TABLE . "
WHERE $where_sql";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
}
}
в файле functions_post.php поставил
Код: Выделить всё
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT p.post_time AS last_post_time, p.post_id, pt.post_text
FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
WHERE $where_sql AND pt.post_id = p.post_id ORDER BY post_time DESC LIMIT 1";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
if ($row['post_text']==$post_message)
{
message_die(GENERAL_MESSAGE, $lang['Double_post_Error']);
}
}
}
Естественно добавив константу в языковой файл.
Проблемы нет.
Добавлено спустя 2 минуты 4 секунды:
У Вас, как видите тоже возникает двоение. Это была иллюстрация к теме.