Не выполняется проверка логина. В чём ошибка?

Проверка должна выполняться на стороне пользователя. При смене фокуса с поля ввода данных должна выполняться проверка введённых данных и появляться предупреждение о некорректности рядом с полем. При неправильно введённом логине ничего не происходит, и данные спокойно отправляются в базу данных. Регулярные выражения написаны корректно.

registration.php
<div name="blockForm" class="form" id="reg">
            <form name="regForm" action="registrationCheck.php" method="post">
                <input type="text" name="login" class="reg_form" id="login" onblur="responseLog();" placeholder="Логин" required /><br />
                    <span id="errorLog" style="display: none">Логин введён некорректно! Логин должен начинаться со строчной или прописной буквы, он может содержать цифры или символы (._-\)</span>
                <input type="submit" name="save" class="reg_form" id="save_reg" onclick="resetRegForm()" value="Сохранить" />
            </form>
</div>

registration.js
$(document).ready(function () {
    function responseLog() {
        $.ajax({
            type: "POST",
            url: "checkReg.php",
            data: { action: 'login', user: $("#login").val() },
            cache: false,
            success: function (response) {
                if (response == 'true') {
                    $("#errorLog").css("display", "block");
                    $("#errorLog").css("color", "red");
                } else {
                    $("#login").css("background", "green");
                };
            }
        });
    };
    function resetRegForm() {
        $("#errorLog").css("display", "none");
    };
});

checkReg.php
<?php
    $action = $_POST['action'];
    $mysql = new mysqli ("localhost", "root", "", "yoursmilebase");
    if ($action == "login") {
            $row = $mysql->query("SELECT `login` FROM `users` WHERE `login` = '$action'");
            if ($row) {
                echo "true";
            } else if (!preg_match("/^[a-zA-Z][a-zA-Z\d._-\\]{5,15}/", $action) || preg_match("/^(admin)/", $action)) {
                echo "true";
            } else {
                echo "false";
            };
     }
    $mysql->close;
?>
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
mysqli::query
Возвращает false в случае неудачи. В случае успешного выполнения запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернёт объект mysqli_result.

Соответственно, возвращается объект mysqli_result (результат из нуля строк - это тоже корректный результат и вернётся объект), в строке if ($row) приводится к true, условие выполняется, клиенту возвращается "true".
А вообще логика крайне странная. Сначала вы пытаетесь найти логин в базе данных, а затем проверяете его регуляркой. Логично наоборот, хотя бы с точки зрения времени выполнения.
Ну и приучите себя использовать подготовленные выражения с плейсхолдерами, это лучшая защита от SQL-инъекций.
Ответ написан
DiamondStudio
@DiamondStudio
Web Developers
Отправка AJAX запроса идет на checkRegLog.php, а сам код проверки в checkReg.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы