>>Страничка, форма. Заполенная данными. Нажат "субмит", данные ушли и обработались. Человек зачем-то
>>делает "релоад", у него спрашивают "повторить данные?" Он жмёт йес и
>>я имею проблему. Как с ней бороться? Как обнулить "пост" после
>>передачи?
>Боролся с этим же и буду признателен, если кто-нибудь подскажет стандартное решение.
>Однако, как я понимаю от скрипта тут уже мало что зависит
>- данные с формы ушли и тут уже апач и броузер
>общаются.
>
>Браузер: повторить
>Апачь: ты засылал посты мне их же принять?
>Браузер: да
>Апачь: пожалуйста
>
>по-моему так...
Более логичным кажется проверка самим броузером, что он уже эти данные отправлял. Это проще, и главное - быстрее: предотвращается лишнее обращение к серверу. Учитывая, что запрос на повторную отправку возникает практически мгновенно - похоже, так оно и есть. ;-)
Кстати, не во всех броузерах и не всегда запрос вообще возникает. В той же Опере...
Но это все теория.
Как бороться? Не знаю, можно ли вообще как-то обнулить пост...
Я, например, делаю так.
Если данные формы ДОБАВЛЯЮТСЯ в таблицу, то перед их сохранением специальный кусок кода проверяет по таблице, не были ли они уже сохранены. Проверка может быть либо по уникальному полю (например, в таблице юзеров не может быть два одинаковых логина), либо, если такового нет - по всему набору данных. Если данные уже есть, об этом сообщается пользователю.
Под уникальностью поля я в данном случае подразумевал просто логическую уникальность, хотя можно это зафиксировать и в описании структуры таблицы.
Если данные ОБНОВЛЯЮТ какую-то запись, то можно, в принципе, никаких проверок и не делать. Ну, обновит юзер запись одними и теми же данными дважды. Можно все-таки рассчитывать, что далеко не каждый юзер будет жать F5, и слишком много лишних бессмысленных запросов к базе не будет :-)
У вышеописанного подхода есть свои минусы: подразумевается лишний запрос к базе. Но у меня, как правило, возникает потребность не просто исключить повторную отправку формы, а исключить вообще вторичный ввод данных, дублирование. Скажем, на условном примере с таблицей юзеров: я могу не посылать форму повторно, но попытаться завтра зарегистрировать пользователя с таким же логином. Что тогда? Поэтому меня такой подход устраивает. Думаю, что и Вы "имеете проблему" именно в таком ключе.
Если все же для Вас запрет повторной обработки формы достаточен (т.е. "завтра" пусть вводят то же самое заново), то приходит в голову такой вариант: при выдаче формы пользователю сгенерировать уникальный идентификатор формы, который поместить в скрытый элемент ввода. При передаче данных формы сначала проверять, не зарегистрирован ли в сессии идентификатор формы. Если нет - обработать данные и зарегистрировать. Если да - ничего не делать.
Еще вариант. После обработки данных формы пользователю что-то выводится-сообщается. Сделать чтобы это "что-то" выводилось не непосредственно сразу, в том же куске кода, что обрабатывал форму, а в результате редиректа. Скажем, редирект на страничку, которая сообщает: Ваши данные сохранены. Или на страничку, которая показывает резутьтаты обработки данных. После редиректа, сколько ни жми F5 - будет запрашиваться именно эта страничка без повторной отправки формы.
Удачи!