Comments 44
А может просто дизаблить кнопку «отправить»(ну или «написать» если брать за пример Хабр) после первого нажатия?
Или невидимый инпут с уникальным ключем привязанным к сессии пользвателя, после добавления коментария генерировать новый.
То есть 1 форма = 1 комментарий.
То есть 1 форма = 1 комментарий.
это ж надо все время, когда юзер закходит на страничку, новый инпут генерить :)
а способ автора — один запрос к кэшу
Если не прав, поправьте :)
а способ автора — один запрос к кэшу
Если не прав, поправьте :)
— Генерить ключ не так ресурсоемко как каждый раз сравнивать «многобукаф» :)
— Генерить новый ключ можно только после отправки комментария.
— Генерить новый ключ можно только после отправки комментария.
Тогда ваш способ и есть то, что предлагает автор.
Видимо тут весь вопрос в том, что хранить :)
Видимо тут весь вопрос в том, что хранить :)
Нужно делать через ключ-хеш. Потому что запоминать весь текст коментария упрёмся в ограничение на размер печенюшки, плюс вся обработка на стороне пользователя.
А в чем проблема? Генерировать уникальную строку так сложно?
Плюс брать это из памяти при заходе в ту же страницу и будет работать как черновик.
какой смысл брать из памяти уже отправленный коммент?
Ну, имел в виду, если он не отправлен, то вот.
А вообще, в приличном сообществе можно и с редактированием своих комментариев жить. Даже в Википедии живут.
А вообще, в приличном сообществе можно и с редактированием своих комментариев жить. Даже в Википедии живут.
Очевидное и очень нужное улучшение (причем с несложной реализацией)
Записывать нужно только еще и номер топика, вдруг у пользователя слабый словарный запас и он пишет одно и тоже в разных местах :)
Записывать нужно только еще и номер топика, вдруг у пользователя слабый словарный запас и он пишет одно и тоже в разных местах :)
не совсем корректно все это. в идеале следует делать дополнительный апрув в таких случаях, но ничего больше.
Лучше всего делать проверку сообщений с тем же контентом на этапе добавления в базу данных и непосредственно внутри процедуры добавления комментария
Ну вот. Теперь не получится ставить «+1» всем подряд =(
Сам юзаю подобную штуку уже около 2-х лет в самописном движке форума.
По — моему, очень простое, но очень полезное улучшение — добавить в углу кнопку «Donate 25$ to murawjed».
Только сообщене целиком хранить не обязательно. Можно хранить какой либо простой хеш от сообщения, только выбрать не ресурсоемкий. Да хоть CRC32.
несправедливо. Хоть бы раз в жизни в банковской системе получился «дабл-пост» когда я деньги на карточку ложу.
А на форумах то мелочи )
А на форумах то мелочи )
помниться я когда-то писал на php вида: (ща напишу очень примитивно, но постараюсь передать идею)
<? php
if ($_POST['mess']) {
addNewComment($_POST['mess']);
header(«Location: „. $_SERVER['PHP_SELF']);
}
echo
form method=POST“
input type=»text« name=»mess«
input type=»submit« value=»OK«
/form»;
?>
вообщем после отправки записывал данные в БД и хеадерами обновлял страничку. В результате пользователь ничего не замечает, но по F5 доп. комменты не появляются.
П.С. предпросмотр показывает, что хабр съедает html код — поэтому я поудалял значки больше и меньше. Менее читабельно, но думаю всем будет понятно.
<? php
if ($_POST['mess']) {
addNewComment($_POST['mess']);
header(«Location: „. $_SERVER['PHP_SELF']);
}
echo
form method=POST“
input type=»text« name=»mess«
input type=»submit« value=»OK«
/form»;
?>
вообщем после отправки записывал данные в БД и хеадерами обновлял страничку. В результате пользователь ничего не замечает, но по F5 доп. комменты не появляются.
П.С. предпросмотр показывает, что хабр съедает html код — поэтому я поудалял значки больше и меньше. Менее читабельно, но думаю всем будет понятно.
Эм… руки, руки! Не надо вашими писать на PHP!
спс… не пишу :)
насчет поста — не понял… сорри…
сейчас лучше понял — имхо про хеш хорошая идея. Как еще вариант ориничение на кол-во постов в 1-3 секунд? (просто решил выдвинуть на обсуждение)
насчет поста — не понял… сорри…
сейчас лучше понял — имхо про хеш хорошая идея. Как еще вариант ориничение на кол-во постов в 1-3 секунд? (просто решил выдвинуть на обсуждение)
Смотри. Допустим 1000 человек смотрит топик. Из них 500 решает написать пост.
Как жаль, что нельзя редактировать коментарии после случайной отправки…
>> Смотри. Допустим 1000 человек смотрит топик. Из них 500 решает написать пост.
в итоге получаем 500 запросов, которые обрабатываются интерпретатором, и, после этого, твоим волшебным хидером еще 500 запросов, которые делают то же самое.
т.е. если взять 1000 на просмотреть + 500 запостить + 500 зарефрешить — подъем нагрузки почти на треть просто по запросам.
Это не есть хорошо.
>> Смотри. Допустим 1000 человек смотрит топик. Из них 500 решает написать пост.
в итоге получаем 500 запросов, которые обрабатываются интерпретатором, и, после этого, твоим волшебным хидером еще 500 запросов, которые делают то же самое.
т.е. если взять 1000 на просмотреть + 500 запостить + 500 зарефрешить — подъем нагрузки почти на треть просто по запросам.
Это не есть хорошо.
от дабл-поста (юзер два раза засабмитил форму ещё до ваших хедеров) это не спасёт.
но то, что любое «активное» (создать-редактировать-удалить) действие пользователя надо редиректить вперёд — это верно.
но то, что любое «активное» (создать-редактировать-удалить) действие пользователя надо редиректить вперёд — это верно.
Воистину, идеи летают по воздуху.
По моему, это всё таки делать на js. Нагрузка на сервер не увеличивается. Ничего переписывать не надо.
По моему, это всё таки делать на js. Нагрузка на сервер не увеличивается. Ничего переписывать не надо.
А как же пользователи у которых отключен js, или скрипты не прогрузились или вообще не поддерживаются… Сайт должен нормально функционировать без js, просто без «удобств» ;)
Решение: разрешить удалять собственные комментарии-дубли (при этом дублями считаются комментарии, идущие подряд на одном уровне вложенности). Чтобы не нарушалась целостность базы — при ссылке на комментарии-дубли делать ссылку на самый первый дубль. Или на самый последний — разница небольшая. Главное — именно этот дубль и запрещать удалять, после того, как он один останется.
Тем самым обеспечиваем минимальное увеличение нагрузки на сервер — не так уж часто ссылка на комментарий требуется. Значит, не так уж часто придётся сравнивать тексты. Ничего лишнего вычислять заранее и хранить не нужно. А те, кто самовыражается повторением, не лишаются такого права.
Другой вариант: как предлагалось выше, перед помещением в базу сравнивать текст комментария с предыдущим, но перед сравнением текста сравнивать время, а потом уже текст, если разница по времени ниже некоего порогового значения. Это позволит и нагрузку на сервер серьёзно не увеличивать, и избавит от подавляющего большинства технических глюков.
Ну и третий вариант до кучи: разрешить юзерам самим скрывать текст своих комментов. И уже не важно, дубль это или нет. Может, просто сказал нечто, о чём потом пожалел. Пусть по прежнему действует правило «что написано хабром — не вырубишь топором», если такое ограничение кому-то позарез нужно. Но хоть стыдливо прикрыться можно будет. Немного не в тему, но пересекается отчасти.
Тем самым обеспечиваем минимальное увеличение нагрузки на сервер — не так уж часто ссылка на комментарий требуется. Значит, не так уж часто придётся сравнивать тексты. Ничего лишнего вычислять заранее и хранить не нужно. А те, кто самовыражается повторением, не лишаются такого права.
Другой вариант: как предлагалось выше, перед помещением в базу сравнивать текст комментария с предыдущим, но перед сравнением текста сравнивать время, а потом уже текст, если разница по времени ниже некоего порогового значения. Это позволит и нагрузку на сервер серьёзно не увеличивать, и избавит от подавляющего большинства технических глюков.
Ну и третий вариант до кучи: разрешить юзерам самим скрывать текст своих комментов. И уже не важно, дубль это или нет. Может, просто сказал нечто, о чём потом пожалел. Пусть по прежнему действует правило «что написано хабром — не вырубишь топором», если такое ограничение кому-то позарез нужно. Но хоть стыдливо прикрыться можно будет. Немного не в тему, но пересекается отчасти.
Sign up to leave a comment.
Предотвращение двойной отправки