Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отправка данных из формы (https://javascript.ru/forum/misc/28623-otpravka-dannykh-iz-formy.html)

The special one 27.05.2012 12:48

Отправка данных из формы
 
Здравствуйте уважаемые программисты! Возникла проблема. Существует некая форма из поля для ввода текста и кнопки "отправить". Я ввожу в текстовое поле значение и нажимаю на кнопку, после чего переменная отправляется на сервер методом пост и сохраняется. Перезагружается страничка, снова создается форма с пустым полем для ввода текста и кнопкой, и я ввожу новое значение, которое снова сохраняется на сервере. Проблема в том, что когда я отправляю значение а потом нажимаю F5, то снова отправляется это же значение второй раз. Как мне сделать так, чтоб при обновлении страницы данные не передавались повторно.

Kolyaj 27.05.2012 13:41

Если запрос get, то не должно ничего добавляться, на то он и get (не должно, в смысле не надо так делать, а не в смысле не должно бы).
Если запрос post, то не надо на него отвечать контентом, лучше делать редирект на get.

The special one 27.05.2012 14:17

Сделаю просто: проверю, если переменная уже записана и пришла второй раз, то повторно сохранять ее не буду.

Как узнать, кто мне карму плюсанул?

melky 27.05.2012 14:43

нажать на "профиль" под аватаркой. или вправо-вверху нажать на "навигация" и там "профиль"

The special one 27.05.2012 15:05

Цитата:

Сообщение от melky (Сообщение 176847)
нажать на "профиль" под аватаркой. или вправо-вверху нажать на "навигация" и там "профиль"

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

melky 27.05.2012 18:50

Цитата:

Сообщение от The special one (Сообщение 176857)
Там написано за какую тему, какого числа, сколько очков, но не написано кто. Я так понимаю автор темы плюсанул, но мог плюсануть любой. Короче не понятно.

ааа.. недавнее нововведение.. это был Maxmaxmахimus в теме самонаводка в игре

The special one 27.05.2012 20:29

На php форуме подсказали решение, нужно добавить строку:
<?
header('Location'.$_SERVER["REQUEST_URI"]);
?>


Цитата:

Сообщение от melky (Сообщение 176917)
ааа.. недавнее нововведение.. это был Maxmaxmахimus в теме самонаводка в игре

А как ты узнал?

observer 27.05.2012 21:15

Цитата:

Сообщение от The special one (Сообщение 176822)
Проблема в том, что когда я отправляю значение а потом нажимаю F5, то снова отправляется это же значение второй раз. Как мне сделать так, чтоб при обновлении страницы данные не передавались повторно.

А кто вам мешает добавить некий уникальный хэш к форме и сохранять только если приходит первый раз?

The special one 27.05.2012 21:47

Цитата:

Сообщение от observer (Сообщение 176977)
А кто вам мешает добавить некий уникальный хэш к форме и сохранять только если приходит первый раз?

Немного не понял, что значит (как) добавить уникальный хэш к форме?

observer 27.05.2012 22:07

Цитата:

Сообщение от The special one (Сообщение 176995)
Немного не понял, что значит (как) добавить уникальный хэш к форме?

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

<input type="hidden" name="uuid" value="550e8400-e29b-41d4-a716-446655440000" />

Сделайте поле в БД и пишите туда значение каждый раз, при получении полей. Это поможет от перезаписи при обновлении страницы.

Но как уже заметили выше, это можно сочетать с возвратом на исходную страницу.

Kolyaj 27.05.2012 22:48

Цитата:

Сообщение от The special one
На php форуме подсказали решение, нужно добавить строку:
<?
header('Location'.$_SERVER["REQUEST_URI"]);
?>

Вы просто читать не умеете
Цитата:

Сообщение от Kolyaj
Если запрос post, то не надо на него отвечать контентом, лучше делать редирект на get.


observer 28.05.2012 00:32

Цитата:

Сообщение от Kolyaj (Сообщение 177035)
Если запрос post, то не надо на него отвечать контентом

Если ошибок в форме нет и все ок :-).

Человек, подсказавший про перенаправление (через отправку заголовка), забыл, что рекомендуется указывать пусть с хостом и протоколом. Плюс, двоеточие забыл указать.

Получится что-то типа того:
Код:

$location = getenv('SERVER_PROTOCOL')."://".getenv('HTTP_HOST').getenv('REQUEST_URI');

header("Location: $location");
exit;


The special one 28.05.2012 06:22

Это все правильно. Плюсую.


Часовой пояс GMT +3, время: 10:24.