使用ajax + json检查用户名

时间:2018-05-30 18:33:02

标签: php json ajax username

我制作了一个包含json格式用户名的php文件。

library(dplyr)
library(lubridate)

test %>%
mutate(Bin = if_else(as.Date(test$endTime) - as.Date(test$startTime) == 0, 1,2 )) -> df

现在我想用ajax + json检查数据库中是否已经存在用户名whick应如下所示:

[
    {"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"}
]

现在当我专注时,每次都会收到用户名不存在的消息。我需要帮助。

3 个答案:

答案 0 :(得分:0)

您的javascript中有2个错误:

第一个:您希望变量value是一个类似"darbranis"的字符串。但是$.each会将第一个参数作为索引(012,在这种情况下依此类推,因为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) {

第二个错误:如果json中的用户名等于$("#poruke"),则会写入kor_ime。如果该json中的用户名不等于$("#greske"),则会写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>

答案 1 :(得分:0)

改变这种方式:

$.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");
       }
 });

答案 2 :(得分:0)

所以显然你的代码需要一个带有用户名的数组,但这不是你得到的。您将获得一个对象数组,其属性korisnicko_ime包含用户名。

您应该检查if (value == kor_ime)

,而不是检查if (value.korisnicko_ime == kor_ime)

此外,在确定用户名不存在之前,您不会查看所有条目。您对用户名不匹配的每个条目执行不存在用户的操作。

但是不要紧,为什么你要为未经身份验证的用户提供系统中所有可能登录的列表?你意识到任何人都可以看到那个名单吗?这是一个严重的安全漏洞。不要在客户端验证敏感信息。