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!