[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отмена повторной отправки формы
l@pteff
Здравствуйте, на странице page1.htm есть форма, отправляющая данные на страницу page2.htm:

<form action="page2.htm">
<input
name="my-input" id="my-input" />
<input
type="submit" value="Ok!" />
</form>


После того как данные отправлены и приняты, обновляю страницу page2.htm и Firefox запрашивает:
Цитата

Чтобы отобразить эту страницу, Firefox должен отправить информацию, которая повторит любое ранее произведённое действие (например, запрос на поиск или онлайн-покупка).

и данные отправляются на страницу ещё раз. Как можно отменить повторную отправку данных?



Спустя 4 минуты, 14 секунд (14.11.2011 - 00:21) Игорь_Vasinsky написал(а):
header("location:".$_SERVER['PHP_SELF']);

после успешной отправки формы и до любого вывода.

Спустя 3 минуты, 28 секунд (14.11.2011 - 00:25) imbalance_hero написал(а):
l@pteff
Редирект + exit.

Спустя 2 минуты, 12 секунд (14.11.2011 - 00:27) Игорь_Vasinsky написал(а):
exit плохой вариант, даже не известно что н там выводит- не выводит

Спустя 25 минут, 10 секунд (14.11.2011 - 00:52) lans8097 написал(а):
Ну тут всего-лишь 2 варианта
1 как сказано выше через header
Но если проблемы с загаловками то можно в тупую
<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=урл">

Спустя 35 минут, 1 секунда (14.11.2011 - 01:27) Игорь_Vasinsky написал(а):
это метатег, он сработаеть сразу как будет вызван, а обработка у чела может быть в теле документа.. ты же не знаешь

Спустя 43 секунды (14.11.2011 - 01:28) l@pteff написал(а):
Не совсем получается. Объясню поподробнее.
На форуме есть страница new_theme.htm для создания новой темы с формой:

<form action="theme.htm" method="post">
<input
id="topic_name" name="topic_name" />
<textarea
id="message" name="message" cols='80' rows='20'> </textarea>
<input
type="submit" id="new_subm" value="Отправить" />
</form>


На принимающей странице theme.htm:

<input type="hidden" id="topic_name" name="topic_name" value="<?php echo $_POST['topic_name'] ?>" />
<input
type="hidden" id="message" name="message" value="<?php echo $_POST['message'] ?>" />

<script
type="text/javascript">
$(function() {
var topic_name = $('#topic_name').val();
var message = $('#message').val();

$.get('../php/new_theme.php', {topic_name:topic_name, message:message}, function(data) {
$('#answer_table').html(data);
});
});

На принимающей странице theme.htm должно выводиться название новой темы и сообщение.
В обработчике new_theme.php

/*
запросы
*/

echo '<tr><td>'.$row['topic_name'].'</td><td>'.$row['message'].'</td></tr>

Подскажите плиз, в каком месте прописать header("location:".$_SERVER['PHP_SELF']); Если ставлю в начале php-файла, то результаты запросов не выводятся на страницу.

Спустя 5 минут, 39 секунд (14.11.2011 - 01:34) lans8097 написал(а):
Цитата (Игорь_Vasinsky @ 13.11.2011 - 22:27)
это метатег, он сработаеть сразу как будет вызван, а обработка у чела может быть в теле документа.. ты же не знаешь

Ну может я нуб по этому и не вижу разници.
Лично я так делаю когда лень что-то пихать в верх сценария
Запрос выполнился если удачно пересылаем на эту-же страничку и избавляемся от post
Хотя может я не правильно понял вапрос

Спустя 8 минут, 47 секунд (14.11.2011 - 01:42) lans8097 написал(а):
Цитата (l@pteff @ 13.11.2011 - 22:28)
Не совсем получается. Объясню поподробнее.
На форуме есть страница new_theme.htm для создания новой темы с формой:

<form action="theme.htm" method="post">
<input
id="topic_name" name="topic_name" />
<textarea
id="message" name="message" cols='80' rows='20'> </textarea>
<input
type="submit" id="new_subm" value="Отправить" />
</form>


На принимающей странице theme.htm:

<input type="hidden" id="topic_name" name="topic_name" value="<?php echo $_POST['topic_name'] ?>" />
<input
type="hidden" id="message" name="message" value="<?php echo $_POST['message'] ?>" />

<script
type="text/javascript">
$(function() {
var topic_name = $('#topic_name').val();
var message = $('#message').val();

$.get('../php/new_theme.php', {topic_name:topic_name, message:message}, function(data) {
$('#answer_table').html(data);
});
});

На принимающей странице theme.htm должно выводиться название новой темы и сообщение.
В обработчике new_theme.php

/*
запросы
*/

echo '<tr><td>'.$row['topic_name'].'</td><td>'.$row['message'].'</td></tr>

Подскажите плиз, в каком месте прописать header("location:".$_SERVER['PHP_SELF']); Если ставлю в начале php-файла, то результаты запросов не выводятся на страницу.

Покажи как ты встовляеш

Спустя 1 минута, 26 секунд (14.11.2011 - 01:44) l@pteff написал(а):

header("Location:".$_SERVER['PHP_SELF']);
/*
запросы
*/

echo '<tr><td>'.$row['topic_name'].'</td><td>'.$row['message'].'</td></tr>

Спустя 1 минута, 41 секунда (14.11.2011 - 01:45) lans8097 написал(а):
Цитата (l@pteff @ 13.11.2011 - 22:44)

header("Location:".$_SERVER['PHP_SELF']);
/*
запросы
*/

echo '<tr><td>'.$row['topic_name'].'</td><td>'.$row['message'].'</td></tr>

так канешно оно не будит работать )
Логика какая ?
Загрузили дошли до хеада и пошли по адресу )
хеадер нужно вызывать через условие к примеру если запрос прошол успешно идём через header если нет показываем заново форму

Спустя 15 секунд (14.11.2011 - 01:46) Игорь_Vasinsky написал(а):
biggrin.gif biggrin.gif biggrin.gif
тема в JS


lans8097
ему нужно остаться на этой же странице, если использовать мететег - его зациклит и браузер ляжет.


ТС - тебе редирект на JS (на саму себя) + записать куки чтобы не повторить редирект безконечно.


Мы то тебе PHP довали, а он в html - не сработает

Спустя 3 минуты, 51 секунда (14.11.2011 - 01:50) Игорь_Vasinsky написал(а):
Цитата
Если ставлю в начале php-файла, то результаты запросов не выводятся на страницу.


Так php илиhtm у тебя, данные конеш не вывидуться - header их обнуляет. Тебе в сессии их хранить придётся.


Спустя 23 минуты, 10 секунд (14.11.2011 - 02:13) imbalance_hero написал(а):
l@pteff
Тут ты уже выбирай, либо результат людям давай, либо редирект! Если редирект, то на новой странице принимай, что это был редирект и выводи нужную инфу.

Спустя 16 часов, 47 минут, 34 секунды (14.11.2011 - 19:00) l@pteff написал(а):
На принимающей странице theme.htm делаю так:

<input type="hidden" id="topic_name" name="topic_name" value="<?php echo $_POST['topic_name'] ?>" />
<input
type="hidden" id="message" name="message" value="<?php echo $_POST['message'] ?>" />

<input
type="hidden" id="location" value="" />

<script
type="text/javascript">
$(function() {
$.get('../php/new_theme.php', {topic_name:topic_name, message:message}, function(data) {
$('#answer_table').html(data); <!--Возвращаем ответ от сервера-->
$('#location').val(window.location = 'theme.htm'); <!--Затем выводим на странице адрес для перехода (на себя)-->
});
});
</script>

Однако браузер ложится. Подскажите, как можно исправить?

Спустя 2 минуты, 18 секунд (14.11.2011 - 19:03) Игорь_Vasinsky написал(а):
Цитата
$('#location').val(window.location = 'theme.htm'); <!--Затем выводим на странице адрес для перехода (на себя)-->


у тя бесконечный редирект. раз уж у тя php работает в *.htm

То добавляй GET в урл - если get есть - то редирект не делай.

Спустя 3 часа, 38 минут, 49 секунд (14.11.2011 - 22:41) l@pteff написал(а):
Игорь_Vasinsky, спс за помощь, осталась одна проблема:
get-параметры отправляются на сервер после каждой перезагрузки.

if (window.location.search!="") {
var topic_name = $('#topic_name').val();
var message = $('#message').val();

$.get('../php/new_theme.php', {topic_name:topic_name, message:message}, function(data) {
$('#answer_table').html(data);
});
}

Т.е. получается такой баг: юзер создает новую тему на форуме, затем на странице с темой видит своё сообщение, перезагружает страницу-и его сообщение появляется уже в двойном экземпляре, жмет ещё раз Ctrl+R-в тройном и т.д.
Как можно это исправить? заранее благодарен

Спустя 57 минут, 6 секунд (14.11.2011 - 23:39) Guest написал(а):
if (window.location.search!="") {                  
var topic_name = $('#topic_name').val();
var message = $('#message').val();
var id_topic = $('#id_topic').val();

$.get('../php/new_theme.php', {id_topic: id_topic, topic_name:topic_name, message:message}, function(data) {
$('#answer_table').html(data);
});
}


На стороне сервера проверка существования id, можно ещё проверять на стороне клиента существования не пустого поля id и из этого выходить что форма является новым сообщением. А вообще то эти вещи должен и обязан проверить сервер.

Спустя 10 минут, 43 секунды (14.11.2011 - 23:49) Guest написал(а):
То есть когда пользователь делает "Т.е. получается такой баг: юзер создает новую тему на форуме, затем на странице с темой видит своё сообщение, " тогда своё сообщение должно снабдится уникальным номером - ID топика.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.