Как сделать чтобы при обновлении страницы данные формы сохранялись

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Я помню, что читал кое-что о том, чтобы дать каждому пользователю уникальный идентификатор сеанса и сравнить его с другим значением, которое разрешило проблему, которую я имею, но я забыл, где она находится.

@Adam: Adam: потому что это лишнее сделать еще один запрос к серверу, который, в свою очередь, будет снова получать некоторые данные из БД. Но это пустая трата ресурсов, потому что мы уже выбираем все необходимые данные при обработке запроса POST

Если вы используете шаблон PRG, то вы действительно покидаете страницу правильно? Не был ли вопрос, как заставить вещи работать, когда не перенаправлять?

Мне кажется, что если вы перенаправляете на ту же страницу, $ _POST очищается. Насколько я понимаю, это был желаемый эффект. Во всяком случае, это был МОЙ желаемый эффект. Я думаю, что ответ был бы лучше, если бы он сделал это явно.

Вам действительно нужно использовать шаблон Post Redirect Get для обработки этого, но если вы каким-то образом оказались в позиции, где PRG не является жизнеспособным (например, сама форма включена, предотвращая переадресацию), вы можете использовать некоторые из параметры запроса для создания строки на основе содержимого, а затем убедитесь, что вы еще не отправили ее.

Спасибо, что поделились, но это не похоже на работу. Обновление страницы действительно повторно отправляет форму для меня. Возможно, я что-то упустил?

Спасибо за ваш ответ. В итоге я просто реализовал шаблон Post / Redirect / Get, поэтому я не помню, что именно меня подвело. Еще раз спасибо за возвращение назад.

Используйте заголовок и перенаправляйте страницу.

Unset $_POST после вставки его в базу данных.

Она не будет работать. Когда пользователь переходит на обратную страницу, он выполняет настройку переменных POST еще раз.

Когда форма обрабатывается, вы перенаправляетесь на другую страницу:

если вы делаете что-то вроде комментариев и хотите, чтобы пользователь оставался на одной странице, вы можете использовать Ajax для обработки отправки формы

вы можете использовать форму повторной отправки через переменную сеанса Как

сначала вам нужно установить rand() в текстовое поле и $_SESSION ['rand'] на странице формы

После проверки $_SESSION ['rand'] с текстовым полем $_POST ['randcheck'] значение Как

Да, мы можем использовать microtime () и time () также вместо rand (), любую функцию или переменную, которая дает другое значение, мы можем использовать. НО убедитесь, что вы установили это значение в переменную SESSION. здесь SESSION необходимо проверить с помощью поля randcheck и предотвратить повторную отправку формы.

Затем в коде выполните следующее:

Я на самом деле просто написал что-то похожее на это, но не потрудился создать пароль, я просто перечислил свои формы (например: шаги 1-5), поэтому, если они равны, мы круто продолжаем, иначе не сохраняйте в БД и не отправляйте электронные письма. Но пусть пользователь приземлится, куда бы он его ни взял.

Просто переадресовывайте его на ту же страницу после использования данных формы, и он работает. Я пробовал это.

Это просто повторение того же ответа, который кто-то дал несколько лет назад. (На самом деле два других!)

Я нашел следующее обходное решение. Вы можете избежать перенаправления после обработки запроса POST , манипулируя history объектом.

Итак, у вас есть HTML-форма:

Когда вы обрабатываете эту форму на своем сервере, вы вместо перенаправления пользователя на /the/result/page настраиваете заголовок Location следующим образом:

Изображение 106613

После обработки POST ed данных вы выполняете небольшие

Изображение 106614

как вы можете видеть, данные формы POST ed до process.php script.
Этот script процесс POST редактировать данные и рендеринг /the/result/page сразу с помощью

  • нет перенаправления
  • no re POST данные при обновлении страницы (F5)
  • no re POST при переходе к предыдущей/следующей странице через историю браузера

UPD

Короче. Когда серверный процесс успешно сформирует POST данные:

  • Настройка NextPage вместо Location
  • Отобразить результат обработки данных формы POST , как это было бы сделать для запроса GET в шаблоне post/redirect/get

В свою очередь браузер просматривает заголовок NextPage :

  • Откорректируйте window.location с NextPage значением
  • Когда пользователь обновляет страницу, браузер будет согласовывать GET запрос NextPage вместо данных POST формы

Я думаю, что это было бы отлично, если бы реализовано, не так ли? =)

Пример базового сценария:

  • Отключить кнопку отправки, когда клиент кликнет по ней.
  • Если вы используете JQuery: Jquery.one
  • Шаблон PRG
  • Использование дифференцированной временной отметки времени хэширования/метки времени при отправке запроса.
  • Символы Userequest. Когда основные нагрузки назначают временный запрос, который, если повторяется, игнорируется.

После вставки его в базу данных вызовите метод unset(), чтобы очистить данные.

снята с охраны ($ _ POST);

Чтобы предотвратить обновление данных обновления, выполните перенаправление страницы на ту же страницу или на другую страницу после записи.

заголовок ( 'Location:'. $_ SERVER [ 'PHP_SELF']);

Я также хотел бы указать, что вы можете использовать подход javascript, window.history.replaceState , чтобы предотвратить повторную отправку на кнопке обновления и возврата.

Я бы по-прежнему рекомендовал подход Post/Redirect/Get, но это новое решение JS.

Как говорили другие, невозможно использовать post/redirect/get. Но в то же время довольно легко сделать то, что вы хотите сделать на стороне сервера.

На странице POST вы просто проверяете ввод пользователя, но не действуете на нем, вместо этого вы копируете его в массив SESSION. Затем вы снова перенаправляетесь на главную страницу представления. Ваша основная страница отправки начинается с проверки, существует ли массив SESSION, который вы используете, и если это необходимо скопировать в локальный массив и отключить его. Оттуда вы можете действовать на нем.

Таким образом, вы выполняете всю свою основную работу один раз, достигая того, что хотите.

Как предотвратить повторное заполнение формы php без перенаправления. Если вы используете $_SESSION (после session_start) и форму $_POST, вы можете сделать что-то вроде этого:

В вашей html-форме поставьте это:

Итак, каждый раз, когда форма отправляется, создается новый акт, сохраняется в сеансе и сравнивается с постулатом post.

Ps: если вы используете форму Get, вы можете легко изменить все POST с помощью GET, и он тоже работает.

Использование шаблона Post/Redirect/Get из ответа Keverw - хорошая идея. Однако вы не можете оставаться на своей странице (и я думаю, что это было то, о чем вы просили?) Кроме того, иногда может fail

Другой вариант - сохранить в сеансе, если текст должен быть записан в вашу базу данных SQL следующим образом:

Приветствую.
Интересуют способы реализации сохранения правок html-кода страницы после ее обновления.
Например, я вношу изменения в код страницы с помощью Firebug (или банально с помощью встроенного редактора F12). После обновления страницы все правки сбрасываются по умолчанию.
Понятное дело, что изменить код на самом сайте мы не в состоянии (ибо не имеем доступа), однако, уверен, что существует возможность сохранить правки на стороне браузера и при дальнейших обновлениях автоматически подменять исходный html-код на тот код, что мы получили в результате правок. То есть подмена кода - полностью на стороне клиента.
Примеры задач:
1. На нашем любимом новостном сайте очень неудобный цвет и шрифт текста. Мы хотим внести правки, чтобы в дальнейшем иметь удобные для нас параметры оформления текста.
2. Хотим изменить порядок расположения каких-либо элементов на странице. Мы можем это сделать вручную с помощью firebug, но не можем сохранить правки.
3. Хотим кого-нибудь разыграть, подделывая переписку. При этом нужно получить не статичный скрин, а сделать видео, на котором происходит обновление страницы, при этом внесенные правки не сбрасываются.
Ну и много других вариантов использования.
Вопрос: с помощью каких инструментов можно реализовать подобное? Возможно есть готовые плагины/скрипты для такой задачи?

Чё надо

Пишу поиск по сайту
Сам поиск у меня сейчас работает нормально, всё ищет без проблем.
Проблема только с выводом результатов…
Всё что нашёл выводит на одной странице (150-200 результатов), а нужно сделать так, чтобы выводилось только 10 результатов, а снизу были ссылки на следующие 10 результатов, ну и так далее
Я понимаю, что эти ссылки нужно делать с GET-запросом, чтобы при нажатии на них в php-скрипте смотреть число, которое там есть и выводить следующую десятку результатов…
______________________________________________________________________________________
Как это сделать? Как сохранить результаты поиска, ведь при переходе по ссылке они потеряются?
______________________________________________________________________________________
Дополнено (1). Искать по новой - ресурсоёмко.
Закэшировать на сервере - это я вас правильно понимаю - на сервере сохранить результаты поиска в файл, а потом его читать? Ммм… Тоже доп. Затраты на запись/чтение данных из файла…

Базы данных нет. Хостинг не поддерживает (точнее - тариф).

Поиск ведется по индекс-файлу (в нём содержится имя файла и всё его содержимое без html-тегов).
Дополнено (2). С базой данных конечно было бы проще в 100 раз.
А как выкрутиться из ситуации, если нет БД?
Дополнено (3). Искать заново - ресурсоёмко. Не хочу.
Дополнено (4). Дабы избежать ***, я просто сделал повторный поиск (оказалось, что всё равно ищет очень быстро).

Xamil (Владислав Бугаев

Закэшировать на сервере или искать по новой, если число пользователей сайта не очень велико.

wowan1

Один вариант каждый раз выполнять поиск по новой. Второй - сохранять результаты например в базу.

Epsiloncool (Epsilon S

Как правило чаще всего при поиске делают так. В конце SQL-запроса дописывают "… Limit N, 10", где N - это номер первого результата на текущей странице, а 10 - это количество результатов, которое на каждой странице Вы хотели бы отобразить.

Если номер страницы передаётся в GET (то есть прилеплен к URL в виде? Page=K), то N очень просто посчитать

Таким образом, не нужно никуда сохранять результаты поиска, а просто при клике на ссылку с номером страницы рассчитывать N и выполнять поиск с limit'ом.

ise-dvp

В MySQL есть хорошая штука Limit X, Y.

например, SELECT * FROM table LIMIT 5, 10;

Гость

лучший ответ Очень просто.
искать каждый раз заново, помещать выдачу поиска в ассоциативный массив, а потом итеративно проходить по массиву с помощью foreach
но с условием, что если переменная а больше или равна числу записей, которое нужно пропустить(его берёте из get-запроса), то эта запись идёт на вывод. При этом с каждым новым витком foreach выполняется инкремент переменной а.
То есть, передал пользователь в GET, скажем 5, тогда foreach проходит первые пять записей, не удовлетворяющих условию $a >= $_GET['a'] и только с шестой начинает вывод.

Jokermutq

Как вариант можешь передавать свой список найденных элементов через адресную строку типа
script.php? итд где w разделительный символ
и дальше берешь $ids=$_REQUEST['id'];
дальше парсишь эту строку и получаешь свой список
для удобства напиши отдельную функцию
и еше продумай как упорядочивать найденное чтобы алгоритм не выдавал тебе повторений

Epsiloncool (Epsilon S

Если нет базы, тогда сохраняете результаты поиска в файл, имя ему даёте рандомное, чтобы не совпало для разных пользователей. Затем, если надо делать постранично, просто грузите этот файл, вытаскиваете из него кусок в 10 результатов начиная с N-ного результата (имитация limit) и выводите.

Имя файла можно передавать в GET

Недостаток - будет создано много временных файлов с результатами поисков. Можно в имя файла заложить timestamp (результат выполнения функции time(. И раз в сутки проходиться по папке с этими файлами и убивать те, что старше суток.

Гость

Каждый раз писать всё в файлы - ещё более ресурсоёмко.
Прислушайтесь: решение с массивом это проще и удобнее.

Гость

У вас два варианта - либо поиск заново с переданными лимитами (то есть По сути номером страницы, которую нужно отобразить), либо при первом поиске кешировать результат в файл (имя файла можно получить хешированием входящих данных) и затем читать этот кеш. Расходы на чтение/запись значительно меньше, чем на перепоиск, да и такой кеш могут одновременно использовать несколько пользователей. Любые другие варианты дадут те же издержки, но могут огранить хранение доступом только одному пользователю (например, в случае сессии - все равно в файле храниться будет).

Еще вариант - memcached. Кеширование будет производиться на сервере memcache в оперативной памяти, так что доступ может быть еще быстрее. Из минусов - объем кеша очень ограничен.

Лучше всего скомбинировать эти два варианта - долгий кеш в файловой системе и наиболее частые запросы кешируются в memcached.

valinurovam

Почему нельзя просто результаты поиска сохранить в виде массива в сессию. Сделать paginator и показывать только то, что нужно.
Принцип, такой же что и с базами данных. Просто вместо таблицы БД у тебя будет массив. Чем не таблица? Я бы сделал так.

boris_borman

Друзья мой, не всё так просто, как вы пишите!
Я тоже столкнулся с этой довольно распространенной проблемой.
1. Решение с MySQL'евским limit'ом не подходит напрямую, так как Сами условия поиска не сохраняются при передаче запроса через GET. Поэтому здесь нужно что-то дополнительное думать.
2. Другие решения с сохранением результатов тоже не самые замечательные:
- сохранение в сессию или в куки приводит к тому, что при повторном поиске сразу выводятся результаты по старым условиям поиска.
- на сервере хранить ещё более геморно и не рационально.

Я знаю, что браузер показывает результат интерпретации кода на сервере. Но неужто так трудно научить браузер игнорировать к примеру определенный элемент, по типу того, как это делает адблок, только произвольно.

чтобы после обновления они оставались

После обновления чего?
Если ты хочешь внести изменения в код, хранящийся не на твоём сервере, это невозможно в силу того, что у тебя нет прав на запись туда.
Если ты хочешь внести изменения в код, хранящийся на твоём сервере, это невозможно в силу того, что многие страницы имеют динамический контент, такие страницы составляются на сервере, а браузер отображает готовый вариант, изменения в который вносить бессмысленно — та страница, которую ты видишь в данный момент, уникальна. Она может выглядеть по-другому у другого пользователя или даже у тебя, если её обновить. Браузеры не доросли, и вряд ли дорастут то того, чтобы вносить необходимые изменения в шаблоны, БД и т. д.
И да, Firefox — не редактор, а обозреватель.
Кстати, хочу заметить, что по Ctrl+S сохраняется страница с учётом изменений в Инспекторе.

После обновления страницы.

Как сделать так, чтобы изменения в Инструментах разработчика браузера сохранялись после перезагрузки страницы

Сделанные изменения пропадают сразу после перезагрузки страницы. Если вам нужно, чтобы изменения кода, сделанные в Инструментах разработчика браузеров, сохранялись после перезагрузки страницы, то данная статья расскажем вам, как это сделать на примере Google Chrome (Chromium).






Как отменить Overrides (локальные переопределения)


Как при открытии сайта не использовать определённые файлы скриптов или стилей

Если вы хотите, чтобы при входе на сайт не задействовался один или более файлов, то добавьте этот файл в Overrides и полностью удалите его содержимое — то есть будет применяться пустой файл, что фактически означает его удаление.

Как добавить скрипт или стили при открытии сайта

Как сохранить изменения в коде на сайте?

как сохранить изменения в html
Здравствуйте, мне надо бы поменять кое что на сайте, в том плане, чтобы, когда я заходил на сайт.

Как создать форму для редактирования и изменения документов на сайте?
как создания форму для редактирования и изменения докементов на сайте что бы каждый желающий мог.

Подскажите, как сохранить изменения в коде?
Подскажите, как сохранить изменения в коде? Ну например, меня цвет написанного текста, или делаю.

О свойстве contenteditable: как сохранить изменения в исходном коде?
Данное свойство, будучи установленным как "true", дает возможность осуществлять редактирование.

В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.

Сохраняемые данные формы 1С

У любой управляемой формы можно настроить сохранение данных реквизитов формы. Это значит, что форма сохранит данные введенные в поля, которые соответствуют реквизитам, при закрытии формы, а при последующем открытии формы информация в этих полях восстановятся автоматически.

Например, у меня на форме обработки имеются поля, данные в которых сохраняются при закрытии формы и восстанавливаются при последующем открытии.

Форма обработки 1С

Это поля Контрагент и Цена.

Для того, чтобы на управляемой форме данные из соответствующих реквизитов сохранялись, необходимо выполнить следующие действия.

 Свойство управляемой формы 1С Автоматическое сохранение данных в настройках

Свойство Сохранить реквизитов управляемой формы 1С

После этих действий, данные у отмеченных реквизитов будут сохраняться.

Хранилище настроек в 1С

Вышеприведенный способ позволяет сохранять последние данные, с которыми работали на форме. Но, могут возникнуть ситуации, когда нужно будет сохранять какую-то произвольную комбинацию значений реквизитов, а потом восстановить её. Если рассматривать ситуацию выше, то это может быть комбинация контрагента и цены: для одного контрагента одна цена, для другого другая и т.д.

Свойство управляемой формы Хранилище данных настроек

Свойство Сохраняемые данные реквизита управляемой формы

Команды управляемой формы Сохранить параметры и Восстановить параметры

Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.

Команда управляемой формы Сохранить параметры

Команда управляемой формы Сохранить параметры

И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.

Команда управляемой формы Восстановить параметры

Команда управляемой формы Восстановить параметры

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

Читайте также: