Как предотвратить множественные вставки при отправке формы в PHP? - PullRequest
29 голосов
/ 25 января 2010

Иногда пользователь может нажать Enter дважды, и сообщение вставляется дважды.

Есть ли решение для предотвращения этого, кроме проверки, если уже есть сообщение с такими же title и content?

Ответы [ 14 ]

0 голосов
/ 20 ноября 2011

Aron Rotteveel's Включите уникальный жетон на каждый POST , который работал для меня Однако моя форма все еще отправляется, когда пользователь обновляет страницу (F5). Мне удалось решить эту проблему, добавив сброс:

            // reset session token
            $_SESSION['token'] = md5( $_POST['token'] . time() );

мой последний сценарий выглядит так:

if (isset($_SESSION['token'])) {
    if (isset($_POST['token'])) {
        if ($_POST['token'] != $_SESSION['token']) {
            echo '<h3>Oops! You already submitted this request.</h3>';
        } else {
            // process form
            // reset session token
            $_SESSION['token'] = md5( $_POST['token'] . time() );
        }
    } else {
        echo 'post token not set';
        $_SESSION['token'] = md5( $somevariable . time() );
    }
}

ой! не забудьте добавить session_start(); до <!DOCTYPE>

Я новичок в PHP, поэтому, пожалуйста, исправьте меня, если вы обнаружите ошибки.

0 голосов
/ 25 января 2010

Двойное нажатие на кнопку отправки довольно редко приводит к нескольким вставкам, но если вы хотите просто простое решение, используйте

onsubmit="document.getElementById('submit').disabled = true"

в теге формы, если вы дадите кнопку отправки id="submit"

0 голосов
/ 25 января 2010

Используйте JavaScript, чтобы отключить кнопку, как только она нажата.

onclick="this.disabled=true;forms[0].submit();"
0 голосов
/ 25 января 2010

отключить кнопку отправки после того, как пользователь отправил форму, используя JavaScript. Вот что, например, StackOverflow использует, когда вы отвечаете на вопрос.

Например

<input type="submit" onclick="this.disabled=true" />
...