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

Я использую 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 попыток в течение х минут.

...