通过使用input.onkeyup的javascript检查mysql中是否存在用户名

时间:2019-05-19 22:35:26

标签: javascript python flask

在网站的注册页面上,我想运行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");
    }
};

我希望会发生一些事情。但没有任何作用。

1 个答案:

答案 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]')(按名称)。
  • 最后,我并不是一个真正的数据库专家,但是您的SQL语法使我感到困惑(其他用户:请随时在这里称呼我为白痴!)。您要传入一个在usersWHERE 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。