Добавил данные через форму один раз, а в базе обнаружил 500 записей с этими даннымн

Код не проверял, просто для понимания
PHP:
session_start();
if (isset($_SESSION['hidden_code']) and $_SESSION['hidden_code'] == $_GET['hidden_code']) {
// вставка
// редирект
} else {
$_SESSION['hidden_code'] = rand();
// вывод формы <input type='hidden' name='hidden_code' value='<?=$_SESSION['hidden_code'];?>'>
}
В таком случае если интернет будет тормозить, запросы пойдут не прерывно, пока скрипт не получит ответ от сервера. Это не то что мне нужно.
 
запросы пойдут не прерывно
Прошу прощения, вечер, устал, добавил удаление переменной из сессии
PHP:
session_start();
if (isset($_SESSION['hidden_code']) and $_SESSION['hidden_code'] == $_GET['hidden_code']) {
unset($_SESSION['hidden_code']);
// вставка
// редирект
} else {
$_SESSION['hidden_code'] = rand();
// вывод формы <input type='hidden' name='hidden_code' value='<?=$_SESSION['hidden_code'];?>'>
}
 
Можно как в ВКонтакте при отправке сообщения. Там в форме есть случайное число, после отправки оно меняется. Если тыкать кнопку - на сервер отправится несколько запросов с одним сообщением и одним случайным числом. Именно по случайному числу вк отсеет лишние сообщения, а запишет только 1.

С такой системой ты можешь одинаковое сообщение отправлять хоть 100 раз - будет 100 сообщений, а если 100 раз просто по кнопке тыкнешь быстро - будет 1 сообщение.

В базе сохраняешь это число. В качестве такого числа можно использовать php функцию time()

1. В форму добавить: <input type="hidden" name="number" value="<?php echo time(); ?>" />
2. В бд добавить уникальное поле.
ALTER TABLE send ADD number INT(10) UNSIGNED;
ALTER TABLE send ADD UNIQUE KEY (`number`);
3. В запросе заменить INSERT INTO на INSERT INGORE INTO

После отправки формы число должно меняться. Но это сработает если только 1 пользователь, так как могут 2 человека одновременно форму открыть и запись добавится только 1 того, что первый форму отправит. Тогда надо делать уникальный ключ на 2 поля, number и account_id
Решил задачу <input type="hidden" name="number" value="<?=$_SESSION['id']?><?php echo time(); ?>" />, каждый ID имеет свой time().
 
Назад
Сверху