我正在使用code.org制作一个小应用程序,但是,我的应用程序需要登录。在创建登录时,我希望它检查以确保用户的输入在数据库中不存在。我不希望有多个用户名相同的人。当我在数据库中只有一个帐户时,它运行得很好。但当有一个以上的,它不再做正确的工作。它确实检查用户的输入是否等于数据库中的用户名,并告诉用户它是一个无效的用户名,但是它将它们发送到下一个屏幕,并将用户输入的用户名和密码保存到数据库中。
下面是我所做的(我为alert使用了自己的函数,因为code.org不允许使用alert函数)。
// Alert function
function Alert(text,time) {
if(text != undefined) {
textLabel("ALERT",text);
setProperty("ALERT","background-color","black");
setProperty("ALERT","text-color","white");
if(time != undefined) {
setTimeout(function() {
deleteElement("ALERT");
},time);
}
}else{
console.log("WARNING: \"Alert()\" -> \"text\" is undefined.");
}
}
// create account button
onEvent("create-account-bt","click",function() {
readRecords("players",{},function(record) {
for(var i = 0 ; i < record.length ; i++) {
if(getText("new-username-input") != record[i].username) {
if(getText("new-passcode-input") != "") {
createRecord("players",{
username:getText("new-username-input"),
passcode:getText("new-passcode-input")
},function() {
setScreen("login-screen");
});
}else{
Alert("Incorrect passcode or username",1200);
}
}else{
Alert("Incorrect passcode or username",1200);
}
}
});
});我已经想了很长一段时间来解决这个问题。我真的很感激任何帮助,即使它没有完全修复它。
发布于 2021-04-12 22:17:41
你的做法是错误的。当您想确保没有重复时,必须在整个数据库中运行。如果在浏览时找到匹配的内容,请发出警报并停止。但是,只有在最后找不到匹配项时,才添加条目。
当前代码在没有匹配项时立即添加新条目。因此,几乎总是直接与第一项。即使它找到了第一个条目的匹配项,它也只是发出警告,但是继续循环,因为您不调用break。
这样试一试:
onEvent("create-account-bt","click",function() {
readRecords("players",{},function(record) {
var matchFound = false;
for(var i = 0 ; i < record.length ; i++) {
if((getText("new-username-input") == record[i].username) ||
(getText("new-passcode-input") == ""))
{
Alert("Incorrect passcode or username",1200);
matchFound = true;
break;
}
}
if(!matchFound) {
createRecord("players",{
username:getText("new-username-input"),
passcode:getText("new-passcode-input")
},function() {
setScreen("login-screen");
});
}
});
});https://stackoverflow.com/questions/67065932
复制相似问题