Sunday, February 21, 2021

Simple Login and Registration System in PHP and MySQL

 A simple login and registration system in PHP and MySQL that I wrote I hope you will find it useful.

I am currently accepting programming work, IT projects, school and application development, programming projects, thesis and capstone projects, IT consulting work, computer tutorials, and web development work kindly contact me at the following email address for further details.  If you want to advertise on my website kindly contact me also in my email address also. Thank you.

My email address is the following jakerpomperada@gmail.com, jakerpomperada@aol.com, and jakerpomperada@yahoo.com.

My mobile number here in the Philippines is 09173084360.

My telephone number at home here in Bacolod City, Negros Occidental Philippines is  +63 (034) 4335675.

Here in Bacolod City I also accepting computer repair, networking, and Arduino Project development at a very affordable price. My website is www.jakerpomperada.blogspot.com and www.jakerpomperada.com

If you like this video please click the LIKE button, SHARE, and SUBSCRIBE to my channel.

Your support on my channel is highly appreciated.

Thank you very much.









Program Listing


php_login.sql

-- phpMyAdmin SQL Dump

-- version 5.0.2

-- https://www.phpmyadmin.net/

--

-- Host: 127.0.0.1

-- Generation Time: Feb 21, 2021 at 01:05 PM

-- Server version: 10.4.14-MariaDB

-- PHP Version: 7.4.9


SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

START TRANSACTION;

SET time_zone = "+00:00";



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8mb4 */;


--

-- Database: `php_login`

--


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


--

-- Table structure for table `accounts`

--


CREATE TABLE `accounts` (

  `id` int(11) NOT NULL,

  `name` varchar(100) NOT NULL,

  `username` varchar(50) NOT NULL,

  `password` varchar(50) NOT NULL,

  `date_created` datetime NOT NULL DEFAULT current_timestamp()

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


--

-- Dumping data for table `accounts`

--


INSERT INTO `accounts` (`id`, `name`, `username`, `password`, `date_created`) VALUES

(2, 'Jake R. Pomperada', 'jakerpomperada', '21232f297a57a5a743894a0e4a801fc3', '2021-02-21 19:45:30');


--

-- Indexes for dumped tables

--


--

-- Indexes for table `accounts`

--

ALTER TABLE `accounts`

  ADD PRIMARY KEY (`id`);


--

-- AUTO_INCREMENT for dumped tables

--


--

-- AUTO_INCREMENT for table `accounts`

--

ALTER TABLE `accounts`

  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

COMMIT;


/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



style.css

* {
    box-sizing: border-box;
}

body {
    font-family: "Calibri", sans-serif;
    background: #e2e1e0;
    color: #111;
    overflow: auto;
}

main {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

.container {
    padding: 50px;
    width: 500px;
    background: #fff;
    text-align: left;
    border-radius: 20px;
    box-shadow: 0 0 60px rgba(0,0,0,0.05);
}

.container.page {
    width: 600px;
}

h1 {
    margin: 0;
    line-height: 1;
}

h3 {
    margin: 3px 0 0;
    font-size: 1.3em;
}

.title {
    display: block;
    text-align: center;
}

.title.page {
    text-transform: capitalize;
}

.name {
    color: #f44336;
}

.txtbox {
    display: block;
    background: #f1f1f1;
    width: 100%;
    margin: 0 0 10px;
    padding: 15px;
    border: none;
    font-size: 20px;
    border-radius: 8px;
    font-family: "Calibri", sans-serif;
    text-align: center;
}

.registration .txtbox {
    text-align: left;
}

.txtbox:first-of-type {
    margin: 30px 0 10px;
}

.txtbox:last-of-type {
    margin: 0;
}

.txtbox:hover,
.txtbox:focus {
    background: #e0e0e0;
}

.btn {
    background: #673ab7;
    color: #fff;
    padding: 15px;
    width: 100%;
    opacity: 0.9;
    outline: none;
    font-size: 20px;
    text-transform: uppercase;
    border: none;
    text-decoration: none;
    text-align: center;
    font-family: "Calibri", sans-serif;
    cursor: pointer;
    text-decoration: none;
    display: block;
    border-radius: 8px;
}

.btn:hover {
    opacity: 1;
}

.btnLogout {
    margin: 0;
}

.btnRegister {
    background: #e91e63;
}

.btnWrapper .btn:first-child {
    margin: 20px 0 10px ;
}

.btnWrapper .btn:last-child {
    margin: 0;
}

.message {
    width: 100%;
    padding: 20px;
    font-size: 18px;
    background: #9e9e9e;
    color: #fff;
    line-height: 1;
    margin-top: 20px;
    border-radius: 8px;
    word-wrap: break-word;
}

index.php

<?php
    $error = "";
    
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // Start session
        session_start();

        // Establish connection to the database
        require_once "config.php";

        // Rename and sanitize post data
$user = $con->real_escape_string($_POST['txtUser']);
        $pass = md5($con->real_escape_string($_POST['txtPass']));
        
        // Check if username and password match any record
        if ($stmt = $con->prepare("SELECT `name`, `date_created` FROM `accounts` WHERE `username` = ? AND `password` = ?")) {
            $stmt->bind_param("ss", $user, $pass);
            $stmt->execute();
            $stmt->store_result();

            if($stmt->num_rows > 0) {
                // If there is a match, store account details in session variables, redirect to page.php, and lastly close connection
                $stmt->bind_result($name,$date);
                $stmt->fetch();
                $_SESSION['name'] = $name;
                $_SESSION['date'] = $date;
                $stmt->close();
                header("Location: page.php");
                $con->close();
                exit();
            } else {
                // Show error message if nothing matched
                $error = '<div class="message">You have entered an incorrect Username or Password. Please try again.</div>';
            }
        } else {
            // Show error message incase there is something wrong with the sql statement
            $error = '<div class="message">Prepare failed: ('.$con->errno.') '.$stmt->error.'</div>';
        }
        // Close database connection
        $con->close();
    }
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Simple Login System in PHP</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <main>
            <div class="container">
                <div class="title">
                    <h1>Simple Login System in PHP</h1>
                    <h3>&#187; Jake R. Pomperada, MAED-IT, MIT &#171;</h3>
                </div>

                <div class="container-wrapper login">
                    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                        <input type="text" class="txtbox" name="txtUser" id="txtUser" placeholder="Username" required>
                        <input type="password" class="txtbox" name="txtPass" id="txtPass" placeholder="Password" required>
                        
                        <div class="btnWrapper">
                            <button type="submit" class="btn btnLogin" name="btnLogin">Login</button>
                            <a href="register.php" class="btn btnRegister" name="btnRegister">Register</a>
                        </div>

                        <?php echo $error; ?>
                    </form>
                </div>
            </div>
        </main>
    </body>
</html>

config.ini

[database]
hostname = localhost
username = root
password = 
dbname = php_login

config.php

<?php
    // Read config.ini file
    $config = parse_ini_file('config.ini'); 

    // Set database connection
    $con = new mysqli($config['hostname'],$config['username'],$config['password'],$config['dbname']);

    // if there is a problem, show error message
    if (mysqli_connect_errno()) {
        printf("Connection failed: %s\n", mysqli_connect_error());
        exit();
    }


logout.php

<?php
    session_start();
    $_SESSION = array();
    session_destroy();
    header("location: index.php");
    exit;
?>

register.php

<?php
    // Start session
    session_start();

    // Declare variables
    $txtName = $txtUser = $name = $user = $msg = $temp = "";

    // Check if logged in (if logged in show back button, if not show login button)
    if (isset($_SESSION["name"])) {
        $button = '<a href="page.php" class="btn btnBack" name="btnBack">Back</a>';
    } else {
        $button = '<a href="index.php" class="btn btnLogin" name="btnLogin">Login</a>';
    }
    
    // Check if form was submitted
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // Establish connection to the database
        require_once "config.php";

        // Get and sanitize data
$name = $con->real_escape_string($_POST['txtName']);
$user = $con->real_escape_string($_POST['txtUser']);
        $pass = md5($con->real_escape_string($_POST['txtPass']));
        $conf = md5($con->real_escape_string($_POST['txtConfirm']));
        $checker = 0;
        
        // Check if username is alphanumeric and not less than 4 characters
        if (!ctype_alnum($user) || strlen($user)<4) {
            $checker = 1;
            $temp .= 'Username must be a minimum of 4 alphanumeric characters only.<br><br>';
        }
        
        // Check if password is alphanumeric and not less than 4 characters 
        if (!ctype_alnum($pass) || strlen($pass)<4) {
            $checker = 1;
            $temp .= 'Password must be a minimum of 4 alphanumeric characters only.<br><br>';
        }
        
        // check if password and confirm password matched
        if ($pass != $conf) {
            $checker = 1;
            $temp .= 'Passwords don\'t match.';
        }

        // Check if errors were found
        if($checker == 0) {
            // If there were no errors found, execute insert
            if ($stmt = $con->prepare("INSERT INTO `accounts`(`name`, `username`, `password`) VALUES (?, ?, ?)")) {
                $stmt->bind_param("sss", $name, $user, $pass);
                $stmt->execute();
                $success = "You are successfully registered.";
                $msg = '<div class="message">'.$success.
                                '</div>';
            } else {
                $msg = '<div class="message">Prepare failed: ('.$con->errno.') '.$mysqli->error.'</div>';
            }

        } else {
            // If errors were found, show error message, name, and username
            $txtName = $name;
            $txtUser = $user;
            $msg = '<div class="message">'.$temp.'</div>';
        }

        // Close database connection
        $con->close();
    }
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Simple Login System in PHP</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <main>
            <div class="container registration">
                <div class="title">
                    <h1>Registration Form</h1>
                    <h3>&#187; Jake R. Pomperada, MAED-IT, MIT &#171;</h3>
                </div>

                <div class="container-wrapper">
                    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" class="frmRegister">
                        <input type="text" class="txtbox" name="txtName" id="txtName" value="<?php echo $txtName; ?>" placeholder="Full Name" required>
                        <input type="text" class="txtbox" name="txtUser" id="txtUser" value="<?php echo $txtUser; ?>" placeholder="Username" required>
                        <input type="password" class="txtbox" name="txtPass" id="txtPass" placeholder="Password" required>
                        <input type="password" class="txtbox" name="txtConfirm" id="txtConfirm" placeholder="Confirm Password" required>
                        
                        <div class="btnWrapper">
                            <button type="submit" class="btn btnRegister" name="btnRegister">Register</button>
                            <?php echo $button; ?>
                        </div>
                        

                        <?php echo $msg; ?>
                    </form>
                </div>
            </div>
        </main>
    </body>
</html>


page.php


<?php
    // resume existing session
    session_start();

    // Check if session name exists
    if (!isset($_SESSION["name"])) {
        header("Location: logout.php");
        exit();
    }
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Simple Login System in PHP</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <main>
            <div class="container page">
                <div class="title page">
                    <h1>Welcome <span class="name"><?php echo $_SESSION["name"]; ?></span>!</h1>
                    <h2>Date Created: <?php echo date("F j, Y, g:i A", strtotime($_SESSION["date"]));?></h2>
                    
                    <div class="btnWrapper">
                        <a href="register.php" class="btn btnRegister">Creat New Account</a>
                        <a href="logout.php" class="btn btnLogout">Logout</a>
                    </div>
                </div>
            </div>
        </main>
    </body>
</html>


No comments:

Post a Comment