Я пытаюсь заполнить скрытый ввод динамически и использовать Ajax для извлечения его каждый раз, когда пользователь отправляет форму

Я использую PHP для вывода формы с динамическими значениями ввода в зависимости от определенных критериев:

<?php

//when user lands on the login page, he is presented with a form.
//if he logged in with the incorrect password, the variable $attempts will increment by 1.

$failed_attempt = $attempts > 10 ? 'failed' : '' ;

echo '
    <form id="form_login">
    <input type="hidden" name="failed_attempt" id="failed_attempt" value="'.$failed_attempt.'" />
    <input type="hidden" name="current_time" id="current_time" value="'.date('Y-d-m H:i:s').'" />
    <input type="text" name="uid" id="uid" placeholder="Username/e-mail">
    <input type="password" name="pwd" id="pwd" placeholder="password"> 
    <button type="submit" name="login_submit" id="login_submit">Login</button>
    </form>';
    echo '<p id="result"></p>';
?>

... и Ajax в форме отправляют, чтобы получать сообщения об ошибках и успехах без обновления страницы:

$(document).ready(function(){
    $('#login_submit').click(function(event) {
        // document.location.reload(true);
        event.preventDefault();
        $.ajax({
            url: "includes/login.inc.php",
            //'<?php echo $form_action; ?>',
            method: "post",
            data: $('#form_login').serialize() + "&submit_login",
            dataType: "text",
            success: function (html, data) {
                $('#result').html("Ajax Success Status:" + data + "<br>Result:" + html);
            }
        });
    });
});

Однако, поскольку Ajax используется для отправки формы, страница никогда не обновляется, поэтому пользователь продолжает видеть одну и ту же форму, и ввод со значением $failed_attempts остается неизменным независимо от того, сколько раз пользователь нажимает кнопку ' отправить с неверным паролем.

У меня вопрос: как я могу "обновить" форму или только один ввод, прежде чем пользователь отправит форму? Если я откомментирую эту часть

// document.location.reload(true);

тогда пользователь никогда не увидит сообщение об ошибке / успехе и не узнает, в чем дело.

Я пробовал разные подходы, ни один не подходит (то есть я всегда сталкиваюсь с такими ситуациями, независимо от того, какой подход я выбрал. Как только я наконец-то получил невербальный подход, у меня все еще остается проблема с полем ввода то же самое, если пользователь практически не обновляет страницу сам!).

PS Причина этого такова: я боюсь, что боты или DoS-злоумышленники смогут отправить форму несколько раз, и мне нужно остановить вход в систему, если она достигнет> 10 попыток в течение x минут.

0 ответов

Другие вопросы по тегам