powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подтвердите повторную отправку формы
16 сообщений из 16, страница 1 из 1
Подтвердите повторную отправку формы
    #38916903
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма, которая находится по адресу www.site.ru/test/.
По кнопке она отправляется на сервер на тот же адрес.

Там происходит обработка отправленных данных, после чего - редирект на промежуточный php-файл и потом обратно наwww.site.ru/test/, гдеотображается результат обработки данных (сообщение об успешности операции).

Промежуточный файл - для эксперимента и для того, чтобы "убить" POST. Дальше если нажать кнопку "Назад" в браузере, хром выдает:
"Подтвердите повторную отправку формы". Как от этого избавиться программными средствами? Нужно увидеть форму после нажатия на стрелку "назад" без всякой повторной отправки.

Заранее спасибо.
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916915
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urukhay, js + location.replace() должен помочь
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916916
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пример можно, если не сложно? )
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916925
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urukhay,
перезапросите страницу через Header
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916938
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urukhayА пример можно, если не сложно?
Вместо header('Location: http://example.com/somepage') отдаешь html с JS вызовом location.replace('http://example.com/somepage')
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916968
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем я понимаю смысл сего. Сделал - не помогло. Может не так сделал.
Описываю:

Есть адрес www.site.ru/form/. На нем форма:
Код: html
1.
2.
3.
4.
<form method="post" action="test.php">
<input name="aaa">
<intput type="submit" value="Send">
</form>



В файле test.php

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
echo '
<html>
<head>
	<script type="text/javascript" language="javascript">
		location.replace("www.site.ru/form/");
	</script>

</head>
<body>

</body>
</html>
';



Отправили форму, вернулись на тот же адрес, увидели сообщение об успешности операции. Все ок.
Нажимаю стрелку назад - и опять предложение повторно отправить форму.

Насколько я понимаю, когда происходит возврат на предыдущий адрес (с формой), браузер видит наличие формы,
как-то определяет, что она была отправлена и требует ее повторно отправить. Если это так, чем тогда может помочь replace()?
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38916995
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Браузер ещё и редиректы помнить умеет. В этом смысле замена URL яваскриптом не является редиректом и не должна быть запомнена браузером.
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38917001
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, только что у меня не так?
Проблема пока не решилась ...
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38917026
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urukhay,

<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
header("location:{$_SERVER['PHP_SELF']}");
}
echo '
<html>
<head>
<script type="text/javascript" language="javascript">

</script>

</head>
<body>
HERE
</body>
</html>
';

?>
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38917883
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergey,
помогло, спасибо огромное!

А чем отличаются следующие 2 строки кода?

Код: php
1.
2.
if( $_SERVER['REQUEST_METHOD'] === 'POST' )
if( isset( $_POST[ 'some_var' ] ) )



Просто в первом случае работает так, как надо,
а во втором - появляется описанная проблема.
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918021
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urukhay,
тем, что одна проверяет каким методом были получены данные, а вторая на существование переменной.
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918083
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично )
Но почему в одном случае работает как надо, а в другом - нет?
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918179
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urukhay,
полный код?
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918284
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну полный код я привести не смогу, т.к. там довольно здоровая функция.
Но общая суть такая:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if( !empty( $_SESSION[ 'result' ] ) )
{
    echo $_SESSION[ 'result' ];
    unset(  $_SESSION[ 'result' ] );
}
elseif( !empty( $_POST[ 'submit' ] ) )
{
    /* обрабатываем данные, пишем их в БД */
    $_SESSION[ 'result' ] = 'Данные успешно сохранены';
    header( 'Location: www.site.ru/test.php' ] );
}
else
{
    echo '
        <form method="post" action="test.php">
            <input type="text" name="fio">
            <input type="submit" name="submit" value="Submit">
        </form>
    ';
}



Код набирал руками, поэтому могут быть очепятки ))

Сам скрипт работает, форма отправляется по кнопке, данные пишутся в бд, скрипт редиректит сам на себя, юзер на экране видит сообщение об успешности операции. Но вот если после этого он в браузере нажимает кнопку "назад", хром выдает "Подтвердите повторную отправку формы". Если строку

Код: php
1.
elseif( !empty( $_POST[ 'submit' ] ) )


заменить на Вашу:
Код: php
1.
elseif( $_SERVER['REQUEST_METHOD'] === 'POST' )


нажатие кнопки "назад" в браузере приводит к возврату к форме, т.е. то, что надо.
Вот и не пойму, как так!
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918509
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urukhay,
все работает:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
if( isset( $_SESSION[ 'result' ] ) )
session_start();
{
    echo $_SESSION[ 'result' ];
    unset(  $_SESSION[ 'result' ] );
}
elseif( isset( $_POST[ 'submit' ] ) )
{
    /* обрабатываем данные, пишем их в БД */
    $_SESSION[ 'result' ] = 'Данные успешно сохранены';
    echo "Heare";
    header( "Location:{$_SERVER['PHP_SELF']}"  );
}
else
{
    echo '
        <form method="post" action="test.php">
            <input type="text" name="fio">
            <input type="submit" name="submit" value="Submit">
        </form>
    ';
}
...
Рейтинг: 0 / 0
Подтвердите повторную отправку формы
    #38918948
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудеса ...
session_start() у меня, естественно есть, просто не привел тут.
Единственное нет echo 'Here';

Все остальное - тоже самое!
Лан, черт с ним, сейчас работает и кул.
Может кеш какой ...

Спасибо большое за помощь!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подтвердите повторную отправку формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]