|
|
|
| Подскажите пожалуйста как обработать такую ситуацию: пользователь заполняет форму , вписывает код на картинке и отправляет данные, загружается другая страница с его данными. Теперь, если воспользоваться возвратом браузера назад, то данные в форме те же, тот же код на картинке. Пользователь опять нажимает кнопку и так можно до сотни за минуту добавить. | |
|
|
|
|
|
|
|
для: shest
(08.01.2007 в 03:23)
| | Такого быть не может. сесия уже должна уничтожится после проверки данных. | |
|
|
|
|
|
|
|
для: ols
(08.01.2007 в 04:02)
| | >>Такого быть не может. сесия уже должна уничтожится после проверки данных.
Может. Он ни слова не сказал о сессиях.
Браузер послушно повторно отправляет данные, POST или GET неважно (кстати возврат необязательно делать, достаточно обновить страницу - F5), скрипт-обработчик берет и добавляет их.
Можно перед добавлением проверять в таблице наличие записи с такими же параметрами. Если такой записи нет - добавляем, есть - ничего не делаем. | |
|
|
|
|
|
|
|
для: targa
(08.01.2007 в 04:19)
| | Это проблематично, тем более что у меня не bd а файлы.
Ещё есть какой- нибудь способ? | |
|
|
|
|
|
|
|
для: Shest
(08.01.2007 в 11:28)
| | Можно использовать промежуточный файл, в котором будут производиться все действия, как например на форумах VBulletin.
А для надежности можно в него поставить сразу заголовок (header ("Location: ....")) и никакого сообщения не выводить. Если поступить таким образом, то обновляй, не обновляй - ничего не получится, а если вернуться назад, то браузер выдаст страницу с чистой формой =) | |
|
|
|
|
|
|
|
для: golovdinov
(08.01.2007 в 12:33)
| | А вот кстати идея: в файле сохранять сессию пользователя и проверять, сколько от текущей сессии было сообщений. Если более напр.2 -запрещать | |
|
|
|
|
|
|
|
для: shest
(08.01.2007 в 03:23)
| | Хм... а что он добавляет? Вроде его после авторизации направляют на его личные данные? При этом происходит какая-то регистрация в базе данных? | |
|
|
|
|
|
|
|
для: cheops
(08.01.2007 в 14:28)
| | Есть еще вариант (правда с БД. может кому пригодится, я сам лично так у себя сделал): когда пользователь добавляет сообщение, добавлять запись в БД с IP пользователя и временем. получается своеобразный "таймер":
CREATE TABLE table_timer (
time TINYTEXT,
user_ip TINYTEXT
) TYPE=MyISAM;
|
<?
$time = 300; // время "таймера" в секундах
$ip = $_SERVER['REMOTE_ADDR']; // ip адрес пользователя
// Удаляем все записи в которых истек "таймер"
@mysql_query ("DELETE FROM table_timer WHERE time < ". ( time() - $time ));
// Скрипт. добавляющий запись (самый простой пример =)
if ($_POST['text'] != "") {
// Проверяем не установлен ли таймер на пользователя
$get_timer = @mysql_num_rows (mysql_query ("SELECT * FROM table_timer WHERE user_ip = '$ip'"));
if ($get_timer > 0) {
print "Вы не можете добавлять соощения так часто!";
exit ();
}
$add = @mysql_query ("INSERT INTO table_content VALUES ('".$_POST['text']."')");
if ($add) {
print "Запись добавлена!";
// Добавляем запись в таблицу с "таймером"
@mysql_query ("INSERT INTO table_timer VALUES ('".time()."', '$ip')");
}
}
?>
|
основной плюс этакого способа - это то что он всегда работает. | |
|
|
|
|
|
|
|
для: golovdinov
(08.01.2007 в 15:52)
| | Можно ещё проще
//Инициация сессии
session_start();
|
Теперь вернуться браузером на страницу не удастся. | |
|
|
|