Username availability check using PHP and jQuery


Most common thing clients ask me to implement is to check if username that the user is trying to use during registration process is already taken.

This sounds complicated, but it really is not. jQuery will help us to achieve this functionality using very few lines of code.

I prefer AJAX approach as it is cool and users love it, as they know that username is free or taken even before they submit the actual form.

So let us create a table in mySQL to hold some user data:

`name` varchar(255) NOT NULL,
`username` varchar(150) NOT NULL,
`email` varchar(100) NOT NULL',
`pass` varchar(100)  NOT NULL',

This is small and typical users table. Now let’s create a small form for our example:

<form action="do_check.php" method="post"> 
    <input id="username_box" class="search_box" name="username" type="text" />
    <input id="sub" type="submit" value="Check" />

In real life application this would be a bigger form, but I want to concentrate only on important things and that is username field. As you noticed, I already added a div with id of “results” which will hold our result data.

Now some jQuery magic:

$(function() {
$("#sub").click(function() {
    // getting the value that user typed
    var checkString    = $("#username_box").val();
    // forming the queryString
    var data            = 'user='+ checkString;

    // if checkString is not empty
    if(checkString) {
        // ajax call
            type: "POST",
            url: "do_check.php",
            data: data,
            beforeSend: function(html) { // this happen before actual call
            success: function(html){ // this happen after we get result
return false;

This jQuery code is making an AJAX call to PHP file do_check.php which is actually checking for username availability and return info about it. And here it is:

//if we got something through $_POST
if (isset($_POST['user'])) {
    // here you would normally include some database connection
    $db = new db();
    // never trust what user wrote! We must ALWAYS sanitize user input
    $username = mysql_real_escape_string($_POST['user']);
    // build your query to the database
    $sql = "SELECT count(*) as num FROM users WHERE username = " . $username;
    // get results
    $row = $db->select_single($sql);
    if($row['num'] == 0) {
        echo 'Username <em>'.$username.'</em> is available!';
    } else {
        echo 'Username <em>'.$username.'</em> is already taken!';

Basically, code is checking in the database how many rows are in the users table with the username that we typed. If there are no such rows, the username is available.

The demo is available here

About the author

Zvonko Biškup

A passionate web developer with more than 13 years experience in PHP and other web related technology. My main interest is WordPress and new PHP frameworks.
Owner of Influendo Programming.
Enjoys exploring new stuff and possibilities, using new technologies and just having fun developing awesome stuff.

<span class="dsq-postid" data-dsqidentifier="242">8 comments</span>