Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Защита от "двойного поста"

Форум для авторов модов для phpBB 2.0.x.
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Защита от "двойного поста"

Сообщение Jovani »

Иногда бывает, что постят по два сообщения, так получается у тех, кто нажав "Submit"(Отправить), не дождавшись результата, нажимают на "Submit" еще раз.
Получается два одинаковых поста, один за другим.

Есть желание избавиться от такого безобразия, методом отключения "Submit" после нажатия.
В некоторых движках форумов так и делается.
Но не получилось :(

В форме Quick Reply Пытался так:
Вместо этого:

Код: Выделить всё

if (formErrors) { 
alert(formErrors); 
return false; 
} else { 
if (document.post.quick_quote.checked) { 
document.post.message.value = document.post.last_msg.value + document.post.message.value; 
} 
document.post.quick_quote.checked = false; 
return true; 
} 
}


Пишу это:

Код: Выделить всё

if (formErrors) { 
alert(formErrors); 
return false; 
} else { 
if (document.post.quick_quote.checked) { 
document.post.message.value = document.post.last_msg.value + document.post.message.value; 
} 
document.post.quick_quote.checked = false; 
document.post.post.disabled = true;  
return true; 
} 
}


Кнопка отрубается, но вместо создания сообщения, перекидывает на "Ответить" ...
Может, кто дружит с java script, подскажет в чем ошибка?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Вот как эта проблема решена на www.overclockers.ru

Код: Выделить всё

<input type="submit" name="post" class="mainoption" value="{L_SUBMIT}" onClick="submitplus()" tabindex="10">

function submitplus()
{
	formErrors = false;    
	
	if (document.post.message.value.length < 2) {
		formErrors = true;
	}

	if (formErrors == false) submitcount++;
}

function checkForm() {

	formErrors = false;    
	if (document.post.message.value.length < 2) {
		formErrors = "Вы должны ввести текст сообщения";
	}

//alert(1);
	if (document.post.city_need.value == '1') {
//alert(2);
		if (document.post.city.value.length < 2) {
			if (formErrors) {
				formErrors += "\nВы должны указать город или иной населенный пункт";
			} else formErrors = "Вы должны указать город или иной населенный пункт";
		}
	}

	if (formErrors) {
		alert(formErrors);
		submitcount = 0;
		return false;
	
	} else if (submitcount < 2)
	{
		bbstyle(-1);
		//submitcount++;
		return true;
	}
	else 
	{
		alert("Эта форма уже отправлена. Спасибо!");
		return false;
	}	
	
}
На мой взгляд немного некрасиво и неудобно... думаю над своим вариантом для Guru Advanced Quick Reply
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
ra
phpBB 2.0.2
Сообщения: 325
Стаж: 19 лет 11 месяцев
Откуда: Беларусь

Сообщение ra »

От двойного поста не защитит, но пользователя успокоит :)

Код: Выделить всё

[OPEN]

language/lang_russian/lang_main.php

[FIND]

$lang['Submit'] = 'Отправить';

[AFTER ADD]

$lang['Submitting'] = 'Отправляется...';

[OPEN]

quick_reply.php

[FIND]

'L_SUBMIT' => $lang['Submit'],

[AFTER ADD]

'L_SUBMITTING' => $lang['Submitting'],

[OPEN]

templates/subSilver/quick_reply.tpl

[FIND]

	if (formErrors) {
		alert(formErrors);
		return false;

[BEFORE ADD]

	if (!(formErrors)) document.post.post.value='{L_SUBMITTING}';

[SAVE/CLOSE ALL FILES]



Во время тестирования исписал три страницы :)

Добавлено спустя 1 день 43 минуты 11 секунд:

Jovani надо было сделать небольшую задержку:

Код: Выделить всё

	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		bbstyle(-1);
		setTimeout("document.post.post.disabled = true", 0);	
		return true;
Надеюсь никто не против если я такое включу в Post is sending?
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

R@
Спасибо, все ОК - заработало !

Вернуться в «Для авторов (phpBB 2.0.x)»