In this shot, we will create a user login system in our PHP application. Almost every application we use today requires an authentication system.
Let’s get started.
User table and insert at least one userWe can create a database set by using the following script:
DROP DATABASE IF EXISTS `university`;CREATE DATABASE IF NOT EXISTS `university`;USE `university`;DROP TABLE IF EXISTS `User`;CREATE TABLE `User` (`id` INT unsigned NOT NULL AUTO_INCREMENT,`username` VARCHAR(50) COLLATE utf8_unicode_ci NOT NULL,`password` VARCHAR(150) COLLATE utf8_unicode_ci NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `User` (`id`, `username`, `password`) VALUES (1, "admin", "admin123");
Note: We can learn more about SQL in this shot.
To build a basic login system we’ll use the following files structure:
index.php: The landing page with the login form and the processing code.home.php: The dashboard for the connected user.config.php: The database connection.Our workspace must be clean to create all those files.
For CLI, use the following commands:
# create the directory for your program
mkdir dashord
cd dashbord
# create files
touch index.php home.php config.php
index.php
For now, we’ll have a basic form for username and password.
<h1>User Login</h1>
<form action="" method="post">
<input type="text" id="username" name="username" placeholder="username">
<input type="password" id="password" name="password">
<input type="submit" value="Login">
</form>
We can view it below:
home.php
It is a basic welcome note to the connected user.
<h1>
Welcome, username
</h1>
Note: We can consider this shot to do front-end validation.
First, let’s configure the database connection in config.php:
<?phpdefine('MYSQL_USER', 'root');define('MYSQL_PASSWORD', 'root');define('MYSQL_HOST', 'localhost');define('MYSQL_DATABASE', 'university');/*** PDO options:* - error mode set to exception* - emulated prepared stmt turned off*/$dsn = 'mysql:host=' . MYSQL_HOST . ';dbname=' .MYSQL_DATABASE;$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_PERSISTENT => true,);// Connectiontry {$pdo = new PDO($dsn, MYSQL_USER, MYSQL_PASSWORD, $options);} catch (PDOException $e) {die("ERROR: Database connection error" .$e->getMessage());}
We can now connect to our database using PDO.
Note: We can learn more about how to connect to an SQL database using PDO here
We’ll implement the script to process the form submission in index.php.
First, we need to check if the user has sent the form.
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// processessing code here
}
Once we are sure that the user has submitted the form, we first require the database connection, then we can initialize variables to an empty string:
require_once "config.php";
$username = $password = "";
Next, we do basic input validation and assign the appropriate values to our initial variables:
<?phpif (empty(trim($_POST['username']))) {echo 'Enter the username';} else {$username = trim($_POST['username']);}if (empty(trim($_POST['password']))) {echo 'Enter the password';} else {$password = trim($_POST['password']);}
Now we have the user-submitted credentials (login and password). Let’s compare it with the existing one:
<?php$sql = 'SELECT id, username, password FROM User WHERE username = ?';if($stmt = $pdo->prepare($sql)) {$stmt->bindParam(1, $param_username, PDO::PARAM_STR);$param_username = $username;if($stmt->execute()) {// First check if the user exists, then verify the passwordif($stmt->rowCOunt() == 1) {if($row = $stmt->fetch()) {$id = $row['id'];$username = $row['username'];if($_POST['password'] == $row['password']) {header('location:home.php');} else {// Invalid password, echo a general error msgecho "Username or password not correct";}} else {// username no existsecho "Username or password not correct";}} else {echo "Oops, something went wrong. Try again later";}// close stmtunset($stmt);}}
We use prepared statement to check whether the submitted credential matches one that already exists in the database. We first check for the username, then the password. If the submitted credential matches, we redirect the user to the home (header('location:home.php');). If not, we print an error message.
To build our basic authenticate system, we did proceed as follows:
index.php).config.php).index.php).home.php).Happy coding!