проверка, существует ли имя пользователя в mysql через javascript с помощью input.onkeyup - PullRequest
0 голосов
/ 20 мая 2019

На странице регистрации сайта я хочу запустить javascript, чтобы увидеть, существует ли имя пользователя в базе данных.Это должно произойти.Если он совпадает, должно быть 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 Ответ

2 голосов
/ 20 мая 2019

Хорошо, здесь я вижу кучу вопросов.Во-первых, вы пытаетесь выполнить асинхронную операцию в синхронном контексте.

Отказ от ответственности: я не PHP человек (mysql_query кажется PHP?), Поэтому, если вы пытаетесь это сделать, я, возможно, не ваш парень.Если это , а не , то есть, если вы ожидаете, что mysql_query будет функцией, вам нужно будет определить это где-то еще.

Давайте начнем с console.log() ing каждой вещи:

  • console.log вашего $result сразу после его (возможно) генерирования.Что это говорит?Я собираюсь догадаться , это «неопределено» или «ноль», поскольку запросы к базе данных почти всегда будут асинхронными.
  • console.log ваш input.value.Это то, что вы думаете, должно быть?Я не могу сказать вам, сколько раз я совершал такие глупые поступки, как «myDiv» с орфографической ошибкой, как «my-div» или что-то в этом роде.Поскольку «username» не является стандартным элементом DOM, я очень надеюсь, что вы хотели бы сделать что-то вроде document.querySelector('#username') (по идентификатору) или document.querySelector('input[name=username]') (по имени).
  • Наконец, я на самом деле не парень БД, но ваш синтаксис SQL смущает меня (другие пользователи: не стесняйтесь называть меня здесь идиотом!).Вы передаете строковый литерал, который выглядит в users таблице WHERE username = username.Однако в этом и заключается проблема (при условии, что в вашей таблице действительно есть столбец «username»), я считаю, что я буду искать только тех пользователей, чье имя пользователя буквально «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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...