[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как отменить повторную отправку формы?
solomon
Привет! Подскажите, пожалуйста, как отменить повторную отправку формы при нажатии на f5 или кнопки обновить, если форма и обработчик находятся в одном файле? Данные пишутся в базу. Разделить на 2 файла не могу, т.к. данные запоминаются после сабмита, чтобы пользователь видел что он ввел - хотя если есть какой-то другой вариант запоминания, поделитесь пожалуйста.



Спустя 36 секунд (28.10.2011 - 14:42) Семён написал(а):
Сделать редирект на другую страницу

Спустя 1 минута, 12 секунд (28.10.2011 - 14:43) Winston написал(а):
mysql_query("INSERT...");
header('Location: ' . $_SERVER['PHP_SELF']);
exit;

Спустя 42 секунды (28.10.2011 - 14:44) caballero написал(а):
Цитата
Сделать редирект на другую страницу


можно на ту же самую
когда придет GET после POST уже никто повторную отправку не запросит

Спустя 1 час, 12 минут, 36 секунд (28.10.2011 - 15:57) cyberside написал(а):
Можно сделать элементарную капчу, например...

Спустя 19 минут, 21 секунда (28.10.2011 - 16:16) caballero написал(а):
Цитата
Можно сделать элементарную капчу, например.

а это тут каким боком
нужно убрать повторный вызов формы а не показывать капчу

Спустя 45 минут, 21 секунда (28.10.2011 - 17:01) solomon написал(а):
mysql_query("INSERT...");
header('Location: ' . $_SERVER['PHP_SELF']);
exit;


если так сделать, то все введенные данные слетают после нажатия на сабмит

Спустя 4 минуты (28.10.2011 - 17:05) Игорь_Vasinsky написал(а):
нет. данные ты принимаешь, обрабатываешь, делаешь запрос в БД и потом только при успешном запросе - делаешь редирект - тем самым опусташаешь весь POST/

Спустя 10 минут, 36 секунд (28.10.2011 - 17:16) solomon написал(а):
это понятно, данные приходят, все записывается. только после того как произошла запись, я наоборот не хочу опустошать POST, чтобы пользователь видел, что у него сохранилось

Спустя 2 минуты, 6 секунд (28.10.2011 - 17:18) Winston написал(а):
Цитата (solomon @ 28.10.2011 - 17:16)
не хочу опустошать POST, чтобы пользователь видел, что у него сохранилось

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

Спустя 6 минут, 5 секунд (28.10.2011 - 17:24) Игорь_Vasinsky написал(а):
Winston
если ошибка - то можно бональный

history.back(1);


данные в форме остануться.

Спустя 1 минута, 15 секунд (28.10.2011 - 17:25) solomon написал(а):
а если без ошибок, может тогда сделать дополнительную страничку типа "посмотреть что у меня получилось" и в нее выводить то, что он внес? как считаете?

просто хотелось чтобы все на одной странице было, т.к это что-то типа админки, много данных будет вносить

Спустя 18 минут, 56 секунд (28.10.2011 - 17:44) Игорь_Vasinsky написал(а):
можно перед записью сформировать страничку для предосмотра -> если ок -> писать

Спустя 9 минут, 48 секунд (28.10.2011 - 17:54) solomon написал(а):
заранее извиняюсь, за глупые вопросы, просто это мой первый проект, учусь налету..

получается так?:

1. страница1 - пользователь вносит данные
2. проверяю данные из формы

если заполнено правильно:
- данные отправляю на страницу2, на которой пользователь видит все, что он внес
- пользователь подтверждает сохранение
- данные записываю в базу
- перенаправляю пользователя на страницу1

если не правильно:
- выдаю на странице1 сообщение об ошибке, при этом все внесенные данные сохраняются
- исправляет и перехожу к п. "заполнено правильно"

Спустя 16 минут, 49 секунд (28.10.2011 - 18:11) Игорь_Vasinsky написал(а):
1. Форма
2. Принял данные проверлил соответствие -> вывел предосмотр (если нет - вернул обратно)
3. запись в БД


Хотя я бы и в одной сделал всё.

Спустя 2 минуты, 58 секунд (28.10.2011 - 18:14) solomon написал(а):
Делаю проверку, если неверно заполнено переходит со страницы с формой на страницу с обработчиком, выдается мое сообщение "Неправильно заполнены поля" и ошибка:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\...

Код такой:

if(){
....
mysql_query("INSERT...");
header("Location: add.php");
}
else {
echo "Неправильно заполнены поля";
header("Location: add.php");
}

В чем может быть ошибка?

Спустя 1 минута, 38 секунд (28.10.2011 - 18:16) solomon написал(а):
Цитата (Игорь_Vasinsky @ 28.10.2011 - 15:11)
Хотя я бы и в одной сделал всё.

В смысле предпросмотр выводить на странице1?

Спустя 3 минуты, 10 секунд (28.10.2011 - 18:19) Игорь_Vasinsky написал(а):
опять 25.

ну блин админов штоли попросить в шапке форума вписали:

перед header не ну жно делать вывод данных. echo, print, html. Нельзя.

можешь почитать про ob_start(), но лучше редиректь на JS

Цитата
В смысле предпросмотр выводить на странице1?


Да, если нет POST вывожу форму - есть POST - вывожу предосмотр, потом проверяю нажатие на submit и пишу в БД, но те это пока не надо.

Так научись писать.. потом уже.

Спустя 1 час, 29 минут, 46 секунд (28.10.2011 - 19:49) johniek_comp написал(а):
что бы после нажатия кнопки данные оставались в форме то пиши так
<input type="text" name="name" value="<?=$name?>">

<?= это одно и тоже что <? echo
$name она равна тому что отправляешь и останется после отправки формы

Спустя 15 минут, 48 секунд (28.10.2011 - 20:04) cyberside написал(а):

<?php
if(!isset($_POST['issend'])){
?>
<form method="post">
<
input type="submit" name="issend" />
<
form>
<?php
}
?>


Можно и так сделать...

Спустя 9 минут, 21 секунда (28.10.2011 - 20:14) Игорь_Vasinsky написал(а):
johniek_comp
Цитата
<?= это одно и тоже что <?

ну. и то и то у хостера может быть отключено biggrin.gif

Спустя 9 минут, 1 секунда (28.10.2011 - 20:23) solomon написал(а):
и еще сделал такую проверку:

isset($_POST['ws']) &&
isset($_POST['wf']) &&
isset($_POST['ds']) &&
isset($_POST['df']) &&
isset($_POST['int_1']) &&
isset($_POST['int_2']) &&
!
empty($_POST['int_1']) || ($_POST['int_2']) &&
!
empty ($_POST['ws']) || ($_POST['wf']) || ($_POST['ds']) || ($_POST['df'])


проверка на пустоту для int_1 и int_2 работает, а для ws, wf, ds, df не работает (отправляются пустые данные ws, wf, ds, df даже если ни одно из этих полей не заполнено). Если поменять местами вот так:


!empty ($_POST['ws']) || ($_POST['wf']) || ($_POST['ds']) || ($_POST['df']) &&
!
empty($_POST['int_1']) || ($_POST['int_2'])


то для ws, wf, ds, df работает, а для int_1 и int_2 не работает

В чем тут проблема?

Спустя 3 минуты, 53 секунды (28.10.2011 - 20:27) solomon написал(а):
смысл в том, чтобы хотя бы один int и хотя бы один из ws, wf, ds, d был заполнен

Спустя 12 минут, 53 секунды (28.10.2011 - 20:40) imbalance_hero написал(а):
solomon
Код оформляй [ php] тегами. Они над формой, под "выравниванием"(!).

Спустя 4 минуты, 27 секунд (28.10.2011 - 20:44) solomon написал(а):
Цитата (imbalance_hero @ 28.10.2011 - 17:40)
solomon
Код оформляй [ php] тегами. Они над формой, под "выравниванием"(!).

хорошо

Спустя 32 секунды (28.10.2011 - 20:44) imbalance_hero написал(а):
($_POST['int_2']) - проверка на true/false, в твоём случае даже пустая строка будет true.

Спустя 3 минуты, 17 секунд (28.10.2011 - 20:48) solomon написал(а):
и как можно подправить, чтобы заработало?

Спустя 39 минут, 4 секунды (28.10.2011 - 21:27) Игорь_Vasinsky написал(а):
!empty($_POST['int_1']) || !empty($_POST['int_2'])  &&
!
empty ($_POST['ws']) || !empty($_POST['wf']) || !empty($_POST['ds']) || !empty($_POST['df'])


так чтоли?

Спустя 5 минут, 27 секунд (28.10.2011 - 21:32) YVSIK написал(а):
solomon!!! ну может вначале научится выводит то что ввел ?
сделай так, выведи что ввел в поля что это точно было видно даже тебе !!
потом если что не так уже смотрим ччто написано , где есть той баг,
если все не помогает, этот вывод, упрощай код и наращивай его опять с выводом
и только потом ьерись отправлять

примерно таким путем ТоварищЬЬЬ!!! smile.gif

Спустя 1 минута, 6 секунд (28.10.2011 - 21:33) solomon написал(а):
так тоже не работает.
ws, wf, ds, d - оставляю пустыми, а запись в бд все равно проходит

Спустя 2 минуты, 35 секунд (28.10.2011 - 21:36) YVSIK написал(а):
solomon так надо сделать проверкой если поля не заполнены, переправлять не в базу, а назад, для продолжения ввода в поля !!
нут не знаю как ещё обьяснить то если поля не заполнены то отправляй не ксрипту отправки а на страницу ввода!!

Спустя 2 минуты, 27 секунд (28.10.2011 - 21:38) Игорь_Vasinsky написал(а):
Заполни форму, отправь её -> в обработчике напиши

echo '<pre>' . post_r($_POST, 1) . '</pre>';


что выдет - сюда выложи.

Спустя 1 минута, 49 секунд (28.10.2011 - 21:40) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 18:32)
solomon!!! ну может вначале научится выводит то что ввел ?
сделай так, выведи что ввел в поля что это точно было видно даже тебе !!
потом если что не так уже смотрим ччто написано , где есть той баг,
если все не помогает, этот вывод, упрощай код и наращивай его опять с выводом
и только потом ьерись отправлять

примерно таким путем ТоварищЬЬЬ!!!  smile.gif

конечно же выводил, вот вывод

Array
(
[ws] =>
[wf] =>
[ds] =>
[df] =>
[int_1] => 10
[int_2] =>
)

Спустя 2 минуты, 25 секунд (28.10.2011 - 21:43) Игорь_Vasinsky написал(а):
Так.. а теперь ещё раз - при каком условии данные в БД должны записаться?

Спустя 2 минуты, 18 секунд (28.10.2011 - 21:45) YVSIK написал(а):
solomon ты что вывел -то ? ты вывел код а что этот код в базу полетит?

Спустя 25 секунд (28.10.2011 - 21:45) solomon написал(а):
Если заполнено любое из этих полей: ws, wf, ds, df
и любое из этих полей: int_1, int_2

Спустя 4 минуты, 33 секунды (28.10.2011 - 21:50) Игорь_Vasinsky написал(а):
if((!empty($_POST['int_1']) OR !empty($_POST['int_2']))  AND (!empty ($_POST['ws']) OR !empty($_POST['wf']) OR !empty($_POST['ds']) OR !empty($_POST['df'])))

Спустя 35 секунд (28.10.2011 - 21:51) YVSIK написал(а):
ну если так !! режь последний огуреЦ !!
все с из нова !
заполняем форму ===раз
проверяем =====два
и тут условие куда отправлять
если форма не заполнена от отправляем(назад-же, сюда-же,) заполнить !!
если все правила тобой поставленные ВЫПОЛНЕНЫ!!!
только тогда разрешаем отправить в базу !

Спустя 5 минут, 53 секунды (28.10.2011 - 21:56) solomon написал(а):
Цитата (Игорь_Vasinsky @ 28.10.2011 - 18:50)
if((!empty($_POST['int_1']) OR !empty($_POST['int_2']))  AND (!empty ($_POST['ws']) OR !empty($_POST['wf']) OR !empty($_POST['ds']) OR !empty($_POST['df'])))

rolleyes.gif Так работает! Спасибо!

Спустя 1 минута, 38 секунд (28.10.2011 - 21:58) Игорь_Vasinsky написал(а):
Проанализируй этот момент, скобки не только в математических действия помогают wink.gif

Спустя 1 минута, 28 секунд (28.10.2011 - 21:59) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 18:51)
если форма не заполнена от отправляем(назад-же, сюда-же,) заполнить !!
если все правила тобой поставленные ВЫПОЛНЕНЫ!!!
только тогда разрешаем отправить в базу !

так я вроде ж это и пытаюсь сделать

Спустя 1 минута, 54 секунды (28.10.2011 - 22:01) solomon написал(а):
Цитата (Игорь_Vasinsky @ 28.10.2011 - 18:58)
Проанализируй этот момент, скобки не только в математических действия помогают wink.gif

Да уж, точно.. Если честно для меня пока программирование местами темный лес... Так что извините, если что blink.gif

Спустя 2 минуты, 22 секунды (28.10.2011 - 22:04) YVSIK написал(а):
solomon дык это же и есть условие ИФ ( if )
пускать или не пускать жирафа за заборРРРРРРРРРРРРРРР
смотрим тут!!!!!!!!!
http://www.irbis-team.com/15/1/4
тем а-)))))))))называется ТАК

Основы программирования

Спустя 8 минут, 39 секунд (28.10.2011 - 22:12) Игорь_Vasinsky написал(а):
solomon
Цитата
Если честно для меня пока программирование местами темный лес...

для меня тоже. biggrin.gif

Спустя 33 секунды (28.10.2011 - 22:13) solomon написал(а):
YVSIK
уже читаю )))

Спустя 1 минута, 38 секунд (28.10.2011 - 22:15) YVSIK написал(а):
solomon молодца!! а Игорь тебе высшую математику будет преподовать!!
он может !! он такой !! ИМХО!! wink.gif
Свернутый текст
и про скобки ты чет не совсем понятно выдал !! ну думаю апонент это понял!! biggrin.gif

Спустя 4 минуты, 38 секунд (28.10.2011 - 22:19) Игорь_Vasinsky написал(а):
Цитата
и про скобки ты чет не совсем понятно выдал !! ну думаю апонент это понял!!


Я логику разделил: соединил 2 условия ещё одним условием biggrin.gif

Спустя 13 минут, 43 секунды (28.10.2011 - 22:33) solomon написал(а):
еще такая штука: есть одно поле оно записывает в базу данные в формате TIME. Если поле не заполнено, то по умолчанию в mysql пишется 00:00:00. Меняю в настройках таблицы в mysql, чтобы по умолчанию писалось NULL, а mysql все-равно пишет 00:00:00. Как это можно победить?

Спустя 1 минута, 37 секунд (28.10.2011 - 22:35) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 19:15)
solomon молодца!! а Игорь тебе высшую математику будет преподовать!!
он может !! он такой !! ИМХО!!  wink.gif

На самом деле математика ох как пригодилась бы biggrin.gif У меня с ней не было дружеских отношений biggrin.gif

Спустя 5 минут, 31 секунда (28.10.2011 - 22:40) YVSIK написал(а):
Цитата
Как это можно победить?
это побеждается знаниями
постучись ко мне в аську
вот те коД
который выведет что те надо !!
<?php echo (date("Y:m:d")); ?>

запиши его в поле которое отправляет дату и в базу полетит согоднишняя дата !
и некоторые тонкости есть ещё ну это уже совсем из другого сериала !!

Спустя 4 минуты, 48 секунд (28.10.2011 - 22:45) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 19:40)
Цитата
Как это можно победить?
это побеждается знаниями
постучись ко мне в аську
вот те коД
который выведет что те надо !!
<?php echo (date("Y:m:d")); ?>

запиши его в поле которое отправляет дату и в базу полетит согоднишняя дата !
и некоторые тонкости есть ещё ну это уже совсем из другого сериала !!

А мне не надо сегодняшнюю дату. Это время, которое будет вбивать ручками пользователь. И есть ситуация когда пользователь вобьет 00:00:00. Так вот это надо так и записать. А вот если пользователь ничего не внес в базу надо записать значение отличное от 00:00:00, например, NULL

Спустя 3 минуты, 3 секунды (28.10.2011 - 22:48) YVSIK написал(а):
тогда поле не надо обозначать как тайм а просто поле как текстовое и будет тебе счастье и покой на ночь !! wink.gif

Спустя 4 минуты (28.10.2011 - 22:52) Игорь_Vasinsky написал(а):
solomon
У тя DATETIME стоит для ячейки? not null - если есть - то убери, и попробуй явно null передать для записи - если поле не заполнено или какое там у тя условие...

Спустя 11 минут, 47 секунд (28.10.2011 - 23:04) solomon написал(а):
YVSIK
точно :) спасибо!

добавил проверку времени:

$ws = ($_POST['ws']);
if (!preg_match('/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/', $ws))
{
echo "Время введено неправильно. Верный формат: 00:00 или пустое значение";
}


Не могу сообразить как разрешить пустое значение

Спустя 1 минута, 8 секунд (28.10.2011 - 23:05) solomon написал(а):
Игорь_Vasinsky
Стоит TIME. Ок попробую

Спустя 2 минуты, 55 секунд (28.10.2011 - 23:08) Winston написал(а):
Цитата (solomon @ 28.10.2011 - 23:04)
if (!preg_match('/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/', $ws))

Регулярку можно сократить
$ws = ($_POST['ws']);
if (!preg_match('/^([01]\d|2[0-3]):([0-5]\d)$/', $ws))
{
echo "Время введено неправильно. Верный формат: 00:00 или пустое значение";
return;
}

Спустя 16 секунд (28.10.2011 - 23:08) YVSIK написал(а):
solomon не определяй как тайм и ещё сократи в поле ввод по знакам количеству нужных ) и в базе определи как пример поле техт и тоже количеством заполнения вот и будет если поле не заполнено разреши или не разреши , ну то что тенадо будет !!

Спустя 8 минут, 9 секунд (28.10.2011 - 23:16) johniek_comp написал(а):
Winston
Цитата
Регулярку можно сократить


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

Спустя 3 минуты, 12 секунд (28.10.2011 - 23:19) YVSIK написал(а):
johniek_comp
Свернутый текст
это что такое !! это в тему ? написано johniek_comp
это зовется офтоп уже тебе об этом говорилось и по моему не раз!

Спустя 2 минуты, 39 секунд (28.10.2011 - 23:22) solomon написал(а):
А подскажите на последок как разрешить пустышку во времени? rolleyes.gif

Спустя 5 минут, 24 секунды (28.10.2011 - 23:27) YVSIK написал(а):
да просто не проверять !! если так хоча вдруг ))прогнать через регулярку и если скажем не так заполнена уничтожить все что в ней есть и пропустить
у тебя-же пропускалось как заполнение пустых полей и там ничего не-было !!

Спустя 3 минуты, 53 секунды (28.10.2011 - 23:31) solomon написал(а):
вот так со звездочкой не работает:


/^([01]\d|2[0-3]):([0-5]\d)*$/

Спустя 3 минуты, 31 секунда (28.10.2011 - 23:35) Winston написал(а):
Цитата (solomon @ 28.10.2011 - 23:22)
А подскажите на последок как разрешить пустышку во времени

Не понял, какую пустышку ?

Спустя 6 минут, 19 секунд (28.10.2011 - 23:41) solomon написал(а):
Цитата (Winston @ 28.10.2011 - 20:35)
Цитата (solomon @ 28.10.2011 - 23:22)
А подскажите на последок как разрешить пустышку во времени

Не понял, какую пустышку ?

если пользователь ничего не ввел, чтобы пустое значение в бд все-равно записалось. т.е либо время ЧЧ:ММ либо ничего

Спустя 2 минуты, 34 секунды (28.10.2011 - 23:44) YVSIK написал(а):
Цитата
т.е либо время ЧЧ:ММ либо ничего

есть такая штку у ИФа и называется она вложенность ) вот этой вложенностью и ползоваться вполне возможно!! если конечно ты разберешь про что написано если нет то читай вложенные конструкции !!

Спустя 48 секунд (28.10.2011 - 23:45) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 20:44)
Цитата
т.е либо время ЧЧ:ММ либо ничего

есть такая штку у ИФа и называется она вложенность ) вот этой вложенностью и ползоваться вполне возможно!!

да пытаюсь смастерить, пока не работает

Спустя 6 минут, 27 секунд (28.10.2011 - 23:51) johniek_comp написал(а):
какой конкретный вопрос, прочитал 3 страницы не могу понять о чем речь?

Спустя 2 минуты, 23 секунды (28.10.2011 - 23:53) Winston написал(а):
Цитата (solomon @ 28.10.2011 - 23:41)
если пользователь ничего не ввел, чтобы пустое значение в бд все-равно записалось. т.е либо время ЧЧ:ММ либо ничего

$ws = ($_POST['ws']);
if(empty($ws))
{
mysql_query("INSERT....");
}
elseif(!preg_match('/^([01]\d|2[0-3]):([0-5]\d)$/', $ws))
{
echo "Время введено неправильно. Верный формат: 00:00 или пустое значение";
return;
}

Спустя 8 минут, 37 секунд (29.10.2011 - 00:02) solomon написал(а):
Всем спасибо, сделал сам ))

Вот так (вспомнил про скобки Игоря :) ):

if ((!preg_match('/^([01]\d|2[0-3]):([0-5]\d)$/', $ws)) && !empty($ws))
{
echo "Время введено неправильно. Верный формат: ЧЧ:ММ или пустое значение";
return;
}

Спустя 2 минуты, 42 секунды (29.10.2011 - 00:05) Игорь_Vasinsky написал(а):
if(empty($ws))
//в БД пишешь 0 или NULL
else
//Пишешь время

Спустя 1 минута, 14 секунд (29.10.2011 - 00:06) YVSIK написал(а):
solomon ну я так больше не играю !! всем спасибА а мине не то надо, МИНЕ надо в карме отметка И я дбуду доволен !! ну уважь если конечно помог а то больше играть не буду!! smile.gif

Спустя 3 минуты, 51 секунда (29.10.2011 - 00:10) YVSIK написал(а):
johniek_comp
Свернутый текст
ещё маленький совсемЬ вот и не понИмашь!! А так?! а те это НАДА? что-то тут понимать если надо сделай свою тему там и задавайся вопросами подобными !!


Спустя 2 минуты, 14 секунд (29.10.2011 - 00:12) solomon написал(а):
Цитата (YVSIK @ 28.10.2011 - 21:06)
solomon ну я так больше не играю !! всем спасибА а мине не то надо, МИНЕ надо в карме отметка И я дбуду доволен !! ну уважь если конечно помог а то больше играть не буду!! smile.gif

ГОТОВО))

Спустя 1 минута, 38 секунд (29.10.2011 - 00:14) YVSIK написал(а):
solomon ну вот-Ь, а мне как приятно как приятно !!
user posted image

Спустя 3 минуты, 20 секунд (29.10.2011 - 00:17) Winston написал(а):
biggrin.gif laugh.gif

Спустя 1 день, 8 часов, 29 минут, 39 секунд (30.10.2011 - 08:47) Семён написал(а):
Гость_Админ
А это форум комментаторов и суфлёров? -Конечно нет!
Вы наверно ошиблись REQUEST-ом.

Спустя 4 часа, 21 минута, 25 секунд (30.10.2011 - 13:08) imbalance_hero написал(а):
Семён
Не агрись на него, а если хочешь помочь - просто бань smile.gif

Спустя 4 дня, 21 час, 34 минуты, 53 секунды (5.11.2011 - 10:43) solomon написал(а):
удалено
Быстрый ответ:

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