как правильно тут заметили, запретить релоад ты не можешь, яваскрипт, вообще, практически не позволяет менять никакие установки и вмешиваться в процессы на стороне клиента ( ты не можешь считывать из файлов, писать в файлы и тд, за исключением кукиз). Опиши подробней, чего бы ты не хотел, при автоматической отправке форм со старыми параметрами. и юзай, например, onLoad/onUnload.
Возник вопрос, можно-ли на javascript запретить reload страницы и как. Смысл действия таков: есть страница (на PHP) надо чтобы управление ее начинкой было только внутренними формами, а то при reload browser отдает старые данные форм.
Спасибо.
решается так11.07.03 18:22 Автор: paganoid Статус: Member
Насколько я понимаю, у тебя проблема в том, что когда юзер жмёт Reload, форма посылается повторно?
Такая проблема решается не javascript, а в самом скрипте на PHP. Когда тебе приходят данные из формы методом POST, ты после сохранения данных не должен выводить страницу, а должен сделать header ("Location: http://тут_адрес только_что_созданного_сообщения"). Тогда рефреш страницы отошлет юзера на GET, и POSTящиеся данные не будут повторно сохраняться.
а если ты хочешь отобразить на странице только что введенные данные ?11.07.03 21:05 Автор: tdes <jin> Статус: Member Отредактировано 11.07.03 21:06 Количество правок: 1
> Насколько я понимаю, у тебя проблема в том, что когда юзер > жмёт Reload, форма посылается повторно? > > Такая проблема решается не javascript, а в самом скрипте на > PHP. Когда тебе приходят данные из формы методом POST, ты > после сохранения данных не должен выводить страницу, а > должен сделать header ("Location: http://тут_адрес > только_что_созданного_сообщения"). Тогда рефреш страницы > отошлет юзера на GET, и POSTящиеся данные не будут повторно > сохраняться.
до header(....) не может быть операторов вывода, или получишь warning:
Warning: Cannot modify header information - headers already sent by (output started .
ну дк, а я что предлагаю?14.07.03 12:15 Автор: paganoid Статус: Member Отредактировано 14.07.03 12:16 Количество правок: 1
> а если ты хочешь отобразить на странице только что введенные данные ? > до header(....) не может быть операторов вывода, или > получишь warning: > Warning: Cannot modify header information - > headers already sent by (output started .
Естественно ничего выводить до хедера нельзя.
Допустим у тебя сообщение с нумером 123 отображается урлой message.php?id=123
Делаем так: идет POST новых данных -> записали в базу с нумером 777 -> редиректим на страницу message.php?id=777 и сразу exit().
Твои вновь введенные данные отображаются и проблема решена.
как правильно тут заметили, запретить релоад ты не можешь, яваскрипт, вообще, практически не позволяет менять никакие установки и вмешиваться в процессы на стороне клиента ( ты не можешь считывать из файлов, писать в файлы и тд, за исключением кукиз). Опиши подробней, чего бы ты не хотел, при автоматической отправке форм со старыми параметрами. и юзай, например, onLoad/onUnload.
Описание ситуации11.07.03 18:28 Автор: VIll Статус: Незарегистрированный пользователь
Ситуация такая:
Есть скрипт PHP, который выдает форму. Пользователь заполняет форму и отсылает на сервер, где данные валятся в файл. Тот же скрипт выдает ту же форму но с небольшими изменениями, для дальнейшего заполнения, пока пользователь жмет кнопки и вводит текст, все нормально, а если он жмет релоад, то browser отдает предыдущую итерацию заполненной формы и все сбивается: в файл ложится еще один комплект данных. Я думал, можно как-нибудь легкой кровью отделаться, запретить reload, но... придется что-то другое думать.
Спасибо
Решение проблемы...30.07.03 13:02 Автор: DgtlScrm Статус: Member Отредактировано 30.07.03 13:16 Количество правок: 2
> Ситуация такая: > Есть скрипт PHP, который выдает форму. Пользователь > заполняет форму и отсылает на сервер, где данные валятся в > файл. Тот же скрипт выдает ту же форму но с небольшими > изменениями, для дальнейшего заполнения, пока пользователь > жмет кнопки и вводит текст, все нормально, а если он жмет > релоад, то browser отдает предыдущую итерацию заполненной > формы и все сбивается: в файл ложится еще один комплект > данных. Я думал, можно как-нибудь легкой кровью отделаться, > запретить reload, но... придется что-то другое думать. > Спасибо
Можешь сделать хитро все изменяемые данные сохраняй в куки, а при загрузке формы проверяй куки на наличие некоторых записей.
Делается это так:
1 ставишь обработчик onBlur на все поля ввода. Он запускает функцию SaveCookie(имя_поля)
2 SaveCookie() записывает изменения в куки
3 Если загружается хтмл с формой, яваскрипт проверяет куки и если находит что-то изменяет соответствующие поля.
4 Когда форма заполнена и все нормально чистишь куки.
Надеюсь код сам сможешь написать =)
но куки могут быть отключены..., хотя это редкость. Тогда можешь сделать так:
ставишь обработчик onBlur(потеря фокуса) на все поля ввода. И просто в IFRAMEы сабмитишь форму с измененным полем например:
некоторые браузеры обладают поддержкой наборов объектов, характерных лишь для них, можно написать свой браузер, который в модуле обработки JS будет, грубо говоря, дизэйблить кнопку релоад, но опять-таки - это не выход.
тут проблема в алгоритмике программной части сайта. пусть ставит флаг, определяющий - первая ли это загрузка страницы или же нет. вобщем привязка к браузеру - не лучший выход
а смысл?30.07.03 20:50 Автор: DgtlScrm Статус: Member
Ну понимаешь, привязка не выход. Да это так, но и можно предположить, что пользователь сидит в Opera/IE/Mozila/Netscape а не в Internet Super Browser v0.0000001 (underground edition) =)
Создавая флаг ты можешь предотвратить повторное сохранение формы на сервере, но не уберечь данные пользователя(те которые он ввел до прегрузки странички)
Если ты щитаешь, что специфичесские функции использовать не стоит, тогда можно в том, что я написал место обработчика onBlur использовать чтото более стандартное, например onKeyDown. Вариаций много. И мои решения - это чисто мое субьективное мнение, пришедшее с опытом (во как сказал ;) )
А чел отключает графику и отдыхает...
А чел отключает cookie и отдыхает...
Он может отключить все что угодно, но не забывайте тему поста. Все делается для этого же пользователя и если он отключает чтото это только ему во вред =)
Тема - как обезопасить пользевателя если он пол часа заполняет форму, а потом случайно перегружает страничку, данные не потерялись и не дошли дважда к сервачку (как я ее понял). Так что он может отключать... ему же хуже ;)
i bystro vyklu4it' sql server, 4tob ne zapisat' dublirujushuu infu :))30.07.03 15:17 Автор: des[@work] Статус: Незарегистрированный пользователь