Showing posts with label check. Show all posts
Showing posts with label check. Show all posts

Sunday, 12 March 2023

How to check if an email address already exists with Node.js & MySQL

As the popularity of web applications continues to grow, it has become increasingly important to implement robust authentication systems that can verify user identities. One critical aspect of user authentication is ensuring that users do not create multiple accounts using the same email address. In this blog, we will explore how to use Node.js and MySQL to check if an email address already exists in a database.

Create Working Directory


First we have to make Node.js working envrionment, so first we have goes to directory from where we have to run node.js application. So in command prompt we have to run following command.


f:
cd node
mkdir email_exists_or_not


So this command will first goes to F: drive and then after it will goes into node directory and after this it will create email_exists_or_not directory in which we will make node.js application for check email address exists or not in MySQL database.

Next we want to download Node.js Express module, so in command prompt we have to run following command.


npm install express


So this command will download Node.js Express module under this email_exists_or_not directory. Now we can open this email_exists_or_not directory in text editor for create Node.js Email Exists or not with MySQL Database.


How to check if an email address already exists with Node.js & MySQL


MySQL database Structure


Below you can find MySQL database structure for create Node.js Email Exists or not Application with MySQL database.


--
-- Database: `testing`
--

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'John Smith', 'john_smith@gmail.com', '$2y$10$8am2/JEN1ARvndVsgl.YvegRpbrPZuhG0nA79k8sYNk5RdDNKNcS2', 'ksxo8HGQLFpUenlAFKfTfWMqk2cJuDhqrnoBa6ogZBf1ZbRwkNzAxE4AFn7o', '2018-03-05 00:29:44', '2018-03-05 00:29:44');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;


After this under email_exists_or_not directory, we have to create index.html file and under this file we have to create one HTML form for get email address details from user and after this we have to write JavaScript for send Ajax request to node.js application for check email exists or not in MySQL Database.

index.html - (Client-side (HTML with AJAX))

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Email Availability Checker</title>
    <link href="https://getbootstrap.com/docs/5.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
    <div class="container mt-5 mb-5">
        <h3>How to check if email address is already in use or not in Node.js ?</h3>
        <div class="mt-3 mb-3">
            <div class="card">
                <div class="card-header">Enter your eMail</div>
                <div class="card-body">
                    <form id="email-form">
                        <div class="mb-3">
                            <label for="email-input">Enmail Address</label>
                            <input type="email" id="email-input" class="form-control" />
                            <span id="email-message"></span>
                        </div>
                        <button type="submit" class="btn btn-primary" id="submit-btn">Check Email</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
<script>

const form = document.querySelector('#email-form');

const message = document.querySelector('#email-message');

form.addEventListener('submit', (event) => {

    event.preventDefault();

    const email = document.querySelector('#email-input').value;

    if(email != '')
    {
        const xhr = new XMLHttpRequest();

        xhr.open('POST', 'http://localhost:3000/check-email', true);

        xhr.setRequestHeader('Content-Type', 'application/json');
        
        xhr.onload = () => {

            if(xhr.status === 200)
            {
                const response = JSON.parse(xhr.responseText);

                if(response.emailExists)
                {
                    message.innerHTML = '<span class="badge bg-danger">Email is already in use</span>';
                }
                else
                {
                    message.innerHTML = '<span class="badge bg-success">Email is available</span>';
                }
            }
            else
            {
                message.innerHTML = '<span class="badge bg-info">Error checking email availability</span>';
            }
        };

        xhr.onerror = () => {
            message.innerHTML = '<span class="badge bg-info">Error checking email availability</span>';
        };

        xhr.send(JSON.stringify({ email }));
    }
    else
    {
        message.innerHTML = '<span class="badge bg-info">Please Enter Email</span>';
    }

});

</script>





Below you can find description of JavaScript Code part.


const form = document.querySelector('#email-form');

This line of code selects the HTML form element with an id of email-form and stores it in the form variable.


const message = document.querySelector('#email-message');

This line of code selects the HTML element with an id of email-message and stores it in the message variable.


form.addEventListener('submit', (event) => {

});

This line of code adds a listener to the submit event of the form element. When the form is submitted, the anonymous function inside the parentheses will be executed.


event.preventDefault();

This line of code prevents the default behavior of the form when it is submitted. By default, the form would submit the data to a server and reload the page. This code prevents that behavior so that we can use AJAX to check if the email is already in use without reloading the page.


const email = document.querySelector('#email-input').value;

This line of code selects the HTML input element with an id of email-input, gets its value (the email entered by the user), and stores it in the email variable.


if(email != '')

This line of code checks if the email variable is not an empty string.


const xhr = new XMLHttpRequest();

This line of code creates a new instance of the XMLHttpRequest object, which allows us to make HTTP requests from the browser.


xhr.open('POST', 'http://localhost:3000/check-email', true);

This line of code initializes the AJAX request. We are sending a POST request to the URL http://localhost:3000/check-email, which is the endpoint that will check if the email is already in use. The true parameter specifies that the request should be asynchronous.


xhr.setRequestHeader('Content-Type', 'application/json');

This line of code sets the Content-Type header of the request to application/json, which tells the server that we are sending JSON data in the request body.


xhr.onload = () => {

This line of code sets the onload event handler for the AJAX request. When the request is complete and a response has been received, the anonymous function inside the parentheses will be executed.


if (xhr.status === 200) {

This line of code checks if the response status code is 200, which means that the request was successful.


const response = JSON.parse(xhr.responseText);

This line of code parses the response text from JSON format into a JavaScript object and stores it in the response variable.


if (response.emailExists) {

This line of code checks if the emailExists property of the response object is true, which means that the email is already in use.


xhr.send(JSON.stringify({ email }));

This lines of code will send send data to http://localhost:3000/check-email this url.

After this, we have to create app.js file and under this file, we have to write Node JS Code for check Email Already exists or not in MySQL database.

app.js (Server-side (Node.js with Express and MySQL)))

const express = require('express');

const mysql = require('mysql');

const cors = require('cors');

const app = express();

const port = 3000;

const connection = mysql.createConnection({
	host : 'localhost',
	user : 'root',
	password : '',
	database : 'testing'
});

connection.connect((error) => {
	if(error)
	{
		console.log('Error connecting to MySQL database:', error);
		return;
	}
	console.log('Connected to MySQL database');
});

app.use(cors());

app.use(express.json());

app.post('/check-email', (request, response) => {

	const email = request.body.email;

	const sql = 'SELECT COUNT(*) AS count FROM users WHERE email = ?';

	connection.query(sql, [email], (error, results) => {

		const count = results[0].count;

		const emailExists = count === 1;

		response.json({ emailExists });

	});
});

app.listen(port, () => {
	console.log(`Server running on port ${port}`);
});


In this code, we create an Express app, set up a connection to a MySQL database, and define a route to check the email availability. The route expects a POST request with a JSON payload containing an email property. We use the mysql library to query the database and check if the email already exists in the users table. We then send a JSON response with a emailExists property that indicates whether the email is already in use or not.

Now for run above application, first we have to run app.js file. So we have goes to command prompt and run following command.


node app.js

This command will start Node.js server and for check output in the browser, we have to open index.html file in the browser.


file:///F:/node/email_exist_or_not/index.html

So now you can check email address has been exists or not in MySQL database by entering email address in textbox by using Node.js with MySQL database.

Conclusion


In this blog, we explored how to use Node.js and MySQL to check if an email address already exists in a database. We discussed the steps involved in setting up a MySQL database, installing the mysql module for Node.js, connecting to the MySQL database, and checking if an email address exists in the database. With these tools and techniques, you can implement a robust user authentication system that ensures each user has a unique email address.

Friday, 22 May 2020

Check Username or Email Availability using Vue.js with PHP



In this Vue.js tutorial, we will make PHP script for implement username or email live check for registration feature using Vue.js with Axios package for send Ajax request. This functionality is very common and it is required feature for most of the websites which is available online. If in your website, you have give login rights to user by entering their username or email and password, and get access into websites. Then at that time their username or email address must be unique. For this things when user has come into your websites for new account registration, then at that time we have to check username or email is available for registration or not for prevent duplicate registration with same username or email address.

For this problem, In this tutorial, we will use Vue.js with PHP script for check username of email already exists in our Mysql database or not. If Username or email is already exists then at that time we have stop user registration process by displaying message like particular email or username is already registered in our system try with different username or email address, and it will notify to the user regarding email address or username is already used by some another person before submitting of registration form data. Now in your mind one question will arise, how to check email ID or username exist or not in database, for this we will use Ajax with Vue.js and PHP script. When user has type something in username or email textbox then Vue.js will send Ajax request to PHP script with query like for search particular username or email address already exists in Mysql database.

This we can done when User has create account in our website, so while user enters their username or email id then Vue.js will triggered Ajax call and it will send request to PHP script at server side to check the availability status of email address or username. At PHP script, it will matches user data which they have enter with data available in Mysql database and it will send back response to Ajax request with availability of Username or email address which will be display on web page by using Vue.js without refresh of web page. So checking of availability of Email Address or Username of the user at the time registration is the best way to prevent duplicate registration in our web application. So from this tutorial, you can learn how to check email id or username availability of user from database, this things here we will use Ajax with Vue.js and PHP script. Below you can find the complete source code of how to check availability of the username or email address using ajax and Vue.js in PHP.


Check Username or Email Availability using Vue.js with PHP




Source Code


Mysql Database



--
-- Database: `testing`
--

-- --------------------------------------------------------

--
-- Table structure for table `tbl_login`
--

CREATE TABLE `tbl_login` (
  `id` int(11) NOT NULL,
  `first_name` varchar(100) NOT NULL,
  `last_name` varchar(100) NOT NULL,
  `gender` varchar(30) NOT NULL,
  `email` varchar(200) NOT NULL,
  `password` varchar(200) NOT NULL,
  `address` text NOT NULL,
  `mobile_no` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tbl_login`
--

INSERT INTO `tbl_login` (`id`, `first_name`, `last_name`, `gender`, `email`, `password`, `address`, `mobile_no`) VALUES
(1, 'John', 'Smith', 'male', 'johnsmith@gmail.com', '$2y$10$vgo3NI5w5cLB74E4B2sdVuKwdSpJL/EAeKSUdevkc/j3zl0sJAf5i', 'test address', '9632587410');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_login`
--
ALTER TABLE `tbl_login`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_login`
--
ALTER TABLE `tbl_login`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;





index.php



<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Live Username Or Email Availability using Vue.js in PHP</title>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
 </head>
 <body>
  <div class="container" id="registerApp">
   <br />
   <h3 align="center">Live Username Or Email Availability using Vue.js in PHP</h3>
   <br />
   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Register</h3>
    </div>
    <div class="panel-body">
     <div class="form-group">
      <label>Enter Your Email</label>
      <input type="text" v-model="email" class="form-control input-lg" :class="class_name" @keyup="check()" />
      <span :class="[dynamic_class ? 'success' : 'danger']">{{ message }}</span>
     </div>
     <div class="form-group">
      <label>Enter Your Password</label>
      <input type="password" v-model="password" class="form-control input-lg" />
     </div>
     <div class="form-group" align="center">
      <button type="button" :disabled="is_disable" class="btn btn-info btn-lg">Register</button>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

<style>
.success
{
 font-weight: bold;
 color:#009933;
 background-color: #ccffcc;
 border:1px solid #009933;
}

.danger
{
 font-weight: bold;
 color:#ff0000;
 background-color: #ffe6e6;
 border:1px solid #ff0000;
}
</style>

<script>

var application = new Vue({
 el:'#registerApp',
 data:{
  email:'',
  dynamic_class:true,
  message:'',
  password:'',
  is_disable:false,
  class_name:''
 },
 methods:{
  check:function(){
   var email = application.email.trim();
   if(email.length > 2)
   {
    axios.post('action.php', {
     email:email
    }).then(function(response){
     if(response.data.is_available == 'yes')
     {
      application.dynamic_class = true;
      application.message = 'This Email is Available for Registration';
      application.is_disable = false;
      application.class_name = 'success';
     }
     else
     {
      application.dynamic_class = false;
      application.message = 'This Email is already registred';
      application.is_disable = true;
      application.class_name = 'danger';
     }
    });
   }
   else
   {
    application.message = '';
    application.class_name = '';
    application.dynamic_class = true;
    application.is_disable = false;
   } 
  }
 }
});

</script>


action.php



<?php

//action.php

$connect = new PDO("mysql:host=localhost;dbname=testing", "root", "");

$received_data = json_decode(file_get_contents("php://input"));

$data = array();

if($received_data->email != '')
{
 $is_available = 'yes';

 $query = "
 SELECT * FROM tbl_login 
 WHERE email = '".$received_data->email."'
 ";

 $statement = $connect->prepare($query);

 $statement->execute();

 $total_row = $statement->rowCount();

 if($total_row > 0)
 { 
  $is_available = 'no';
 }

 $data = array(
  'is_available'  => $is_available
 );
}

echo json_encode($data);

?>


If you like this tutorial and you have found that this tutorial helpful then please don't forget to share this tutorial.