Проверка имени пользователя с помощью ajax + json - PullRequest
0 голосов
/ 30 мая 2018

Я сделал php-файл, который содержит имена пользователей в формате json.

[
    {"korisnicko_ime":"darbranis"},
    {"korisnicko_ime":"markrc"},
    {"korisnicko_ime":"leoluk"},
    {"korisnicko_ime":"borbau"},
    {"korisnicko_ime":"ivavad"},
    {"korisnicko_ime":"andtikv"},
    {"korisnicko_ime":"nikohras"},
    {"korisnicko_ime":"marbranis"},
    {"korisnicko_ime":"ratkolev"},
    {"korisnicko_ime":"antobrk"}
]

Теперь я хочу проверить с помощью ajax + json, существует ли имя пользователя в базе данных, и должно выглядеть так:

    var kor_ime = $("#k_ime").val();

    $.ajax({
        url: 'http://barka.foi.hr/WebDiP/2017_projekti/WebDiP2017x021/popis_korisnika.php',
        type: 'GET',
        dataType: 'json',
        success: function (json) {
            $.each(json, function (korisnicko_ime, value) {
                if (value === kor_ime) {
                    $("#poruke").text("Korisnik postoji!");
                    console.log("Korisnik postoji!");
                } else {
                    $("#greske").text("Korisnik ne postoji!");
                    console.log("Korisnik ne postoji");
                }

                console.log(kor_ime);
            });
        }
    });

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

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

изменить таким образом:

$.each(json, function (korisnicko_ime, value) {
            if (value === kor_ime) {
                $("#poruke").text("Korisnik postoji!");
                console.log("Korisnik postoji!");
            } else {
                $("#greske").text("Korisnik ne postoji!");
                console.log("Korisnik ne postoji");
            }

на это:

json.forEach(function (value) {

    if (value.korisnicko_ime == kor_ime) {
                $("#poruke").text("Korisnik postoji!");
                //console.log("yes");
       } else {
                $("#greske").text("Korisnik ne postoji!");
                //console.log("no");
       }
 });
0 голосов
/ 30 мая 2018

Так что, очевидно, ваш код ожидает массив с именами пользователей, но это не то, что вы получаете.Вы получаете массив объектов со свойством korisnicko_ime, которое содержит имя пользователя.

Вместо проверки if (value == kor_ime) вы должны проверять if (value.korisnicko_ime == kor_ime)

Кроме того, вы не являетесьпросматривая все записи, прежде чем определить, что имя пользователя не существует.Вы выполняете действия для несуществующего пользователя для каждой записи, где имя пользователя не совпадает.

Но не берите в голову это, почему вы предоставляете неаутентифицированному пользователю список всех возможных входов в систему?Вы понимаете, что кто-то может видеть этот список правильно?Это серьезное нарушение безопасности.Не проверяйте конфиденциальную информацию на стороне клиента.

0 голосов
/ 30 мая 2018

В вашем javascript есть 2 ошибки:

Первая: вы ожидаете, что переменная value будет строкой, подобной "darbranis".Однако $.each даст первому параметру индекс (0, 1, 2 и т. Д. В этом случае, поскольку json является регулярным массивом), а вторым параметром значение ({"korisnicko_ime":"darbranis"} для первой записи).

Таким образом:

$.each(json, function (korisnicko_ime, value) {
    if (value === kor_ime) {

Должно быть что-то вроде:

$.each(json, function (arrayidx, arrayvalue) {
    if (arrayvalue.korisnicko_ime === kor_ime) {

Вторая ошибка: $("#poruke") будет записано, если естьимя пользователя в json равно kor_ime.$("#greske") будет записано, если внутри этого json есть имя пользователя, которое не равно kor_ime.Поскольку в json много имен пользователей, которые не равны kor_ime, ВСЕГДА будет написано $("#greske").Я предполагаю, что "Korisnik ne postoji!"переводится как «Пользователь не найден», поэтому вам, скорее всего, не понравится это поведение.Чтобы исправить это:

// Initialize userfound as false
var userfound = false;
$.each(json, function (arrayidx, arrayvalue) {
    if (arrayvalue.korisnicko_ime === kor_ime) {
        // If there is one entry with the correct username, the user is found
        userfound = true;
    }
});

// After the each check if user is found (one match) or not 
// found (no match at all, thus still at initial value false)
if (userfound) {
    $("#poruke").text("Korisnik postoji!");
    console.log("Korisnik postoji!");
} else {
    $("#greske").text("Korisnik ne postoji!");
    console.log("Korisnik ne postoji");
}

Завершите демонстрацию в следующем фрагменте кода:

var kor_ime = 'markrc';
var json = [
    {"korisnicko_ime":"darbranis"},
    {"korisnicko_ime":"markrc"},
    {"korisnicko_ime":"leoluk"}
];

var userfound = false;
$.each(json, function (arrayidx, arrayvalue) {
    if (arrayvalue.korisnicko_ime === kor_ime) {
        userfound = true;
    }
});

if (userfound) {
    $("#poruke").text("Korisnik postoji!");
    console.log("Korisnik postoji!");
} else {
    $("#greske").text("Korisnik ne postoji!");
    console.log("Korisnik ne postoji");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="poruke" style="color: green;"></div>
<div id="greske" style="color: red;"></div>
...