how can I check username exists in db via a jquery keyup - php

Hi I'm creating a form that contains username password etc.. and I used jquery to validate the form and I want to check that the username is already present in the mysql database. if it is present then the form should not be submitted.
Here is my code so far:
<form id="register" name="register" action="somewhere.php" method="post" >
<label for ="Username"> Username </label><br>
<input type="text" class="register-control" id="Username" name="Username" autocomplete="off" placeholder="Enter Username"> <br>
<div class="username_avail_result" id="username_avail_result"></div><br>
<label for ="Password"> Password </label><br>
<input type="password" class="register-control" id="password" name="password" placeholder="Enter Password" ><br><br>
<label for ="Confirm-Password"> Confirm Password </label><br>
<input type="password" class="register-control" id="Confirm_Password" name="Confirm_Password" placeholder="Confirm Password" ><br>
<label for="email" > Email </label><br>
<input type ="email" class="register-control" id="email" name="email" placeholder="Enter Valid Email"><br><br>
<button type="submit" >Submit</button>
</form>
And the jquery is:
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#Username').keyup(function(){ // Keyup function for check the user action in input
var Username = $(this).val(); // Get the username textbox using $(this) or you can use directly $('#username')
var UsernameAvailResult = $('#username_avail_result'); // Get the ID of the result where we gonna display the results
if(Username.length > 2) { // check if greater than 2 (minimum 3)
UsernameAvailResult.html('Loading..'); // Preloader, use can use loading animation here
var UrlToPass = 'action=username_availability&username='+Username;
$.ajax({ // Send the username val to another checker.php using Ajax in POST menthod
type : 'POST',
data : UrlToPass,
url : 'checker.php',
success: function(responseText){ // Get the result and asign to each cases
if(responseText == 0){
UsernameAvailResult.html('<span class="success">Number available</span>');
}
else if(responseText > 0){
UsernameAvailResult.html('<span class="error">Number already taken</span>');
}
else{
alert('Problem with sql query');
}
}
});
}
});
$("#register").validate({
errorElement: 'div',
rules:{
"Username":{
required: true,
minlength:5
},
"password":{
required:true,
minlength:5
},
"Confirm_Password":{
required:true,
equalTo: "#password"
},
"email":{
required:true,
}
},
messages: {
Username:{
required: "Please provide a username",
minlength: "Your Username must be at least 5 characters long"
},
password: {
required: "Please provide a password",
minlength: "Your password must be at least 5 characters long"
},
Confirm_Password: {
required: "Please provide a confirm password",
equalTo: "Please enter the same password as above"
}
},
email:{
required: "Please provide a valid email",
}
});
});
</script>
Both work super, my doubt is how can I merge both, and also if the username is already taken the form should not submitted.

run a query in your php file to get all users with the current email i.e."example#example.com" and username i.e. "example" if you get any rows then it exists therefore don't add it, otherwise, add it!
$_GET['email'] = $email;
$result = mysql_query("SELECT * FROM users WHERE email='$email'");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
if(mysql_num_rows($result) >= 1) {
//show already registered
//you can either return false or change the return string/array to "registered"
} else {
mysql_query('INSERT INTO users ..............);
}

You could clear the username if its taken, thus causing the validation to fail
success: function(responseText){ // Get the result and asign to each cases
if(responseText == 0){
UsernameAvailResult.html('<span class="success">Number available</span>');
}
else if(responseText > 0){
UsernameAvailResult.html('<span class="error">Number already taken</span>');
//clear username
$('#Username').val('');
}
else{
alert('Problem with sql query');
//clear username
$('#Username').val('');
}
}
});

You can check the username on Keyup and form submit and prevent the form submit when username exists.
$("#register").submit(function( event ) {
if(usernameExists($('#Username').val()))
event.preventDefault();
});
$('#Username').keyup(function(){
usernameExists($(this).val();
});
usernameExists() should have all your current validation and ajax code as in your $('#Username').keyup(function(){ });

Related

showing toastr after checking if the password and user name is correct from database

as a practice i made a log in form and linked it with a MySQL database and am trying to show a toastr according to to the result that is if the username and password are correct or not so when the input fields are empty it's showing the error toaster but when i add any thing in the fields it always shows the success toastr i don't know how to fix that
here is my html code
<form class="sing_in_form " method="POST" action="#">
<input id="email" type="text" name="username" placeholder="Email">
<input id="password" type="text" name="password" placeholder="password">
<!--log in button-->
<button type="submit" id="btn" name="submit " value="LOGIN" class="btn-login">Sign In</button>
<p class="sign_up">Don't have account? Sign up</p>
</form>
php
if(isset($_POST['username'])){ //username from the form
$uname=$_POST['username'];//username from the form
$pass_word=$_POST['password'];
$sql="SELECT * FROM `loginform2` WHERE user='".$uname."' And Pass='".$pass_word."' limit 1";
$result= $con->query($sql);
}
and my js code
$(document).ready(function(){
$("#btn").click(function(){
var name = $("#email").val();
var password = $("#password").val();
// Returns successful data submission message when the entered information is stored in database.
var dataString = 'username='+ name + '&password='+ password;
if(name==''||password=='')
{
toastr.error("fill the feilds");
}
else
{
// AJAX Code To Submit Form.
$.ajax({
type: "POST",
url: "login(2).php",
data: dataString,
cache: false,
success: function(){
toastr.success("logged in");
}
});
}
return false;
});
});
Do something like this.
Put if(mysqli_num_rows($result) ===1 {echo 1}; after $result= $con->query($sql);
And then edit your ajax request as
success: function(data){
if(data ==1){
toastr.success("logged in");
}else{
//error message goes here
}
}

How to failed the form if the passwords don't match?

I'm doing a register form for sending to database. However, there are two inputs of password, first is normal password and another one is to confirm password. Well, I can make jQuery to show when a user type a password which doesn't match with normal password, it will show red warning like PASSWORD NOT MATCH. Even though the passwords don't match, but a user can click a button to send a form into database successfully. How to stop a user from sending a form when the password don't match?
HTML is here.
<form id="myForm" action="registerAction" name="register" method="POST">
<p> <label class="inputField" > Password : </label> </p>
<p> <input class="registerField" id="textpwd" name="pwd" required="required" type="password" placeholder="Your password"/> </p>
<p> <label class="inputField" > Confirmation Password : </label> </p>
<p> <input class="registerField" id="textcfmpwd" name="mpwd" onChange="checkPasswordMatch();"required="required" type="password" placeholder="Confirmation password"/> <span class="warning" id="pwdWarning"> </span> </p>
<p> <input class="registerButton" type="submit" value="REGISTER"> </p>
</form>
Well, to show error like PASSWORD NOT MATCH is below.
function checkPasswordMatch() {
var password = $("#textpwd").val();
var confirmPassword = $("#textcfmpwd").val();
if (password != confirmPassword)
$("#pwdWarning").html("Passwords do not match!").css('color', 'red');
else
$("#pwdWarning").html("Passwords match.").css('color', 'green');
}
$(document).ready(function () {
$("#textcfmpwd").keyup(checkPasswordMatch);
});
In conclusion, how to stop a user from sending a form when the password don't match? Any ideas?
You can try this
$('#myForm').submit(function(e){
var bool = validatePassword();
if(!bool)
e.preventDefault(); // will stop the form from submitting
else
return true; //continue to submit form
});
Then for the validatePassword function
function validatePassword(){
var password = $("#textpwd").val();
var confirmPassword = $("#textcfmpwd").val();
if (password != confirmPassword){
$("#pwdWarning").html("Passwords do not match!").css('color', 'red');
return false;
}
else{
$("#pwdWarning").html("Passwords match.").css('color', 'green');
return true;
}
}
As it is at the moment, you'll need a bit of code duplication.
$('#myForm').submit(function(evt) {
var password = $("#textpwd").val();
var confirmPassword = $("#textcfmpwd").val();
if (password != confirmPassword){
evt.preventDefault();
}
});
A better solution is to refactor your checkPasswordMatch a bit, to have it return true or false, and work with that.
function passwordsMatch(){
return $('#textpwd').val() == $('#textcfmpwd').val();
}
$(document).ready(function () {
$("#textcfmpwd").keyup(function(){
if(!passwordsMatch()){
$("#pwdWarning").html("Passwords do not match!").css('color', 'red');
} else {
$("#pwdWarning").html("Passwords match.").css('color', 'green');
}
});
$('#myForm').submit(function(evt) {
if(!passwordsMatch()){
evt.preventDefault();
}
});
});
Note that this is only client-side scripting - you should do the same check server-side (PHP/C#/whatever).

How do I post HTML form data to a php file another server using jQuery

I am a bit of a noob with jQuery and am learning for Uni.
I am working on a HTML web site with an associated HTML mobile application that I will compile in phonegap build.
I have a HTML form that I want to include on both the site and the app which I have coded and is successfully validating with jQuery. I would also like to post the form data with jQuery but am struggling to find how best to achieve this.
My form looks like this
<form action="http://myaddress.com/process.php" method="post" name="jform" id="jform">
<div>
<label for="name"><b>Name:</b></label><br>
<input type="text" name="name" id="name">
</div>
<div>
<label for="dob"><b>Date of Birth:</b></label><br>
<input type="text" name="dob" id="dob">
</div>
<div>
<label for="visit"><b>Date of Visit:</b></label><br>
<input type="text" name="visit" id="visit">
</div>
<div class="labelBlock">
<b>Favourite Exhibit:</b>
<div class="indent">
<input type="radio" name="fave" id="exhibit1" value="Exhibit1">
<label for="exhibit1">Exhibit 1</label><br>
<input type="radio" name="fave" id="exhibit2" value="Exhibit2">
<label for="exhibit2">Exhibit 2</label><br>
<input type="radio" name="fave" id="exhibit3" value="Exhibit3">
<label for="exhibit3">Exhibit 3</label>
</div>
</div>
<div>
<label for="comment"><b>Comments:</b></label><br>
<textarea name="comment" id="comment" rows="10" cols="40" draggable="false"></textarea>
</div>
<div id="center-button">
<input name="submit" type="submit" id="submit" value="Submit" class="center-text">
</div>
</form>
My validation script looks like this:
<script>
$(document).ready(function() {
$('#jform').validate({
rules: {
name: "required",
dob: "required",
visit: "required",
fave: "required",
comment: "required"
}, //end rules
messages: {
name: {
required: "Please tell us your name"
},
dob: {
required: 'Please select your Date of Birth'
},
visit: {
required: 'Please select the date you visited'
},
fave: {
required: 'Please select your favourite exhibit'
},
comment: {
required: 'Please tell us about your visit'
}
},//end messages
errorPlacement: function(error, element) {
if ( element.is(":radio") ) {
error.appendTo( element.parent());
} else {
error.insertAfter(element);
}
}
}); // end validate
submitHandler: function(form) { //This is the submit handler.
var name = $('#name').val();
var dob = $('#dob').val();
var visit = $('#visit').val();
var fave = $("input[name='fave']:radio:checked").val();
var comment = $('#comment').val();
$.ajax({
type: 'POST',
url: 'process-post.php',
data: {name:name, dob:dob, visit:visit, fave:fave, comment:comment},
success: function(data1){
if (data1 == 'success') {
window.location.href = 'index.html';
}
else {
alert('Oops! It looks like something has gone wrong. Please try again.');
}
}
});
}}); // end ready
I really am struggling with this so would appreciate any help.
My PHP Looks like this
<?php # PROCESS JOURNAL ENTRY.
# Check form submitted.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
# Open database connection.
require ( '../connect_db.php' ) ;
# Execute inserting into 'forum' database table.
$q = "INSERT INTO journal(name,dob,visit,fave,comment,date)
VALUES ('{$_POST[name]}','{$_POST[dob]}','{$_POST[visit]}','{$_POST[fave]}','{$_POST [comment]}',NOW() )";
$r = mysqli_query ( $dbc, $q ) ;
# Report error on failure.
if (mysqli_affected_rows($dbc) != 1) { die ('Error' . mysqli_error($dbc)); } else { echo "success"; }
# Close database connection.
mysqli_close( $dbc ) ;
}
?>
Yes he is correct jquery's ajax will accomplish this or http post. You will use one of the mentioned methods to get the data from the HTML form and send it to the sever.
You will need jQuery ajax. This is a very powerful function that is used any time jQuery validation is used. It also lets you submit to the PHP file and get the results without refreshing the page.
EDIT:
Depending on the complexity of your project, ajax may be overkill. You can just normally submit the form after it is validated like this:
<script>
$(document).ready(function() {
$('#jform').validate({
rules: {
name: "required",
dob: "required",
visit: "required",
fave: "required",
comment: "required"
}, //end rules
messages: {
name: {
required: "Please tell us your name"
},
dob: {
required: 'Please select your Date of Birth'
},
visit: {
required: 'Please select the date you visited'
},
fave: {
required: 'Please select your favourite exhibit'
},
comment: {
required: 'Please tell us about your visit'
}
},//end messages
errorPlacement: function(error, element) {
if ( element.is(":radio") ) {
error.appendTo( element.parent());
} else {
error.insertAfter(element);
}
}
}); // end validate
submitHandler: function(form) { //This is the submit handler.
$(form).submit();
}
}); // end ready
</script>
Here is the part that I add:
submitHandler: function(form) { //This is the submit handler.
$(form).submit();
}
This will submit a form normally, meaning that it will run the PHP script and then refresh the page.
If you decide you want to use ajax, you can just replace $(form).submit(); with this:
var name = $('#name').val();
var dob= $('#dob').val();
var visit = $('#visit').val();
var fave = $("input[type='radio'][name='fave']:checked").val();
var comment = $('#comment').val();
$.ajax({
type: 'POST',
url: 'http://myaddress.com/process.php',
data: {name:name, dob:dob, visit:visit, fave:fave, comment:comment},
success: function(data){
if (data == 'success') {
//do something
}
else {
//do something
}
}
});
The data that I am using in the success portion of the function is the value returned from the PHP script. Since you mentioned comments, I am assuming that you PHP is not returning data, but more or less a completion message. In that case, you would just have your PHP echo 'success'; if it was successful. Then fill in the "do somethings" in the jQuery.

jQuery remote validation always returning false

I have the below code for implementing a very basic login system on my site (using jQuery Mobile). The problem is that, when submitting the form through jQuery Mobile (and therefore using the validator), the validator always returns false and throws an error, even if the password is correct. When I wrote a separate form with nothing other than the two textboxes and a submit button and ran it directly to the validation script, it returned the correct value of true or false depending on the given password. What's wrong with the jQuery script that causes it to always return false?
HTML/JS:
<form action="logins.php" method="POST" id="loginForm" name="loginForm" data-ajax="false">
<label for="email" class="ui-hidden-accessible">Email Address:</label>
<input type="text" id="email" name="email" value="" placeholder="Email Address" />
<label for="pass" class="ui-hidden-accessible">Password:</label>
<input type="password" id="pass" name="pass" value="" placeholder="Password" />
<input class="submit" data-role="submit" type="submit" value="Submit" />
</form><br>
<br>
Return to home page
<script>
$('#login').bind('pageinit', function(event) {
$('#loginForm').validate({
onkeyup: false,
onclick: false,
onfocusout: false,
rules: {
email: {
required: true,
email: true
},
pass: {
required: true,
remote: {
url: "passcheck.php",
type: "post"
}
}
},
messages: {
email: {
required: "You must enter an email address.",
email: "You must enter a valid email address."
},
pass: {
required: "You must enter a password.",
remote: "Your username/password combination is incorrect."
}
}
});
});
</script>
PHP (passcheck.php):
<?php
require("common.php");
$query = "SELECT password FROM users WHERE email = :email";
$query_params = array(':email' => $_POST['email']);
try {
$stmt = $conn->prepare($query);
$stmt->execute($query_params);
} catch(PDOException $ex) {
die("Failed to run query.");
}
$hash = $stmt->fetchColumn();
if(crypt($_POST['pass'], $hash) === $hash){
echo "true";
} else {
echo "false";
}
You should be using the submitHandler to write a function to handle the actual checking of the username/password via AJAX using AJAX Form: http://www.malsup.com/jquery/form/#api.
You don't have to use AJAX Form and can write your own method to handle the login checking using the jQuery ajax() method, but AJAX Form has it prewritten for you.
Also, you don't need the onkeyup, onblur, etc. there - all you need is onsubmit set to true. Your code should look like this:
<script>
$('#login').bind('pageinit', function(event) {
$('#loginForm').ajaxForm(); // Set as an AJAX Form - See Documentation Above
$('#loginForm').validate({
onsubmit: true,
rules: {
email: {
required: true,
email: true
},
pass: {
required: true
}
},
messages: {
email: {
required: "You must enter an email address.",
email: "You must enter a valid email address."
},
pass: {
required: "You must enter a password.",
}
},
submitHandler: function(form) {
$("#loginForm").ajaxSubmit();
}
});
});
</script>

Username taken check with jquery validate plugin

I am trying to use the username taken or not using jquery validate plugin. but dosent seems to work. I would like to know where I went wrong, all other validation works fine. except for this.
jquery validate plugin page: http://bassistance.de/jquery-plugins/jquery-plugin-validation/
javascript
<script type="text/javascript">
$(document).ready(function(){
$("#register").validate({
debug: false,
rules: {
username: {
required: true,
minlength: 2,
remote: "users.php"
},
email: {
required: true,
email: true
},
password: {
required: true,
minlength: 5
},
confirm_password: {
required: true,
minlength: 5,
equalTo: "#password"
}
},
messages: {
username: {
required: "Please enter a username",
minlength: "Your username must consist of at least 2 characters",
remote: jQuery.format("{0} is already in use")
},
email: "A valid email will help us get in touch with you.",
},
password: {
required: "Please provide a password",
minlength: "Your password must be at least 5 characters long"
},
confirm_password: {
required: "Please provide a password",
minlength: "Your password must be at least 5 characters long",
equalTo: "Please enter the same password as above"
},
submitHandler: function(form) {
// do other stuff for a valid form
$.post('adduser.php', $("#register").serialize(), function(data) {
$("#register").fadeOut('fast', function(){
$('#results').html(data);
});
});
}
});
});
</script>
users.php
<?php
$request = $_REQUEST['username'];
//usleep(150000);
$query = mysql_query("SELECT * FROM users WHERE username ='$username'");
$result = mysql_num_rows($query);
if ($result == 0){
$valid = 'true';}
else{
$valid = 'false';
}
echo $valid;
?>
register.php
<form name="register" id="register" method="post" action="">
<section>
<label for="username">Username:</label>
<div>
<input type="text" tabindex="1" class="input" id="username" name="username" value=""/>
</div>
</section>
<!--#-->
<section>
<label for="email">email</label>
<div>
<input type="text" tabindex="2" class="input" id="email" name="email" value=""/>
</div>
</section>
<!--#-->
<section>
<label for="password">Password</label>
<div>
<input type="password" tabindex="3" class="input" id="password" name="password" value=""/>
</div>
</section>
<!--#-->
<section>
<label for="confirm_password">Confirm Password</label>
<div>
<input type="password" tabindex="4" class="input" id="confirm_password" name="confirm_password" value=""/>
</div>
</section>
<!--#-->
<br/>
<input type="submit" tabindex="5" id="submit" value="REGISTER" />
</form>
<div id="results"> </div>
thanks in advance.
I have the same but I use their validation and this to check if username exists. It works great.
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//the min chars for username
var min_chars = 3;
//result texts
var characters_error = 'username must have atleast 3 characters';
var checking_html = 'searching...';
//when button is clicked
$('#check_username_availability').click(function(){
//run the character number check
if($('#username').val().length < min_chars){
//if it's bellow the minimum show characters_error text
$('#username_availability_result').html(characters_error);
}else{
//else show the cheking_text and run the function to check
$('#username_availability_result').html(checking_html);
check_availability();
}
});
});
//function to check username availability
function check_availability(){
//get the username
var username = $('#username').val();
//use ajax to run the check
$.post("checkuser.php", { username: username },
function(result){
//if the result is 1
if(result == 1){
//show that the username is available
$('#username_availability_result').html('<span class="is_available"><b>' +username + '</b> is available</span>');
//this is the id of my save button it'll display if available
$('#newacct').css("display", "inline");
}else{
//show that the username is NOT available
$('#username_availability_result').html('<span class="is_not_available"><b>' +username + '</b> is not available</span>');
}
});
}
</script>
First, you have an extra } that is closing your messages option prematurely, leading to the remaining messages being ignored. You should move this } after the confirm_password message block. Second, you should be calling jQuery.validator.format rather than jQuery.format. I believe this is why this particular validation rule doesn't work. Correct these and see if it works for you.
To answer the OP, you might want to use $_GET. Also, mysql_num_rows has been deprecated as of PHP 5.5.0, so you'll probably want to update that. You could just check if the query returns false.
<?php
$request = $_GET['username'];
//usleep(150000);
$query = mysql_query("SELECT * FROM users WHERE username ='$username'");
if ($query == false){
$valid = 'true';} // username available
else{
$valid = 'false'; // username unavailable
}
echo $valid;
?>
Try this......
JS
$("#register").validate({
debug: false,
rules: {
username: {
required: true,
minlength: 6,
remote: {
url: "Your PHP",
type: "post",
data: {
funct: 'user_check',
username: function() {
return $( "#username" ).val();
}
}
}
},
messages: {
username: {
required: "Please enter a username",
minlength: "Your username must consist of at least 2 characters",
remote: jQuery.format("{0} is already in use")
}
});
});
PHP
<?php
function user_check(){
$username = $_POST['username'];
$query = mysql_query("SELECT * FROM users WHERE username ='$username'");
if ($query == false){
$valid = 'true';} // username available
else{
$valid = 'false'; // username unavailable
}
echo $valid;
}
?>
May help..

Categories