29.11.2007, 08:44
общий
это ответ
Здравствуйте, Mart!
Во-первых, можно индексировать записи в базе данных, дабы не появлялось одинаковых записей. Я говорю про присвоение какому-либо полю в таблице индекса INDEX или UNIQUE. Но это способ довольно ресурсоемкий. Кроме того, большинство людей вообще переписываются короткими и пошлыми фразами типа "привет как дела".
Другой способ - проставить в форме, которую Вы отправляете, атрибут action с несколько измененным значением - например, добавляйте в конец url результат работы функции time(). Например, таким образом(см. приложение, п. 1). Что с этим потом делать? Можно проверить что текущее значение, возвращаемое функцией time() равно значению переменной $_GET[‘rand‘] и делать запись в базу только в этом случае. Опасность есть и здесь. Время работы такой конструкции имеет порядок примерно 0.0001 с. Представим себе ситуацию, что форму мы отослали 29 ноября 2007 года в 4:37:<b style=color:#FF0000>43.99999</b>. Тогда форма может не быть принятой потому, что time() возвратит значение, отличное от значения переменной $_GET[‘rand‘]. Чем быстрее работает скрипт, тем ниже такая вероятность. Она и так, вообще-то, низкая, но она есть, хотя на первый взгляд и кажется абсурдной.
После того, как мы отослали форму, при нажатии кнопки F5 запрашиваемый url не изменится. Зато изменится значение time(), и форма не будет принята.
После того, как форма загружена, можно сделать перенаправление на исходную страницу путем посыла заголовка "Location: URL" функцией header. Но этот способ не сработает, если Вы уже что-то при этом в браузере вывели. Например, сообщение какое-то, да достаточно вывести один пробел, как этот способ уже не будет работать. Тогда можно применить JavaScript(см. п.2 приложения). Но и у этого способа есть крупный недостаток - некоторые "умные" пользователи отключают JavaScript.
Вот так-то. Удачи!
Приложение:
П. 1.<form method="POST" action="?rand=<?=time();?>">....</form>П. 2.<? echo "<script>location.href="URL";</script>";