Ajax login validation system in PHP using jQuery’s animation

Posted on April 24, 2008 
Filed Under ajax, jquery, php, tutorial

Last time, I’ve showed you how to check user availability in Ajax using jQuery’s fading effect. But I’ve just shown the example without connecting the database and some people have faced problem with database connecting solution of that problem.In this post, I’ll show you how to use Ajax login system in php using jQuery and some animation as well.

View Demo

In this example, first of all we’ll validate the user login detail from ajax showing the messages with some animation. If authenticated, the user will be redirected to the secure page “secure.php”. If you’ll try to directly access “secure.php”, you can’t do that.

Now let’s look at the code how to do this,

HTML Code

< form method="post" action="" id="login_form" />
  < input name="username" type="text" id="username" value="" maxlength="20" />
  < input name="password" type="password" id="password" value="" maxlength="20" />
  < input name="Submit" type="submit" id="submit" value="Login" />
< /form >

As you can see in html code, we’ve created the form with id “login_form”.

And furthermore, the CSS code is same as the one available in the pervious post of checking user availability in ajax and php.

JavaScript Code for Ajax Login validation system in PHP

First of all we need to use the jQuery library in our code,

< script src="jquery.js" type="text/javascript" language="javascript"></script >

Now let’s look at the code in javaScript to call ajax and show the animated message with fading effects.

$("#login_form").submit(function()
{
	//remove all the class add the messagebox classes and start fading
	$("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000);
	//check the username exists or not from ajax
	$.post("ajax_login.php",{ user_name:$('#username').val(),password:$('#password').val(),rand:Math.random() } ,function(data)
        {
	  if(data=='yes') //if correct login detail
	  {
		$("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
		{
 		  //add message and change the class of the box and start fading
		  $(this).html('Logging in.....').addClass('messageboxok').fadeTo(900,1,
                  function()
		  {
  	  	     //redirect to secure page
		     document.location='secure.php';
		  });
		});
	  }
	  else
	  {
	  	$("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
		{
		  //add message and change the class of the box and start fading
		  $(this).html('Your login detail sucks...').addClass('messageboxerror').fadeTo(900,1);
		});
          }
       });
       return false;//not to post the  form physically
});

As you can see above this code is preety much similar to the previous post of checking username availability in ajax and php and you can see the explanation of the above code from that post. But in above code, where the user is validated, he’ll be logged into the “secure.php” using “document.location” in JavaScript.

$("#password").blur(function()
{
	$("#login_form").trigger('submit');
});

Well, as you can see above javaScript’s code, when focus is moved away from the password it also call the for sumit action. Basically whenever you hit tab button in password field, it starts validating the user detail using ajax.

PHP Code for Ajax Login validation system

First of all lets’s look at the code of the “ajax_login.php”.

//get the posted values
$user_name=htmlspecialchars($_POST['user_name'],ENT_QUOTES);
$pass=md5($_POST['password']); 

//now validating the username and password
$sql=”SELECT user_name, password FROM tbl_user WHERE user_name=’”.$user_name.”‘”;
$result=mysql_query($sql);
$row=mysql_fetch_array($result); 

//if username exists
if(mysql_num_rows($result)>0)
{
	//compare the password
	if(strcmp($row['password'],$pass)==0)
	{
		echo “yes”;
		//now set the session from here if needed
		$_SESSION['u_name']=$user_name;
	}
	else
		echo “no”;
}
else
	echo “no”; //Invalid Login

As you can see above, the user login detial is validated from the database. If the user login detail doesn’t exists, it just returns the “no” values and if the user login detial does exists the it just return “yes” values with setting username in session variable.

Finally, let’s look at the code of secure.php

if(empty($_SESSION['u_name']))
  header(”Location:index.html”);
//if logout then destroy the session and redirect the user
if(isset($_GET['logout']))
{
  session_destroy();
  header(”Location:index.html”);
}
echo ” <a href=’secure.php?logout’><b>Logout<b></a> “;
echo ” <div align=’center’>You Are inside secured Page</a> “;

As you can see above the code of “secure.php” is simpleforward. If the user is not authenticated by session then he’ll be redirected to “index.html”. And there is link for “logout” in this page form where user can destroy the seession.

Download Full Source Code

Implementation Guide:

To implement this code, dump the tbl_user “table” available in the zip file to your database and configure the database connection in “ajax_login.php”.

Popularity: 22% [?]

If you like this post then please subscribe to my full RSS feed . You can also subscribe by email and have new posts sent directly to your inbox.

Related Posts

» Jquery : Benefits, Examples and Free Ebook
» How to call php from ajax in every second using Jquery
» Image hover effect using jQuery
» Password protect a page using HTTP Authentication in PHP

Comments

21 Responses to “Ajax login validation system in PHP using jQuery’s animation”

  1. Gabe on April 24th, 2008 11:16 am

    I like your “error message” in the demo.

  2. Roshan on April 24th, 2008 3:41 pm

    ha ha…..thanks gabe I always get bored with same stuffs and always try to do something new…so I got bored with old type of traditionl messages like “Invalid Login details”, so kept like that…

  3. Kamy on April 24th, 2008 4:25 pm

    Another great tutorial! The files work here perfectly, however I do have a question:

    The field name in the form , on index.html page, is called username.
    In the ajax_login.php file, the values checked is user_name !

    If I try the field name to user_name, then the script fails!

    Can you explain that please?

    thanks , Kamy

  4. Roshan on April 24th, 2008 4:33 pm

    As you can see above javascript code, $.post(”ajax_login.php”,{ user_name:$(’#username’).val(),password:
    $(’#password’)

    Where the values of the element with id “username” is posted with the name of “user_name”. That where the confusion is.

    Just change here as well..

  5. Kamy on April 24th, 2008 6:06 pm

    Thanks! This was a great tutorial. I’ll be integrating this feature in my projects.

    :)

  6. Roshan on April 24th, 2008 6:08 pm

    welcome kamy

  7. Dale on April 25th, 2008 3:04 am

    This is nice, but it really breaks the back button, and is very unRESTful. I’m quite confident you can fix it to be both!

  8. Roshan on April 25th, 2008 5:15 am

    dear dale…I couldn’t get whare do you mean by “breaks back button”..can you please explain it ..so that I can fix the problem

  9. Ranga Sarker on April 30th, 2008 8:02 am

    how can i input other user user name and password in using logon system

  10. Roshan on April 30th, 2008 8:09 am

    I’m not clear with your question can you please clarify it…

  11. Ranga Sarker on April 30th, 2008 8:16 am

    Thank you for your email my question is when i open database the i see “d6dfb33a2052663df81c35e5496b3b1b” this pass word using “Admin” user so If i won’t to insart another user name and password then what can I do like if I wont to insart user Name “ranga” password like “229229″ i insart in database but it’s show error what can i do

  12. Roshan on April 30th, 2008 9:08 am

    well, password is stored in database using md5() has mechanism… so do echo md5(’229229′); in php, that is the password to be stored in database.

  13. Kathy on May 4th, 2008 7:55 pm

    OK I must be doing something wrong. The only thing I’ve done differently with your code is to put the form inside a div. When the user goes to an index page and clicks on a link, i load with form with a jquery command. Form loads fine. However, it seems as though the doc ready jquery stuff is not loading at all in the div - I even put an alert in right after the document.ready command and the alert does not display. If i continue to fill out the form and press submit, i’m just returned to my index page. Any idea what is going wrong?

  14. Roshan on May 5th, 2008 4:17 am

    I must have a feeling that you’ve error in javascript…try to open the page in internet explorer and check weather there is javascript error or not…and furthermore always put form tag outside the div which will ensure the proper DOM format.

  15. Pomba on May 6th, 2008 7:05 am

    Great script. Tho, after I’ve logged in I get this message -

    “Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/xdxpnet/public_html/bjornis/secure.php:6) in /home/xdxpnet/public_html/bjornis/secure.php on line 180″

    How to fix?

  16. Roshan on May 6th, 2008 12:11 pm

    well…..sesssion_start() statement should be in the very first line of the page…

  17. Kathy on May 13th, 2008 12:00 am

    everything looks almost like it is working - one small issue. when i return from ajax_login.php, and the user has entered the correct userid and password (I’ve checked this writing this info to a log file) it seems as though the “yes” that is echoed in not being returned. As soon as I get to index.html, instead of “yes” being returned and the user logged in, the code executes at the else (not the if(data==’yes’) portion. Any idea why the correct info is not being returned via the ajax call?

  18. Allan on May 14th, 2008 8:29 pm

    I’m also having the same issue as Kathy. Everything works fine but the ‘yes’ response is not being recognized by the if(data == ‘yes’) even though Firebug shows the response is yes and if I display the “data” it prints out ‘yes’ but it will go directly to the “else” portion.

    Thanks,
    Allan

  19. Roshan on May 15th, 2008 9:08 am

    I think some space is there in the data value….try using if(jQuery.trim(data)==’yes’) , and hope this helps

  20. Allan on May 15th, 2008 12:56 pm

    Thanks! It works now!

    Cheers,
    Allan

  21. ehab on May 16th, 2008 5:54 am

    thanks very much

Leave a Reply