| |
|
|
| | Доброго времени суток. Вопрос такой: необходимо помешать пользователям отправлять одну и ту же форму несколько раз, например пользователь ошибочно (а может и намеренно) щелкнул вместо одного, два раза по кнопке submit? .... О моей форме: данные сохраняются в базе данных, для вывода формы и обработки введенных в ней данных используется одна и та же страница.Заранее спасибо. | |
| |
|
|
| |
|
|
| |
для: olelef
(23.10.2007 в 23:19)
| | | Я делал следующим образом
Вот форма,
не обращайте внимания на неточности, это из рабочего кода, где многое строилось из базы, но смысл не меняется:
<form action="question.php?action=save" method="post" name="QNew">
<table cellspacing="1" cellpadding="1" width="100%" align="center" border="0">
<tr>
<td valign="top" align="right" width="200" bgcolor="#ccffcc"><div id="resultQCel">Цель: </div></td>
<td bgcolor="#f4f4f4"><SELECT><Option>1</Option></SELECT></td>
</tr>
<tr>
<td valign="top" align="right" bgcolor="#ccffcc"><div id="resultQText">Содержание: </div></td>
<td bgcolor="#f4f4f4"><textarea id="QText" name="QText" rows=8 cols=20 wrap="on" style="width:100%"></textarea></td>
</tr>
<tr>
<td valign="top" align="right" bgcolor="#ccffcc" colspan=2><input type="button" name="QSend" value="Отправить" onClick="QuestionFerify()"></td>
</tr>
</table>
</form>
|
А вот JavaScript, у которого 2 назначение:
1. Проверить форму на заполнение помечая не заполненые поля.
2. Отправить форму при заполнении.
<script type="text/javascript" language="JavaScript">
function QuestionFerify() {
QCel=document.getElementById('QCel').value;
QText=document.getElementById('QText').value;
err=0;
if(QCel<1){
err=1;
document.getElementById('resultQCel').innerHTML = "<font style='font-weight: bolder; color: #FF0000;'>Цель*: </font>";
}else{
document.getElementById('resultQCel').innerHTML = "<font style='bolder; color: #000000;'>Цель*: </font>";
}
if(QText.length<10){
err=1;
document.getElementById('resultQText').innerHTML = "<font style='font-weight: bolder; color: #FF0000;'>Содержание*: </font>";
}else{
document.getElementById('resultQText').innerHTML = "<font style='bolder; color: #000000;'>Содержание*: </font>";
}
if(err==0){
document.getElementById('QSend').enabled=false
document.forms('QNew').submit();
}
}
</script>
|
После отправки формы JavaScript проверяет форму на заполнение и при правильном заполнении отправляет ее скрипту, перед этим блокируя кнопку Submit | |
| |
|
|
| |
|
|
| |
для: olelef
(23.10.2007 в 23:19)
| | | Можно сделать следующее
например файл index.html
<form action="здес_обработчика_в_другом_файле " method="post" name="QNew" >
<!-- Здесь содержание саймой формы-->
</form>
а вот обработчик
<?php
// здесь обрабатываем
//а в конце обработчика пишем следующую "фразу"
header('адрес_файла_где_лежит_форма');
?>
|
| |
| |
|
|
| |
|
|
| |
для: olelef
(23.10.2007 в 23:19)
| | | самое нормальное решения которое я нашел это исползовать exit после обработки данных формы...
exit('<HTML><HEAD><META HTTP-EQUIV="REFRESH" CONTENT="0; URL='.$_SERVER['HTTP_REFERER'].'"></HEAD><BODY></BODY></HTML>');
|
| |
| |
|
|
| |
|
|
| |
для: KPETuH
(24.10.2007 в 07:37)
| | | KPETuH, а вы можете объяснить как это работает. | |
| |
|
|
| |
|
|
| |
для: lifead
(24.10.2007 в 08:02)
| | | после успешной обработки формы, срабатывает exit который останавливает работу скрипта, а строка внутри exit делает перенаправление на страницу где находиться форма... при этом повторно данные просто не могут отослаться... | |
| |
|
|
| |
|
|
| |
для: KPETuH
(24.10.2007 в 08:27)
| | | F5 | |
| |
|
|
| |
|
|
| |
для: bronenos
(24.10.2007 в 14:39)
| | | ну проверь... у меня на ф5 не пашет :) | |
| |
|
|
| |
|
|
| |
для: olelef
(23.10.2007 в 23:19)
| | | Спасибо всем, нашел и сделал у себя такое решение проблемки:
1. В скрытом поле формы генерируем уникальный идентификатор:
$uniqid = md5(uniqid(microtime(),1));
| ну и сохраняем его в базе данных вместе с другими данными формы.
2. Перед обработкой формы надо проверять, есть ли уже этот идентификатор в базе данных. Если его нет, то все нормально, добавляем новую запись в базе данных, если идентификатор уже есть, то генерируем ошибку (или ничего не делаем)! | |
| |
|
|
| |
|
|
| |
для: olelef
(24.10.2007 в 22:06)
| | | >Спасибо всем, нашел и сделал у себя такое решение проблемки:
>1. В скрытом поле формы генерируем уникальный идентификатор:
>
$uniqid = md5(uniqid(microtime(),1));
| ну и сохраняем его в базе данных вместе с другими данными формы.
>2. Перед обработкой формы надо проверять, есть ли уже этот идентификатор в базе данных. Если его нет, то все нормально, добавляем новую запись в базе данных, если идентификатор уже есть, то генерируем ошибку (или ничего не делаем)!
Можно и так, но не советую.
Бывает вдруг вспоминаешь, что что-то упустил,
и хочешь вдогонку послать сообщение уже другое.
Поэтому лучше использовать
crc32(substr($_POST['post_just_received'], 0, 20))
|
Тогда и удобно, и лишнего по-случайности не пошлют. | |
| |
|
|