Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: переадресация при повторной отправке post-формы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если после заполнения формы обновить страницу, то вылезит "Повтор/Отмена".. при повторе добавляется ещё один раз и прочее...
Как с этим бороться?  
Есть вариант: ставить рефреш - <script>window.location='URL'</script>
Есть ли вариант обойтись без JS? Кто как с этим борится?
Можно ли "очистить" POST от переменных, хранящихся в нём?




Уточнил название, было просто "PHP". — Svarga.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 18:58 24-07-2004 | Исправлено: Svarga, 08:04 26-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SafeWay

Цитата:
Есть ли вариант обойтись без JS? Кто как с этим борится?  

перекидывать с помощью заголовков.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:18 24-07-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
А зачем? Можно просто сделать проверку, и если такая инфа уже добавлена в базу, то на повторе обрубать пользователя. Так надежнее.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 19:57 24-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAGISTRATE

Цитата:
А зачем? Можно просто сделать проверку, и если такая инфа уже добавлена в базу, то на повторе обрубать пользователя. Так надежнее.

затем, чтобы не было больше окна браузера о том, посылать ему снова данные или нет.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:59 24-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Тобиж, если
if($_POST[action] = "add"){
mysql_query("bla bla bla");
...?
 
}
 
где ...? - Header("Location: url"); ?

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 22:22 24-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SafeWay

Цитата:
где ...? - Header("Location: url"); ?

после того, как сделал все, что нужно.. кидаешь header, а после него exit, чтобы скрипт ничего больше не пытался выдать.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:24 24-07-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Все равно лучше всегда делать проверку.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 22:45 24-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAGISTRATE

Цитата:
Все равно лучше всегда делать проверку.

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:17 24-07-2004 | Исправлено: Cheery, 23:19 24-07-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
А что другой человек будет писать то же самое? Такой же текст, и-мейл или тему сообщения... Это я к примеру.
 
Ну конечно, ничего ему не мешает, но такое ведь не желательно, я про то, что например такие глобальные поля сравнивать как юзер или и-мейл... Все будет в порядке.  
 
А если не полениться, то можно и индификатор присваивать. Оно ведь не так уж и долго пишеться, зато защита хоть какая-то.


----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 01:19 25-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAGISTRATE

Цитата:
А что другой человек будет писать то же самое? Такой же текст, и-мейл или тему сообщения... Это я к примеру.

запросто ) просто фраза "Привет" или что то "Мне нравится твой сайт"  
часто же смотрят, что писали до этого и подсознательно могут написать тоже самое.. это я тоже так.. к примеру но в целом - решать автору

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:27 25-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Для уверенности:
if($_POST[action] = "add"){  
mysql_query("bla bla bla");  
$id = LAST_INSERT_ID();
Header("Location: index.php?page=news&id=$id");  
exit;
}  
 
Обязательно ли в Header полный url?

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 01:42 25-07-2004
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SafeWay

Цитата:
Обязательно ли в Header полный url?

нет, если index.php в той же дире.

Цитата:
if($_POST[action] = "add"){  

синтаксис когда выучишь??  
if($_POST[action] == "add")

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:44 25-07-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SafeWay, если у тебя используется механизм сессий, то кода
Header("Location: index.php?page=news&id=$id");
для нормального их функционирования будет недостаточно.
hint: проверь работу с выключенными куками.
Лекарство: FAQ: session
PS: и синтаксис учи - строки в PHP закавычиваются, а то, что ты написал, генерит нотис, если константа action у тебя не определена.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 02:17 25-07-2004 | Исправлено: SiMM, 02:19 25-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
случайная опечатка, писал тебе как пример... в сам скрипт это ещё не вносил...
 
Добавлено
if($_POST['action'] == 'add'){
             $string = $_SERVER[REQUEST_URI];
             Header("Location: $string");
             exit; }
 
Всё равно жму рефреш и вылазит подтверждение...

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 03:27 25-07-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$string = $_SERVER[REQUEST_URI];
Опять случайная опечатка? Cut&Paste пользоваться не пробовал?
По теме - воспользуйся любым "подслушивальщиком" HTTP-заголовков (например, используй IEWatch, HTTPwatch, ieHTTPHeaders или Proxomitron) и посмотри, что реально приходит браузеру от сервера. Хотя
Цитата:
то вылезит "Повтор/Отмена"
звучит довольно странно - может дело в настройках браузера.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 09:23 25-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SiMM

Цитата:
$string = $_SERVER[REQUEST_URI];

А что тебе тут не нравится? Тут я проверял на работоспособность:

Цитата:
/test.php?dawda
 
Так что не вижу проблемы с этой стороны.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 13:46 25-07-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А что тебе тут не нравится?
Мне не нравится то, что ты отказываешься от изучения синтаксиса. При чём, элементарного. Запомни раз и навсегда - в PHP строки нужно закавычивать, а в твоём случае - REQUEST_URI - некая (не)определённая пользователем константа. Если это не доходит - бегом в мануал.
Мне, конечно, по барабану - но рано или поздно ты наступишь на грабли - либо по своей вине, либо благодаря разработчикам, которые наконец исправят поведение PHP в подобных ситуациях.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 14:30 25-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SiMM
тьфу, =( кавычки я ставить что то и вправду забываю, точнее раньше при массивах и прочих вообще не ставил, сейчас стараюсь исправляться...Спасибо, что указал...
 
Добавлено
Но сама проблема осталась, в смысле вылазит при обновлении подтверждение на повторную отправку...

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 17:03 25-07-2004
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
код покажи, всмысле все что ты там в конце концов написал

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 17:27 25-07-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проблему по сути нашёл, а именно не срабатывает Header:
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/bk/public_html/portal/class/class.template.inc:244) in /usr/home/bk/public_html/portal/inc/news.php on line 66

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 18:03 25-07-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: переадресация при повторной отправке post-формы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru