在网站的注册页面上,我想运行javascript来查看数据库中是否存在用户名。这会在onkeyup上发生。如果匹配,则应该有一个HTML警报说明这一点。否则,用户可以继续注册
我已经尝试了以下代码。我是新来的。
let input = document.querySelector('username');
input.onkeyup = function()
{
let html = '';
let $result = mysql_query("SELECT * FROM users WHERE username = username");
if (input.value == $result)
{
alert("Username already taken");
}
};
我希望会发生一些事情。但没有任何作用。
答案 0 :(得分:2)
好的,我在这里看到很多问题。首先,您尝试在同步上下文中执行异步操作。
免责声明:我不是PHP人(mysql_query
似乎是PHP?),因此,如果您要这样做,那么我可能不是您。如果不是 情况-如果您希望mysql_query
是一个函数-您将需要在其他地方定义该函数。
让我们从console.log()
开始一切事物:
console.log
您的$result
(可能)生成之后。那是什么意思我要猜测 是“未定义”还是“空”,因为数据库查询几乎总是 是异步的。console.log
您的input.value
。那是您认为应该的吗?我不能告诉你我做过像把“ myDiv”拼写成“ my-div”这样愚蠢的事情的次数。由于“用户名”不是标准的DOM元素,因此我非常希望您在这里想要做的事情是document.querySelector('#username')
(按ID)或document.querySelector('input[name=username]')
(按名称)。 users
表WHERE username = username
中查找的字符串文字。但是,这就是问题所在(假设您的表实际上有一个“用户名”列,我相信这只会查找用户名为 literally “ username”的用户。换句话说,如果有的话您在输入框中键入的名称不完全是“用户名”,这将会失败。我想,您要做的是这样的:
//firstly, let's assume mysql_query is an async JavaScript function that you've defined.
mysql_query(`SELECT * FROM users WHERE username = ${input.value}`, function(err, response){
if(err){
alert('ERROR CHECKING NAMES!');
}else if (response.length){
//assume that if the query returns anything, that means it found a matching (==duplicate) name
alert('NAME ALREADY EXISTS!');
}else{
//do nothing!
}
});
我也要非常小心,因为通常不会在每个keyup
触发器上触发此事件,而是“礼貌地”执行这样的操作来“反跳该函数:
myTimer = null;
someThing.onkeyup = function(e){
if(myTimer){
//myTimer was previously defined. Cancel its sending and then
clearInterval(myTimer)
}
//start a new timer
setTimeout(function(){
doSomeAPICall()
},500)//or whatever milliseconds
}
但是,我认为您可能在这里遇到的问题更大一些,因为您混用了PHP和JS语法,并将其称为Python。