Защиту от дабл-постов можно условно разделить на две категории:

1. Защита, запрещающая писать одному пользователю два сообщения подряд
2. Защита, запрещающая писать одному пользователю два одинаковых сообщения подряд

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

Более того, чтобы понять, кто и что отправлял в последнем сообщении темы и нужно ли новое сообщение считать за дабл, надо знать, что это за пост и кто его отправил. Логично?
Следовательно, все эти защиты работать она будут только в тех формах ответа, рядом с которыми есть перечень последних постов.

То есть защита не сработает, если:
- сообщение отправляется не с последней страницы темы через форму быстрого ответа (оттуда не видно последних постов)
- сообщение отправляется через расширенную форму ответа, а в настройках форума отключен показ последних постов темы

Начнем с первой версии защиты

Код:
function check_doubles(form_target)
{
	a = document.getElementsByTagName('div')
	if(location.href.indexOf('post.php?tid=') > -1)
	{
    lp_tag = 'toppost';
	}
	else
	{
    lp_tag = 'endpost';
	}
	for(i=0; i<a.length; i++)
	{
    if(a.className.indexOf(lp_tag) > -1)
    {
    	if(lp_tag == 'toppost')
    	{
        if(a.getElementsByTagName('div')[0].getElementsByTagName('p')[0].innerHTML.indexOf(UserLogin) == -1)
        {
        	return process_form(form_target)
        }
    	}
    	else
    	{
        if(a.getElementsByTagName('ul')[0].getElementsByTagName('a')[0].innerHTML == UserLogin)
        {
        	alert('Повтор сообщений запрещен')
        	return false
        }
    	}
    	break
    }
	}
	return process_form(form_target)
}

document.getElementById('post').onsubmit = function onsubmit(event) { this.submit.disabled=true;if(check_doubles(this)){return true;}else{this.submit.disabled=false;return false;} }

Код вставляем в HTML под формой ответа.

Вторая версия защиты (проверка содержимого)
Не могу не заметить, что проверка содержимого очень глючит.

Защита не сработает на два одинаковых, но интерактивных сообщения, например, на сообщения с картинками, видео, цитатами, любым bb-кодом вообще. Отстой конечно, но иначе бы пришлось реализовывать сложную real-time интерпретацию bb-кода, на что лично у меня уйдет до двух недель.

Итак, скрипт:

Код:
function check_doubles(form_target)
{
	a = document.getElementsByTagName('div')
	if(location.href.indexOf('post.php?tid=') > -1)
	{
    lp_tag = 'toppost';
	}
	else
	{
    lp_tag = 'endpost';
	}
	for(i=0; i<a.length; i++)
	{
    if(a.className.indexOf(lp_tag) > -1)
    {
    	if(lp_tag == 'toppost')
    	{
        if(a.getElementsByTagName('div')[0].getElementsByTagName('p')[0].innerHTML.indexOf(UserLogin) == -1)
        {
        	return process_form(form_target)
        }
        if(a.getElementsByTagName('div')[0].getElementsByTagName('div')[1].getElementsByTagName('div')[0].getElementsByTagName('div')[0].innerHTML == form_target.getElementById('main-reply').innerHTML)
        {
        	alert('Повтор сообщений запрещен')
        	return false
        }
    	}
    	else
    	{
        if((a.getElementsByTagName('ul')[0].getElementsByTagName('a')[0].innerHTML == UserLogin) && (form_target.getElementById('main-reply').innerHTML == document.getElementById(a.id + '-content').getElementsByTagName('p')[0].innerHTML))
        {
        	alert('Повтор сообщений запрещен')
        	return false
        }
    	}
    }
	break
	}
	return process_form(form_target)
}

document.getElementById('post').onsubmit = function onsubmit(event) { this.submit.disabled=true;if(check_doubles(this)){return true;}else{this.submit.disabled=false;return false;} }

Тоже вставлять в html под формой ответа.

Не могу не сказать, что оба скрипта тест не проходили. И если первый скрипт в силу своей простоты, вероятно, заработает, то шанс, что второй скрипт окажется рабочим, я оцениваю примерно в 15-20%.