Проблема с реализацией входа в ПУ сайта

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Доброго времени суток! Возникла проблема с реализацией входа в ПУ сайта. Есть кнопка, которая выполняет функцию loginUser().
Функция loginUser():
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();

        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',
            
            data: {
                username,
                password
            },

            success: function() {
                alert(true)
            }
        });
    };
};

А данная функцию в свою очередь выполняет скрипт login.php.
Скрипт login.php:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['adminLogin'];
    $password = $_GET['adminPassword'];

    $sql = "SELECT * FROM admins WHERE username = '$username'";

    $result = mysqli_query($connect, $sql);

    if(!$result) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";

    $object = mysqli_fetch_assoc($result);

    if($password != $object['password']) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";
?>

Проблема заключается в том, что при любых введённых данных сайт возвращает true, что могло бы означать, что вход в ПУ успешен и данные верны. Буду благодарен любым подсказкам и любой вашей помощи😁
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Может быть success вызывается при успешном окончании выполнения функции, а не ответе? Я нигде не вижу, где устанавливается НЕ валидность.
P.S. В login.php возвращается return echo, вроде как разницы нет. Может стоит echo "0" или что-то такое? По первой ссылке "ajax php" увидел, как работает.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Может быть success вызывается при успешном окончании выполнения функции, а не ответе?
Да, именно.

Я нигде не вижу, где устанавливается НЕ валидность.
if($password != $object['password']) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";
Данное условие сверяет введённый пароль и тот, который записан в БД.
 

Flames

New plan of beginning.
Сообщения
676
Реакции
410
Надеюсь это пример, и сайт у тебя не состоит таким образом? Лучше посылать json ответ, и в js его обрабатывать, нежели чем посылать <script>
Сообщения автоматически склеены:

Ну и так же обрабатывать пароль и логин preg_match, чтобы не было чертей. Делать подготовительные запросы. Ну если это пример, то ладно
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Надеюсь это пример, и сайт у тебя не состоит таким образом?
Именно)
Лучше посылать json ответ, и в js его обрабатывать, нежели чем посылать <script>
Ну и так же обрабатывать пароль и логин preg_match, чтобы не было чертей. Делать подготовительные запросы. Ну если это пример, то ладно
Хорошо, попробую.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Для паролей лучше бы использовать SHA256 или другое шифрование) Не надо смотреть на пароли чужие) return echo в php файле никак не влияет. Как я понял, у success функции есть аргумент result (или как-то так, без разницы вроде будет), с помощью echo возвращается значение (не через return). Может быть попробовать сравнивать полученные значения? Если пишется echo, то по идее будет у аргумента НЕ false.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Для паролей лучше бы использовать SHA256 или другое шифрование) Не надо смотреть на пароли чужие) return echo в php файле никак не влияет. Как я понял, у success функции есть аргумент result (или как-то так, без разницы вроде будет), с помощью echo возвращается значение (не через return). Может быть попробовать сравнивать полученные значения? Если пишется echo, то по идее будет у аргумента НЕ false.
Переписываю уже полностью скрипт. Нашёл у себя в сохранёнках старый, который на тот момент работал. Сейчас возьму его и перепишу под нужную задачу.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
А причем тут пароль? Скрипт полностью выполняется, а в JS на success у тебя стоит alert(true). Тебе нужно в любом случае какие-то данные из PHP передать в JS, а то получается так, что ты возвращаешь данные только в случае выполнения условий.

PHP:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['adminLogin'];
    $password = $_GET['adminPassword'];

    $sql = "SELECT * FROM admins WHERE username = '$username'";

    $result = mysqli_query($connect, $sql);

    if(!$result) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";

    $object = mysqli_fetch_assoc($result);

    if($password != $object['password']) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";
    return $object;
?>

тогда в JS

JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();

        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',
          
            data: {
                username,
                password
            },

            success: function(data) {
                alert(data);
            }
        });
    };
};
Сообщения автоматически склеены:

А вообще лучше переделать так, а то я не уверен, что возвращаемый из php код js сработает:

PHP:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['adminLogin'];
    $password = $_GET['adminPassword'];

    $sql = "SELECT * FROM admins WHERE username = '$username'";

    $result = mysqli_query($connect, $sql);
    if(!$result ) return http_response_code(404);

    $object = mysqli_fetch_assoc($result);
    if($password != $object['password']) return http_response_code(403);

    return true;
?>

тогда в JS

JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();
        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',         
            data: {
                username,
                password
            },
            success: function(data) {
                alert(data);
            },
            error: function(returnval) {
                document.getElementById('failedLogin').textContent = 'Test'
            }
        });
    };
};
 
Последнее редактирование:

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
А причем тут пароль? Скрипт полностью выполняется, а в JS на success у тебя стоит alert(true). Тебе нужно в любом случае какие-то данные из PHP передать в JS, а то получается так, что ты возвращаешь данные только в случае выполнения условий.

PHP:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['adminLogin'];
    $password = $_GET['adminPassword'];

    $sql = "SELECT * FROM admins WHERE username = '$username'";

    $result = mysqli_query($connect, $sql);

    if(!$result) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";

    $object = mysqli_fetch_assoc($result);

    if($password != $object['password']) return echo "<script>document.getElementById('failedLogin').textContent = 'Test'</script>";
    return $object;
?>

тогда в JS

JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();

        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',
         
            data: {
                username,
                password
            },

            success: function(data) {
                alert(data);
            }
        });
    };
};
Сообщения автоматически склеены:

А вообще лучше переделать так, а то я не уверен, что возвращаемый из php код js сработает:

PHP:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['adminLogin'];
    $password = $_GET['adminPassword'];

    $sql = "SELECT * FROM admins WHERE username = '$username'";

    $result = mysqli_query($connect, $sql);
    if(!$result ) return http_response_code(404);

    $object = mysqli_fetch_assoc($result);
    if($password != $object['password']) return http_response_code(403);

    return true;
?>

тогда в JS

JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();
        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',        
            data: {
                username,
                password
            },
            success: function(data) {
                alert(data);
            },
            error: function(returnval) {
                document.getElementById('failedLogin').textContent = 'Test'
            }
        });
    };
};
Сейчас проверил версию скрипта от тебя. Всё работает также. Просто плевать какие данные вводятся. От чего отталкиваться? Запрос к базе я проверил на машине, всё возвращается.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Сейчас проверил версию скрипта от тебя. Всё работает также. Просто плевать какие данные вводятся. От чего отталкиваться? Запрос к базе я проверил на машине, всё возвращается.
Надо смотреть, т.к. хз что в базе есть, и с чем сравнивается 😄
Прежде чем сравнивать данные, посмотри какие данные проверяются
перед условием делай return var_dump(<переменная>);, и посмотри что в алерт выведет) мб там и данных нет вовсе)
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Надо смотреть, т.к. хз что в базе есть, и с чем сравнивается 😄
Прежде чем сравнивать данные, посмотри какие данные проверяются
перед условием делай return var_dump(<переменная>);, и посмотри что в алерт выведет) мб там и данных нет вовсе)
В базе есть много чего. Проверяются данные администратора (логин и пароль).

Таблица: admins
Столбцы: username и password (тестовые)
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
В базе есть много чего. Проверяются данные администратора (логин и пароль).

Таблица: admins
Столбцы: username и password (тестовые)
Ну вот отлаживай, смотри с какими данными работаешь в моменте) var_dump в помощь
Сообщения автоматически склеены:

У тебя проблема скорее всего в этом
JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();
        $.ajax({
            url: '../assets/scripts/login.php?adminLogin=' + username +'&adminPassword=' + password,
            method: 'GET',   
            success: function(data) {
                alert(data);
            },
            error: function(returnval) {
                document.getElementById('failedLogin').textContent = 'Test';
            }
        });
    };
};

И вообще такие вещи обычно POST запросом делают, а не GET 😄
 
Последнее редактирование:

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Ну вот отлаживай, смотри с какими данными работаешь в моменте) var_dump в помощь
Сообщения автоматически склеены:

У тебя проблема скорее всего в этом
JS:
function loginUser() {
    var button = document.getElementById('loginButton');
    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();
        $.ajax({
            url: '../assets/scripts/login.php',
            method: 'GET',      
            data: {
                "adminLogin" : username,
                "adminPassword" : password
            },
            success: function(data) {
                alert(data);
            },
            error: function(returnval) {
                document.getElementById('failedLogin').textContent = 'Test';
            }
        });
    };
};
Проверил, оказалось, что там просто пустой запрос в базу ._.
Спасибо за помощь, буду исправлять)
Сообщения автоматически склеены:

Проблема была решена и код немного изменился. Вот, что было неправильно:
  • В самом скрипте необходимо было принимать данные, которые передавала функция в обьекте data:
В итоге было принято пересмотреть весь написанный код и вот, что получилось (возможны некоторые поправки, код не идеален😒).

Исходный код:
Скрипт login.php:
<?php
    require('connection.php');

    $connect = mysqli_connect($host, $user, $password, $database);

    $username = $_GET['username'];
    $password = $_GET['password'];

    $sql = "SELECT * FROM admins WHERE username = '$username' AND password = '$password'";

    $result = mysqli_query($connect, $sql);
    if(mysqli_num_rows($result) < 1) return http_response_code(404);

    return true;
?>

Функция loginUser():
function loginUser() {
    var button = document.getElementById('loginButton');

    button.onclick = () => {
        NProgress.start();

        var username = $('#adminLogin').val();
        var password = $('#adminPassword').val();
        
        console.log(username, password);

        window.document.getElementById('loginButton').setAttribute('disabled', true);
        
        $.ajax({
            url: '../../assets/scripts/login.php',
            method: 'GET',

            data: {
                username,
                password
            },

            success: function(data) {
                alert('Вход выполнен успешно');
                //window.location = '';
            },

            error: function(value) {
                alert('Вход не выполнен, проверьте, пожалуйста данные!');
            }
        })
    }
}

Тема закрыта, всем огромное спасибо за помощь😁
 
Последнее редактирование:
Сверху Снизу