вещь перестанет путать людей. Тем не менее, спасибо за вашу помощь!
ить 25.07.2018: Как сказал в ответ Павнеш Кумар, похоже, это проблема браузера. Если я нажимаю кнопку несколько раз в Firefox, приведенный ниже скрипт отправит только одинPOST
запрос, но если я делаю то же самое в Chrome, я получаюPOST
запрос на каждый клик.
Тем не менее, я могу повторить проблему ввидео в 01:00 Это означает, что когда я устанавливаю Laravel сАутентификациязатем, если я дважды нажму кнопку отправки в форме входа, Firefox отправит 2 запроса.
Почему Firefox иногда отправляет несколькоPOST
запрос а иногда только один, при многократном нажатии на кнопку?
у меня естьпользователь Таблица
id | name
1 | John
где полеid
первичный, целочисленный, автоинкрементный ключ Когда я отправляю фиктивную форму, в которой есть только одна кнопка, тогда будет вставлена новая запись с именемJohn
, Теперь вот что я заметил:
Если я отправляю форму один раз, возвращаюсь в браузере и отправляю ее снова, тогда я нахожу две новые строки в БД.
Если я отправлю форму, дважды щелкнув (или двадцать раз)Add
кнопку, то есть только одна новая строка в БД.
Почему это? Я ожидаю, что если я нажму кнопку отправки несколько раз, то форма будет отправлять несколько запросов - и вставлять несколько строк.
Вот моя форма:
<form action="/test.php" method="POST">
<input type="submit" value="Add">
</form>
который подчиняетсяtest.php
:
<?php
$servername = "localhost";
$username = "adam";
$password = "password";
$dbname = "test-db";
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "INSERT INTO user (name) VALUES ('John')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
}
$conn->close();
sleep(4);
Из-заsleep
часть, я могу нажать наAdd
кнопка несколько раз подряд. Тем не менее, независимо от того, как часто я нажимаюAdd
Кнопка при загрузке, есть только одна новая строка в БД.
В моем файле access.log я также нахожу только одинGET
а такжеPOST
запрос после нажатия на кнопку двадцать раз:
2001: ****: ****: 4400: ****: ****: ****: **** - - [25 июля / 2018 год: 11:30: 03 +0200] "GET /test/form.php HTTP / 1.1" 200 301 "-" "Mozilla / 5.0 (X11; Ubuntu; Linux x86_64; rv: 57.0) Gecko / 20100101 Firefox / 57.0" "*******. Net "
2001: ****: ****: 4400: ****: ****: ***: **** - - [25 / Jul / 2018: 11: 30: 34 +0200] " POST /test/test.php HTTP / 1.1 "200 31" http: //********.net/test/form.php "" Mozilla / 5.0 (X11; Ubuntu; Linux x86_64; rv: 57.0 ) Gecko / 20100101 Firefox / 57.0 "" ********. Net "
Примечание:
Я читал о методах предотвращения множественных представлений либо вбэкенд или жевнешний интерфейс, Таким образом, я думаю, что должна быть возможность отправить форму несколько раз, нажав кнопку несколько раз.
Я также прочитал в статье викиPost / Redirect / Get что этот шаблон не может предотвратить, если пользователь вводит форму несколько раз слишком быстро:
Если веб-пользователь обновляется до завершения первоначальной отправки из-за задержки на сервере, что приводит к дублированию POST-запроса у определенных пользовательских агентов.
Также в этомвидео в 1:00 кто-то дважды щелкает по кнопке и получает ошибку, потому что он отправил дважды.