2010-05-15 3 views
1

Я хочу знать, как я могу проверить с помощью Javascript, что если пользователь ввел имя пользователя во время создания учетной записи, уже присутствует в базе данных и просит пользователя набрать любое другое имя пользователя?Как проверить имя пользователя с помощью Javascript?

+2

Короткий ответ; с только javascript: вы не можете –

+0

Итак, что заставляет кого-то использовать tamperdata, чтобы опубликовать собственное имя пользователя после проверки JavaScript на стороне клиента? – rook

+0

@ The Rook: Это приличный момент, но само собой разумеется, что проверка на стороне клиента не должна быть последней строкой защиты для чего-либо. Это не означает, что не должно быть проверки на стороне клиента. Это полезно пользователю, а не целостности данных. –

ответ

11
  1. Приложить слушателя к blur событие для <input /> элемент.
  2. Использование AJAX отправить запрос на сервер (со значением поля в качестве параметра)
  3. На проверку на стороне сервера ли данное имя пользователя уже используется или не
  4. Основываясь на дисплее отклика сервера (или нет) Это имя пользователя уже используется сообщение

JQuery (Я слишком ленив для чистого JS) + PHP пример кода:

<form ...> 
    ... 
    <input type="text" name="username" id="input-username" /> 
    <p class="error"></p> 
    ... 

$("#input-username").blur(function() { 
    $.post("/check-username.php", { username: $(this).val() }, function(data) { 
     if ("0" == data) { /* username in use */ 
      $(this).next("p").text("This username is already in use.</p>"); 
     } else {   /* username is fine */ 
      $(this).next("p").empty(); 
     } 
    }); 
}); 

<?php 

$username = $_POST['username']; 

// check whether given username exists in database 
$usernameExists = ...; 

echo $usernameExists ? '0' : '1'; // 0 if exists, 1 if not. 
4

Ответ AJAX. Если вы должны подтвердить наличие базы данных, вам необходимо сделать звонок на сервер. Единственный способ сделать это (EDIT: правильно) без перезагрузки страницы AJAX. Как вы его реализуете, это зависит от того, какие библиотеки javascript вы используете, если таковые имеются, и каков ваш сервер. Я предлагаю вам немного поискать и прочитать на нем - это довольно распространенный случай использования.

+0

* Единственный способ сделать это без перезагрузки страницы - AJAX. * Ну ... технически AJAX - не единственное решение, но это единственное, что стоит рассмотреть. – Crozin

+0

@Crozin: Это правда. Вы могли бы сделать что-то вроде загрузки каждого имени пользователя на странице или что-то вроде AJAX-esque, как дурацкий iframe. Существует бесконечное количество неправильных способов сделать это. –

-2

Ajax не может быть единственное решение, поскольку имена пользователей общедоступны. Простым способом является просто иметь RDF/XML-документ в какой-то момент (который просто обновляется с каждым добавленным пользователем), в котором есть список всех пользователей вашего сайта, с которыми вы легко можете просто переходить с Javascript DOM, чтобы узнать, является ли этот пользователь уже используется. Вы также заставляете их платить вычислительную мощность, а не вы, в зависимости от того, насколько вы хороши, это преимущество или недостаток.

+2

Возможно, но это решение довольно плохо. Это стоимость O (n) для поиска, огромная стоимость полосы пропускания, тонны дорогостоящих обновлений документов (с учетом ресурсов) и т. Д. Напротив, лучшее решение использует гораздо меньшую пропускную способность и работает быстрее и эффективнее. –

+0

Обновления документов - это нулевой аргумент, что XML-файлы, очевидно, будут динамически генерироваться каждый раз, когда он запрашивается, также он может быть использован по другим причинам, поэтому я предложил RDF/XML, так же как эту страницу, на которую я печатаю является.Пропускная способность также ниже, чем можно было ожидать. Выделенный RDF-файл для размещения всех имен этого сообщества будет примерно на 1/4 размера в символах того, что нужно загрузить для отображения этой страницы. – Zorf

+1

Помимо плохой производительности, на самом деле это ортогонально использовать AJAX. Вы можете использовать AJAX или другое решение (например, скрытое iframe) для прямого поиска (/ isUsernameTaken? Username = foo) или для доступа к XML-документу (/allUserNames.xml). –

1

Лично я хотел бы использовать плагин проверки JQuery, чтобы сделать вещи простыми. http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Но в целом он будет состоять из небольшого запроса AJAX к серверу (то есть. JSON объект) с именем пользователя и сделать «поиск» в базе данных и возвращать либо истина/ложь после того, как пользователь нажимает введите или в текстовое поле (присоедините прослушиватель событий). Затем в ответе отклика измените элементы DOM по вашему выбору, чтобы указать своим пользователям, существует ли имя учетной записи в базе данных или нет.

Смежные вопросы