<!DOCTYPE html>
<html lang="en"><!-- InstanceBegin template="/Templates/php.dwt.php" codeOutsideHTMLIsLocked="false" -->
<head>
	<!-- InstanceBeginEditable name="doctitle" -->
    <title>Creating a User Login System with PHP and MySQL - Tutorial Republic</title>
	<meta name="description" content="In this tutorial you will learn how to create a simple user registration and login system using PHP and MySQL." />
    <!-- InstanceEndEditable -->
    	<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="fb:admins" content="100001054961582" />
<meta property="fb:app_id" content="1404574483159557" />
<meta property="og:image" content="/lib/images/signature.png" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<style>
html,body,h1,h2,h3,h4,h5,h6,p,blockquote,pre,img{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}
html,body{min-height:100%}
p{margin:0 0 12px}
ol,ul{margin:0 0 12px}
a,a:active,a:visited{outline:none;color:#1db79f;text-decoration:none}
a img{border:none;outline:none}
p code,table td:last-child code,.content ul li code,code.mark{padding:2px 4px;color:#333;background-color:#f1f1f1;border-radius:4px}
a code{color:inherit;background:none;padding:0}
table{border-collapse:collapse;border-spacing:0}
table td{vertical-align:top}
body{min-width:1300px;color:#414141;background:#fafafa;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue",sans-serif;font-size:17px;line-height:1.7}
input,select,textarea,button,div,span,a{box-sizing:border-box}
h1,h2,h3,h4{color:#262626;margin:20px 0 10px;line-height:1.5;font-weight:600}
h1{font-size:34px;margin-top:17px}
h2{font-size:28px}
h3{font-size:22px}
.space{margin-bottom:25px!important}
.break{margin-bottom:15px!important}
.text-center{text-align:center!important}
.scroll{height:195px;overflow-y:scroll}
.scroll.large{height:245px}
.scroll.xlarge{height:290px}
.scroll.xxlarge{height:340px}
sup{font-size:13px}
h1 sup{background:#ec0000;border-radius:3px;padding:5px 10px;font-size:15px;color:#fff;position:relative;top:5px}
.leaderboard{padding-top:14px;position:relative;height:105px;overflow:hidden}
.intro-image img{display:block;padding:10px 0 25px;max-width:100%}
.clearfix::after{content:".";display:block;height:0;clear:both;visibility:hidden}
code,.code,.syntax,.green-box,.sky-box,.gray-box,.pink-box,.red-box,.at-rule,.codebox pre,.console-output,.command{font-size:16px;font-family:Consolas,Monaco,Courier,monospace}
.console-output{margin:15px 0}
.command{background:#f2f2f2;padding:16px 18px;margin:15px 0 25px;border-radius:3px}
hr{border:none;border-bottom:1px solid #e7e9ed;height:1px;margin:30px 0}
.summary,.topic{border:1px solid #eaeaea;border-width:1px 0;margin:20px 0;padding:10px 0;color:#8e9aa6;line-height:1.5}
h2.section-title span{display:inline-block;border-bottom:4px solid #c9d7e0;padding:0 50px 12px 0}
.wrapper{width:1300px;padding:0 15px;margin:0 auto}
.header{background:#23384e;padding:16px 0}
input.search{background:#fff;border:0 none;color:#807E7E;float:left;height:38px;line-height:26px;font-size:14px;margin:0 0 0 12px;outline:medium none;padding:6px 14px;width:500px;border-radius:2px;box-shadow:0 0 1px rgba(0,0,0,0.6);font-family:inherit}
.search-btn{color:rgba(0,0,0,.6);background:#ebebeb;border:none;outline:none;cursor:pointer;float:left;height:38px;line-height:46px;width:44px;display:block;margin-left:-2px;border-radius:0 2px 2px 0;box-shadow:0 0 1px rgba(0,0,0,0.7)}
.logo{width:304px}
.logo img{height:44px;margin:-3px 0;display:block}
.site-search{float:left;margin-left:100px}
.menu{background-color:#f5f5f5;box-shadow:0 1px 1px rgba(0,0,0,.15);position:relative;z-index:9}
.menu a{color:#666;display:inline-block;padding:0 10px;text-decoration:none;font-size:14px;font-weight:600;height:48px;line-height:48px}
.menu a:first-child{margin-left:-10px}
.menu a.tool-link{float:right;display:block;border-radius:30px;line-height:28px;position:relative;height:auto;top:9px;padding:0 12px;color:#1ebba3;border:1px double #1ebba3}
.fl,.logo{float:left}
.leftcolumn{width:240px;float:left;font-size:16px;color:#4f4f4f}
.centercolumn{width:850px;float:left}
.rightcolumn{width:180px;float:left}
.content{background:#fff;padding:15px 40px 20px;border:1px solid #dedede;border-top:none;border-radius:1px}
.sidebar{width:160px;float:left;padding-top:28px;margin-left:20px;position:relative}
.leftcolumn .segment{margin:16px 0 12px;position:relative;font-size:18px;font-weight:600;line-height:normal}
.leftcolumn a{color:#4f4f4f;font-size:16px;line-height:26px;display:block;border-bottom:1px solid transparent}
.leftcolumn ul{list-style:none;padding:0;margin:0}
.segment,.chapters,.chapters a{float:left;clear:both}
h1 code,h2 code,h3 code{font:inherit}
.color-box{margin:15px 0;padding-left:20px}
.note-box,.warning-box,.tip-box{padding:8px 8px 3px 26px}
.info-tab{float:left;margin-left:-23px}
.content ul li{margin-top:7px}
.extra{padding-top:5px}
.green-box,.sky-box,.gray-box,.red-box,.pink-box{color:#000;margin-top:15px;padding:10px;background-color:#f6f8fa;border:1px solid #d7e2ec}
.example{background:#f4f5f6;padding:3px;margin:15px 0}
.codebox{background:#fff;border:1px solid #ddd}
.codebox-title{height:41px;padding-left:12px;border-bottom:1px solid #ddd;background:#f5f5f5}
.codebox-title h4{margin:0;font-size:18px;line-height:40px;float:left;font-weight:600}
a.try-btn,a.download-btn{width:140px;height:40px;color:#333;font-size:15px;line-height:41px;font-weight:600;text-align:center;text-decoration:none;float:right;display:block;border-left:1px solid #ddd;background:rgba(27,31,35,0.08);box-sizing:border-box;font-family:Arial,sans-serif}
a.try-btn span{font-size:18px;line-height:normal}
.hide,.code-style,.box-size,.bottom-link,.footer,.code-style,.snippets,.report-error,.badge,.social,.ad-label,.mobile-only,ul.tree-menu li ul{display:none}
.skyscraper{width:160px;height:600px;overflow:hidden;margin-bottom:20px;background:#ebecf0}
.bottom-ad{margin-top:46px;padding:24px;position:relative;background:url(../lib/images/smooth-line.png) no-repeat center #f9f9f9}
.rectangle-left,.rectangle-right{min-width:336px;min-height:280px;overflow:hidden}
.fr,a.previous-page,a.next-page,.rectangle-right,.topic-nav{float:right}
a.previous-page,a.next-page{width:32px;height:32px;line-height:30px}
.shadow{background:#F7F8F9;padding:3px;margin:10px 0}
.syntax{color:#2f4959;padding:13px 18px;background:#F9F9FA;border:1px solid #ddd;font-size:15px}
code[class*="language-"],pre[class*="language-"]{color:#000;background:none;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}
pre[class*="language-"]{position:relative;margin:.5em 0;overflow:visible;padding:0}
pre[class*="language-"]>code{position:relative;border-left:10px solid #358ccb;box-shadow:-1px 0 0 0 #358ccb,0 0 0 1px #dfdfdf;background-color:#fdfdfd;background-image:linear-gradient(transparent 50%,rgba(69,142,209,0.04) 50%);background-size:3em 3em;background-origin:content-box;background-attachment:local}
code[class*="language"]{max-height:inherit;height:inherit;padding:0 1em;display:block;overflow:auto}
:not(pre) > code[class*="language-"]{position:relative;padding:.2em;border-radius:.3em;color:#c92c2c;border:1px solid rgba(0,0,0,0.1);display:inline;white-space:normal}
pre[class*="language-"].line-numbers{padding-left:0}
pre[class*="language-"].line-numbers code{padding-left:3.8em}
pre[class*="language-"].line-numbers .line-numbers-rows{left:0}
pre[class*="language-"][data-line]{padding-top:0;padding-bottom:0;padding-left:0}
pre[data-line] code{position:relative;padding-left:4em}
pre .line-highlight{margin-top:0}
pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber;white-space:pre-wrap!important}
pre.line-numbers > code{position:relative;white-space:inherit}
.line-numbers-rows,.codebox pre.inactive{display:none}
.codebox pre.syntax-highlighter{margin:0;padding:0;overflow:auto}
pre.line-numbers .line-numbers-rows{border-right:3px solid #6CE26C}
.codebox pre.syntax-highlighter > code{box-shadow:none!important;padding-left:3.8em;background-image:linear-gradient(transparent 50%,#F8F8F8 50%);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace!important;font-size:16px;line-height:1.5;overflow-wrap:break-word}
.codebox pre.syntax-highlighter,.codebox pre.syntax-highlighter code{border:none;width:100%;box-sizing:border-box}
pre.line-numbers code,pre.line-numbers .line-numbers-rows{padding-top:2px;padding-bottom:2px}
.preview-box{padding:15px;text-align:center;cursor:pointer;overflow:hidden;background:#FFF;border:1px solid #e6e6e6}
.preview-box a,.preview-box img{display:block;margin:0 auto}
.download-box{text-align:center;padding:20px 0;margin:20px 0 10px}
.output-box{border-color:#d4d4d4;border-style:solid;border-width:1px 0;padding:5px 15px;overflow:hidden;background:#fff;margin:10px 0}
.demo-box{margin-top:15px}
.subhead{border-bottom:3px solid #DCE3EB;margin-bottom:15px;padding-bottom:10px}
table.data,table.description{width:100%;font-size:92%}
table.data th{color:#000;padding:8px 7px;text-align:left;font-size:15px;background:#F8F8F8}
table.data td{color:#484848;padding:5px 7px;background:#fff}
table.data th,table.data td{vertical-align:top;border:1px solid #DCE3EB}
table.data tr.section th,table.data td.section{font-size:15px;background:#f0f4f7}
table.description th{width:150px}
table.no-wrap tr td:first-child{white-space:nowrap}
.topic-nav{padding-right:5px;color:#d0d0d0}
.topic-nav a{padding:0 15px;margin:0 0 0 5px;position:relative;display:inline-block}
.topic-nav a::after{font-size:24px;position:absolute;line-height:22px}
.topic-nav a:first-child{margin:0 5px 0 0}
.topic-nav a:first-child::after{content:'\00AB';left:-5px}
.topic-nav a:last-child::after{content:'\00BB';right:-5px}
@media screen and (max-width: 1280px) {
body{min-width:1260px}
.wrapper{width:1260px}
.leftcolumn{width:230px}
.centercolumn{width:820px}
.preview-box img{max-width:100%;height:auto}
}
@media screen and (max-width: 800px) {
body{min-width:100%;max-width:100%;padding-top:46px}
.wrapper{width:100%;padding:0}
.header{height:46px;padding:5px 0;position:fixed;top:0;left:0;right:0;width:100%;z-index:99}
.logo{width:auto;display:block;padding:6px 0 0 60px;position:absolute;left:0;z-index:100}
.logo img{height:30px}
.menu{width:100%;padding-left:12px;padding-right:12px;overflow-x:auto;white-space:nowrap}
.centercolumn{width:100%;float:none}
.content{padding:10px;border-width:0 0 1px 0}
.content img{max-width:100%;height:auto}
.skyscraper{display:inline-block}
.shadow,.example,.console-output,.content pre{max-width:100%;overflow-x:auto}
.codebox-title{position:relative}
.codebox.multi-style-mode pre{padding-top:7px;margin-top:36px;border-top:1px solid #ddd}
.bottom-ad{height:auto;background:none;padding:30px 0 0;margin:40px 0 0;text-align:center;position:relative}
.rectangle-left,.rectangle-right{float:none;display:inline-block;margin:10px auto;background:#EDEEF2}
.leftcolumn,.footer,.social,.site-search,.code-style,.menu a.tool-link,.backdrop{display:none}
.summary,.topic{padding:5px 0;margin:10px 0}
.leftcolumn,.centercolumn,.rightcolumn,.sidebar{float:none}
.header,.menu,.centercolumn,.footer,.appeal-text{width:100%}
a.try-btn,a.download-btn{width:130px}
.native-unit{margin-bottom:30px}
.rightcolumn,.sidebar{margin: 25px auto 0}
.overview{padding-right:0}
.scroll-pane{overflow-x:auto}
table.data{min-width:480px}
table.data pre{display:inline;white-space:normal}
table tr th,table tr td{width:auto!important}
.preview-box{padding:6px}
.leaderboard{margin:20px 0}
h1{font-size:30px}
h2{font-size:24px}
h3{font-size:20px}
.codebox pre.syntax-highlighter{overflow-x:auto}
.codebox pre.syntax-highlighter > code{min-width:614px;height:auto;overflow-x:hidden}
}
@media screen and (min-width: 801px) {
.site-search,.leftcolumn,.social{display:block!important}
.backdrop{display:none!important}
.hide-scroll{overflow-x:hidden!important}
}
.menu a.old-version{height:21px;font-size:13px;line-height:17px;border:1px double;border-radius:40px;margin-right:10px}</style>
<script>
    (function(){
        var bsa_optimize=document.createElement('script');
        bsa_optimize.type='text/javascript';
        bsa_optimize.async=true;
        bsa_optimize.src='https://cdn4.buysellads.net/pub/tutorialrepublic.js';
        (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(bsa_optimize);
    })();
</script>
    
    <!-- InstanceBeginEditable name="head" -->
    <!-- InstanceEndEditable -->
    
	<script async src="https://www.googletagmanager.com/gtag/js?id=UA-40117907-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-40117907-1');
</script></head>
<body><div onClick="this.style.display='none';"><div style="display:block; clear:both; height:1.5em; padding:0.5em;">&nbsp;</div><div style="position:absolute; top:0px; left:0px; display:block; position:fixed; width:100%; padding:0.5em; line-height:1.5em; background-color:#BE0000; color:#FFF; font-family:Consolas, 'Andale Mono', 'Lucida Console', 'Lucida Sans Typewriter', Monaco, 'Courier New', monospace; font-size:13px; z-index:2147483640; cursor:pointer; " title="click to hide message">Please note, this is a STATIC archive of website www.tutorialrepublic.com from 10 Sep 2022, cach3.com does not collect or store any user information, there is no "phishing" involved.</div></div>
    <!--Header-->
    
<div class="header">
    <div class="wrapper clearfix">
        <button type="button" class="open-menu mobile-only"><i class="icon-menu"></i></button>
        <div class="logo">
            <a href="../index.html"><img src="../lib/images/logo.svg" alt="TutorialRepublic" /></a>
        </div>
        <div class="site-search">
            <form inert action="https://www.google.com/search" method="get" target="_blank" class="clearfix">
                <input type="hidden" value="www.tutorialrepublic.com" name="sitesearch"  placeholder="disabled" disabled="disabled" title="form boxes are disabled in cached version of the site" value="Disabled" style="opacity:0.3;" />
                <input type="text" name="q" placeholder="disabled" id="searchInput" class="search"  placeholder="disabled" disabled="disabled" title="form boxes are disabled in cached version of the site" value="Disabled" style="opacity:0.3;" />
                <button type="submit" class="search-btn"><span class="icon-search"></span></button>
            </form>
        </div>
        <div class="social">                
            <a href="https://www.facebook.com/tutorialrepublic" target="_blank" title="Join us on Facebook"><i class="icon-facebook"></i></a>
            <a href="https://twitter.com/tutrepublic" target="_blank" title="Follow us on Twitter"><i class="icon-twitter"></i></a>
            <a href="../contact-us.php.html" target="_blank" title="Send us an Email"><i class="icon-mail"></i></a>
        </div>
        <button type="button" class="open-search mobile-only">
            <i class="icon-search"></i>
        </button>
    </div>    
</div>
<div class="menu">
    <div class="wrapper">
        <a href="../index.html" title="Home Page">HOME</a>
        <a href="../html-tutorial/html-introduction.php.html" title="HTML Tutorial">HTML5</a>            
        <a href="../css-tutorial/index.html" title="CSS Tutorial">CSS3</a>
        <a href="../javascript-tutorial/index.html" title="JavaScript Tutorial">JAVASCRIPT</a>
        <a href="../jquery-tutorial/index.html" title="jQuery Tutorial">JQUERY</a>
        <a href="../twitter-bootstrap-tutorial/index.html" title="Bootstrap 5 Tutorial">BOOTSTRAP5</a>
		<a href="https://www.tutorialrepublic.com/twitter-bootstrap-4-tutorial/" class="old-version" title="Bootstrap 4.6 Tutorial">v4.6</a>
        <a href="index.html" title="PHP Tutorial">PHP7</a> 
        <a href="../sql-tutorial/index.html" title="SQL Tutorial">SQL</a>
        <a href="../references.php.html" title="Web References">REFERENCES</a>
        <a href="../practice-examples.php.html" title="Practice Examples and Demos">EXAMPLES</a>
        <a href="../faq.php.html" title="Frequently Asked Questions and Answers">FAQ</a>
        <a href="../snippets/gallery.php.html" title="Bootstrap Code Snippets" target="_blank">SNIPPETS</a>
        <a href="../codelab.php.html" class="tool-link" target="_blank">Online HTML Editor</a>
    </div>        
</div>    <!--End:Header-->
    <div class="wrapper clearfix">
        <div class="leftcolumn" id="myNav">
		
        <div class="segment"><span>PHP</span> BASIC</div>
<div class="chapters">
    <a href="index.html">PHP Introduction</a>
    <a href="php-get-started.php.html">PHP Getting Started</a>
    <a href="php-syntax.php.html">PHP Syntax</a>
    <a href="php-variables-and-constants.php.html">PHP Variables</a>
	<a href="php-constants.php.html">PHP Constants</a>
    <a href="php-echo-and-print-statements.php.html">PHP Echo and Print</a>
	<a href="php-data-types.php.html">PHP Data Types</a>
    <a href="php-strings.php.html">PHP Strings</a>
    <a href="php-operators.php.html">PHP Operators</a>
    <a href="php-if-else-statements.php.html">PHP If&hellip;Else</a>
    <a href="php-switch-case-statements.php.html">PHP Switch&hellip;Case</a>
    <a href="php-arrays.php.html">PHP Arrays</a>
    <a href="php-sorting-arrays.php.html">PHP Sorting Arrays</a>    
    <a href="php-loops.php.html">PHP Loops</a>
    <a href="php-functions.php.html">PHP Functions</a>
	<a href="php-math-operations.php.html">PHP Math Operations</a>
    <a href="php-get-and-post.php.html">PHP GET and POST</a>
</div>
<div class="segment"><span>PHP</span> ADVANCED</div>
<div class="chapters">
    <a href="php-date-and-time.php.html">PHP Date and Time</a>
    <a href="php-include-files.php.html">PHP Include Files</a>
    <a href="php-file-system.php.html">PHP File system</a>
	<a href="php-parsing-directories.php.html">PHP Parsing Directories</a>
    <a href="php-file-upload.php.html">PHP File Upload</a>
	<a href="php-file-download.php.html">PHP File Download</a>
    <a href="php-cookies.php.html">PHP Cookies</a> 
    <a href="php-sessions.php.html">PHP Sessions</a>       
    <a href="php-send-email.php.html">PHP Send Email</a>
    <a href="php-form-handling.php.html">PHP Form Handling</a>
    <a href="php-form-validation.php.html">PHP Form Validation</a>
	<a href="php-filters.php.html">PHP Filters</a>
    <a href="php-error-handling.php.html">PHP Error Handling</a>
	<a href="php-classes-and-objects.php.html">PHP Classes and Objects</a>
	<a href="php-magic-constants.php.html">PHP Magic Constants</a>
	<a href="php-json-parsing.php.html">PHP JSON Parsing</a>
	<a href="php-regular-expressions.php.html">PHP Regular Expressions</a>
	<a href="php-exception-handling.php.html">PHP Exception Handling</a>
</div>
<div class="segment"><span>PHP</span> &amp; MySQL DATABASE</div>
<div class="chapters">
    <a href="php-mysql-introduction.php.html">PHP MySQL Introduction</a>
    <a href="php-mysql-connect.php.html">PHP MySQL Connect</a>
    <a href="php-mysql-create-database.php.html">PHP MySQL Create Database</a>
	<a href="php-mysql-create-table.php.html">PHP MySQL Create Table</a>
    <a href="php-mysql-insert-query.php.html">PHP MySQL Insert</a>	
	<a href="php-mysql-prepared-statements.php.html">PHP MySQL Prepared</a>
	<a href="php-mysql-last-inserted-id.php.html">PHP MySQL Last Inserted ID</a>
    <a href="php-mysql-select-query.php.html">PHP MySQL Select</a>
    <a href="php-mysql-where-clause.php.html">PHP MySQL Where</a>
	<a href="php-mysql-limit-clause.php.html">PHP MySQL Limit</a>        
    <a href="php-mysql-order-by-clause.php.html">PHP MySQL Order By</a>
    <a href="php-mysql-update-query.php.html">PHP MySQL Update</a>
    <a href="php-mysql-delete-query.php.html">PHP MySQL Delete</a>
	<a href="php-mysql-crud-application.php.html">PHP&thinsp;MySQL&thinsp;CRUD Application</a>
	<a href="php-mysql-ajax-live-search.php.html">PHP MySQL Ajax Search</a>
	<a href="php-mysql-login-system.php.html">PHP MySQL Login System</a>
</div>
<div class="segment"><span>PHP</span> EXAMPLES</div>
<div class="chapters">
    <a href="../php-examples.php.html">PHP Practice Examples</a>
	<a href="../faq.php.html#php-mysql">PHP FAQ's Answers</a>
</div>
<div class="segment"><span>PHP</span> REFERENCE</div>
<div class="chapters">
	<a href="../php-reference/php-string-functions.php.html">PHP String Functions</a>
	<a href="../php-reference/php-array-functions.php.html">PHP Array Functions</a>
    <a href="../php-reference/php-file-system-functions.php.html">PHP File System Functions</a>
    <a href="../php-reference/php-date-and-time-functions.php.html">PHP Date/Time Functions</a>
    <a href="../php-reference/php-calendar-functions.php.html">PHP Calendar Functions</a>
    <a href="../php-reference/php-mysqli-functions.php.html">PHP MySQLi Functions</a>
    <a href="../php-reference/php-filters.php.html">PHP Filters</a>
    <a href="../php-reference/php-error-levels.php.html">PHP Error Levels</a>
	<a href="../references.php.html" class="more">More references</a>
</div>        
                </div>
        <div class="centercolumn">
            <!--Text Content-->
            <div class="content">
                <div class="leaderboard">

    <div class="ad-label">Advertisements</div>

    <div class="ad-container">
        <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
        <!-- Responsive Leaderboard -->
        <ins class="adsbygoogle"
                style="display:block;max-width:728px;width:100%;height:90px"
                data-ad-client="ca-pub-9107540490929984"
                data-ad-slot="4302666817"></ins>
        <script>
        (adsbygoogle = window.adsbygoogle || []).push({});
        </script>
    </div>

    <!-- ABR Leaderboard -->
    <div id="bsa-zone_1579648332258-0_123456"></div>

</div>                <!-- InstanceBeginEditable name="main_content" -->
                <a href="php-mysql-ajax-live-search.php.html" class="previous-page" title="Go to Previous Page"></a>
                <a href="../php-examples.php.html" class="next-page" title="Go to Next Page"></a>
                <h1>PHP MySQL <span>Login System</span></h1>
                <p class="summary">In this tutorial you will learn how to build a login system with PHP and MySQL.</p>
                <h2>Implementing User Authentication Mechanism</h2>
                <p>User authentication is very common in modern web application. It is a security mechanism that is used to restrict unauthorized access to member-only areas and tools on a site.</p>
				<p class="space">In this tutorial we'll create a simple registration and login system using the PHP and MySQL. This tutorial is comprised of two parts: in the first part we'll create a user registration form, and in the second part we'll create a login form, as well as a welcome page and a logout script.</p>
                <h2>Building the Registration System</h2>
				<p>In this section we'll build a registration system that allows users to create a new account by filling out a web form. But, first we need to create a table that will hold all the user data.</p>
				<h3>Step 1: Creating the Database Table</h3>
				<p>Execute the following SQL query to create the <i>users</i> table inside your MySQL database.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox">
                        <div class="codebox-title"><h4>Example</h4><a href="https://www.tutorialrepublic.com/examples/downloads/users-table.zip" target="_top" class="download-btn" title="Download Users Table"><span>Download</span></a></div>
                        <pre class="syntax-highlighter line-numbers"><code class="language-sql">CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<p>Please check out the tutorial on <a href="../sql-tutorial/sql-create-table-statement.php.html">SQL <code>CREATE TABLE</code> statement</a> for the detailed information about syntax for creating tables in MySQL database system.</p>
				<h3>Step 2: Creating the Config File</h3>
				<p>After creating the table, we need create a PHP script in order to connect to the MySQL database server. Let's create a file named "config.php" and put the following code inside it.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox multi-style-mode">
                        <div class="codebox-title">
                        	<h4>Example</h4>
                            <div class="code-style">
                            	<span class="active" data-target="0" data-url="config" title="Show Example Code in Procedural Style">Procedural</span> 
                                <span data-target="1" data-url="config-oo-format" title="Show Example Code in Object Oriented Style">Object Oriented</span> 
                                <span data-target="2" data-url="config-pdo-format" title="Show Example Code in PDO Style">PDO</span>
                            </div>
                        	<a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=config" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a>
                            <span class="box-size"><i title="Maximize"></i></span>
                        </div>
						<pre class="syntax-highlighter line-numbers scroll large"><code class="language-php">&lt;?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Attempt to connect to MySQL database */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
?&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll large hide"><code class="language-php">&lt;?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Attempt to connect to MySQL database */
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($mysqli === false){
    die("ERROR: Could not connect. " . $mysqli->connect_error);
}
?&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll large hide"><code class="language-php">&lt;?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Attempt to connect to MySQL database */
try{
    $pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
    // Set the PDO error mode to exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Could not connect. " . $e->getMessage());
}
?&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<p>If you've downloaded the Object Oriented or PDO code examples using the download button, please remove the text "-oo-format" or "-pdo-format" from file names before testing the code.</p>
				<!--Note box-->
				<div class="color-box">
					<div class="shadow">
						<div class="info-tab note-icon" title="Important Notes"><i></i></div>
						<div class="note-box">
							<p><strong>Note:</strong> Replace the credentials according to your MySQL server setting before testing this code, for example, replace the database name 'demo' with your own database name, replace username 'root' with your own database username, specify database password if there's any.</p>
						</div>
					</div>
				</div>
				<!--End:Note box-->
				<h3>Step 3: Creating the Registration Form</h3>
				<p>Let's create another PHP file "register.php" and put the following example code in it. This example code will create a web form that allows user to register themselves.</p>
				<p>This script will also generate errors if a user tries to submit the form without entering any value, or if username entered by the user is already taken by another user.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox multi-style-mode">
                        <div class="codebox-title">
                        	<h4>Example</h4>
                            <div class="code-style">
                            	<span class="active" data-target="0" data-url="register" title="Show Example Code in Procedural Style">Procedural</span> 
                                <span data-target="1" data-url="register-oo-format" title="Show Example Code in Object Oriented Style">Object Oriented</span> 
                                <span data-target="2" data-url="register-pdo-format" title="Show Example Code in PDO Style">PDO</span>
                            </div>
                        	<a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=register" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a>
                            <span class="box-size"><i title="Maximize"></i></span>
                        </div>
                        <pre class="syntax-highlighter line-numbers scroll xxlarge"><code class="language-php">&lt;?php
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = $confirm_password = "";
$username_err = $password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate username
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter a username.";
    } elseif(!preg_match('/^[a-zA-Z0-9_]+$/', trim($_POST["username"]))){
        $username_err = "Username can only contain letters, numbers, and underscores.";
    } else{
        // Prepare a select statement
        $sql = "SELECT id FROM users WHERE username = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "s", $param_username);
            
            // Set parameters
            $param_username = trim($_POST["username"]);
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                /* store result */
                mysqli_stmt_store_result($stmt);
                
                if(mysqli_stmt_num_rows($stmt) == 1){
                    $username_err = "This username is already taken.";
                } else{
                    $username = trim($_POST["username"]);
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            mysqli_stmt_close($stmt);
        }
    }
    
    // Validate password
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter a password.";     
    } elseif(strlen(trim($_POST["password"])) &lt; 6){
        $password_err = "Password must have atleast 6 characters.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm password.";     
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($password_err) && ($password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
    
    // Check input errors before inserting in database
    if(empty($username_err) && empty($password_err) && empty($confirm_password_err)){
        
        // Prepare an insert statement
        $sql = "INSERT INTO users (username, password) VALUES (?, ?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);
            
            // Set parameters
            $param_username = $username;
            $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Redirect to login page
                header("location: login.php");
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            mysqli_stmt_close($stmt);
        }
    }
    
    // Close connection
    mysqli_close($link);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sign Up&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Sign Up&lt;/h2&gt;
        &lt;p&gt;Please fill this form to create an account.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $confirm_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;input type="reset" class="btn btn-secondary ml-2" value="Reset"&gt;
            &lt;/div&gt;
            &lt;p&gt;Already have an account? &lt;a href="login.php"&gt;Login here&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php">&lt;?php
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = $confirm_password = "";
$username_err = $password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate username
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter a username.";
    } elseif(!preg_match('/^[a-zA-Z0-9_]+$/', trim($_POST["username"]))){
        $username_err = "Username can only contain letters, numbers, and underscores.";
    } else{
        // Prepare a select statement
        $sql = "SELECT id FROM users WHERE username = ?";
        
        if($stmt = $mysqli-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bind_param("s", $param_username);
            
            // Set parameters
            $param_username = trim($_POST["username"]);
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // store result
                $stmt-&gt;store_result();
                
                if($stmt-&gt;num_rows == 1){
                    $username_err = "This username is already taken.";
                } else{
                    $username = trim($_POST["username"]);
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            $stmt-&gt;close();
        }
    }
    
    // Validate password
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter a password.";     
    } elseif(strlen(trim($_POST["password"])) &lt; 6){
        $password_err = "Password must have atleast 6 characters.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm password.";     
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($password_err) && ($password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
    
    // Check input errors before inserting in database
    if(empty($username_err) && empty($password_err) && empty($confirm_password_err)){
        
        // Prepare an insert statement
        $sql = "INSERT INTO users (username, password) VALUES (?, ?)";
         
        if($stmt = $mysqli-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bind_param("ss", $param_username, $param_password);
            
            // Set parameters
            $param_username = $username;
            $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Redirect to login page
                header("location: login.php");
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            $stmt-&gt;close();
        }
    }
    
    // Close connection
    $mysqli-&gt;close();
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sign Up&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Sign Up&lt;/h2&gt;
        &lt;p&gt;Please fill this form to create an account.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $confirm_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;input type="reset" class="btn btn-secondary ml-2" value="Reset"&gt;
            &lt;/div&gt;
            &lt;p&gt;Already have an account? &lt;a href="login.php"&gt;Login here&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php">&lt;?php
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = $confirm_password = "";
$username_err = $password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate username
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter a username.";
    } elseif(!preg_match('/^[a-zA-Z0-9_]+$/', trim($_POST["username"]))){
        $username_err = "Username can only contain letters, numbers, and underscores.";
    } else{
        // Prepare a select statement
        $sql = "SELECT id FROM users WHERE username = :username";
        
        if($stmt = $pdo-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bindParam(":username", $param_username, PDO::PARAM_STR);
            
            // Set parameters
            $param_username = trim($_POST["username"]);
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                if($stmt-&gt;rowCount() == 1){
                    $username_err = "This username is already taken.";
                } else{
                    $username = trim($_POST["username"]);
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            unset($stmt);
        }
    }
    
    // Validate password
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter a password.";     
    } elseif(strlen(trim($_POST["password"])) &lt; 6){
        $password_err = "Password must have atleast 6 characters.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm password.";     
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($password_err) && ($password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
    
    // Check input errors before inserting in database
    if(empty($username_err) && empty($password_err) && empty($confirm_password_err)){
        
        // Prepare an insert statement
        $sql = "INSERT INTO users (username, password) VALUES (:username, :password)";
         
        if($stmt = $pdo-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bindParam(":username", $param_username, PDO::PARAM_STR);
            $stmt-&gt;bindParam(":password", $param_password, PDO::PARAM_STR);
            
            // Set parameters
            $param_username = $username;
            $param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Redirect to login page
                header("location: login.php");
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            unset($stmt);
        }
    }
    
    // Close connection
    unset($pdo);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sign Up&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Sign Up&lt;/h2&gt;
        &lt;p&gt;Please fill this form to create an account.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $confirm_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;input type="reset" class="btn btn-secondary ml-2" value="Reset"&gt;
            &lt;/div&gt;
            &lt;p&gt;Already have an account? &lt;a href="login.php"&gt;Login here&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<p class="break">&mdash; The output of the above example (i.e. signup form) will look something like this:</p>
				<div class="shadow">
                    <div class="preview-box unclickable">
						<img src="../lib/images/php-mysql-signup-form.png" width="730" alt="PHP MySQL Sign Up Form" />
                    </div>
                </div>
				<p>In the above example, we have used the PHP's inbuilt <code>password_hash()</code> function to create a password hash from the password string entered by the user (<i>line no-78</i>). This function creates a password hash using a strong one-way hashing algorithm. It also generates and applies a random salt automatically when hashing the password; this basically means that even if two users have the same passwords, their password hashes will be different.</p>
				<p>At the time of login we'll verify the given password with the password hash stored in the database using the PHP <code>password_verify()</code> function, as demonstrated in the next example.</p>
				<p>We've used the Bootstrap framework to make the <a href="../twitter-bootstrap-tutorial/bootstrap-forms.php.html">form layouts</a> quickly and beautifully. Please, checkout the <a href="../twitter-bootstrap-tutorial/index.html">Bootstrap tutorial</a> section to learn more about this framework.</p>
				<!--Tip Box-->
				<div class="color-box">
					<div class="shadow">
						<div class="info-tab tip-icon" title="Useful Tips"><i></i></div>
						<div class="tip-box">
							<p><strong>Tip:</strong> Password salting is a technique which is widely used to secure passwords by randomizing password hashes, so that if two users have the same password, they will not have the same password hashes. This is done by appending or prepending a random string, called a salt, to the password before hashing.</p>
						</div>
					</div>
				</div>
				<!--End:Tip Box-->
				<hr />
				<h2>Building the Login System</h2>
				<p>In this section we'll create a login form where user can enter their username and password. When user submit the form these inputs will be verified against the credentials stored in the database, if the username and password match, the user is authorized and granted access to the site, otherwise the login attempt will be rejected.</p>
				<h3>Step 1: Creating the Login Form</h3>
				<p>Let's create a file named "login.php" and place the following code inside it.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox multi-style-mode">
                        <div class="codebox-title">
                        	<h4>Example</h4>
                            <div class="code-style">
                            	<span class="active" data-target="0" data-url="login" title="Show Example Code in Procedural Style">Procedural</span> 
                                <span data-target="1" data-url="login-oo-format" title="Show Example Code in Object Oriented Style">Object Oriented</span> 
                                <span data-target="2" data-url="login-pdo-format" title="Show Example Code in PDO Style">PDO</span>
                            </div>
                        	<a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=login" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a>
                            <span class="box-size"><i title="Maximize"></i></span>
                        </div>
                        <pre class="syntax-highlighter line-numbers scroll xxlarge"><code class="language-php hide-scroll">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = $login_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Check if username is empty
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter username.";
    } else{
        $username = trim($_POST["username"]);
    }
    
    // Check if password is empty
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter your password.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate credentials
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT id, username, password FROM users WHERE username = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "s", $param_username);
            
            // Set parameters
            $param_username = $username;
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Store result
                mysqli_stmt_store_result($stmt);
                
                // Check if username exists, if yes then verify password
                if(mysqli_stmt_num_rows($stmt) == 1){                    
                    // Bind result variables
                    mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
                    if(mysqli_stmt_fetch($stmt)){
                        if(password_verify($password, $hashed_password)){
                            // Password is correct, so start a new session
                            session_start();
                            
                            // Store data in session variables
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;                            
                            
                            // Redirect user to welcome page
                            header("location: welcome.php");
                        } else{
                            // Password is not valid, display a generic error message
                            $login_err = "Invalid username or password.";
                        }
                    }
                } else{
                    // Username doesn't exist, display a generic error message
                    $login_err = "Invalid username or password.";
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            mysqli_stmt_close($stmt);
        }
    }
    
    // Close connection
    mysqli_close($link);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Login&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Login&lt;/h2&gt;
        &lt;p&gt;Please fill in your credentials to login.&lt;/p&gt;

        &lt;?php 
        if(!empty($login_err)){
            echo '&lt;div class="alert alert-danger"&gt;' . $login_err . '&lt;/div&gt;';
        }        
        ?&gt;

        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Login"&gt;
            &lt;/div&gt;
            &lt;p&gt;Don't have an account? &lt;a href="register.php"&gt;Sign up now&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php hide-scroll">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = $login_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Check if username is empty
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter username.";
    } else{
        $username = trim($_POST["username"]);
    }
    
    // Check if password is empty
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter your password.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate credentials
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT id, username, password FROM users WHERE username = ?";
        
        if($stmt = $mysqli-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bind_param("s", $param_username);
            
            // Set parameters
            $param_username = $username;
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Store result
                $stmt-&gt;store_result();
                
                // Check if username exists, if yes then verify password
                if($stmt-&gt;num_rows == 1){                    
                    // Bind result variables
                    $stmt-&gt;bind_result($id, $username, $hashed_password);
                    if($stmt-&gt;fetch()){
                        if(password_verify($password, $hashed_password)){
                            // Password is correct, so start a new session
                            session_start();
                            
                            // Store data in session variables
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;                            
                            
                            // Redirect user to welcome page
                            header("location: welcome.php");
                        } else{
                            // Password is not valid, display a generic error message
                            $login_err = "Invalid username or password.";
                        }
                    }
                } else{
                    // Username doesn't exist, display a generic error message
                    $login_err = "Invalid username or password.";
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            $stmt-&gt;close();
        }
    }
    
    // Close connection
    $mysqli-&gt;close();
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Login&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Login&lt;/h2&gt;
        &lt;p&gt;Please fill in your credentials to login.&lt;/p&gt;

        &lt;?php 
        if(!empty($login_err)){
            echo '&lt;div class="alert alert-danger"&gt;' . $login_err . '&lt;/div&gt;';
        }        
        ?&gt;

        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Login"&gt;
            &lt;/div&gt;
            &lt;p&gt;Don't have an account? &lt;a href="register.php"&gt;Sign up now&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php hide-scroll">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is already logged in, if yes then redirect him to welcome page
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = $login_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Check if username is empty
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter username.";
    } else{
        $username = trim($_POST["username"]);
    }
    
    // Check if password is empty
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter your password.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    // Validate credentials
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT id, username, password FROM users WHERE username = :username";
        
        if($stmt = $pdo-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bindParam(":username", $param_username, PDO::PARAM_STR);
            
            // Set parameters
            $param_username = trim($_POST["username"]);
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Check if username exists, if yes then verify password
                if($stmt-&gt;rowCount() == 1){
                    if($row = $stmt-&gt;fetch()){
                        $id = $row["id"];
                        $username = $row["username"];
                        $hashed_password = $row["password"];
                        if(password_verify($password, $hashed_password)){
                            // Password is correct, so start a new session
                            session_start();
                            
                            // Store data in session variables
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;                            
                            
                            // Redirect user to welcome page
                            header("location: welcome.php");
                        } else{
                            // Password is not valid, display a generic error message
                            $login_err = "Invalid username or password.";
                        }
                    }
                } else{
                    // Username doesn't exist, display a generic error message
                    $login_err = "Invalid username or password.";
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            unset($stmt);
        }
    }
    
    // Close connection
    unset($pdo);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Login&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Login&lt;/h2&gt;
        &lt;p&gt;Please fill in your credentials to login.&lt;/p&gt;

        &lt;?php 
        if(!empty($login_err)){
            echo '&lt;div class="alert alert-danger"&gt;' . $login_err . '&lt;/div&gt;';
        }        
        ?&gt;

        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Username&lt;/label&gt;
                &lt;input type="text" name="username" class="form-control &lt;?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $username; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $username_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;    
            &lt;div class="form-group"&gt;
                &lt;label&gt;Password&lt;/label&gt;
                &lt;input type="password" name="password" class="form-control &lt;?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Login"&gt;
            &lt;/div&gt;
            &lt;p&gt;Don't have an account? &lt;a href="register.php"&gt;Sign up now&lt;/a&gt;.&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<p class="break">&mdash; The output of the above example (i.e. login form) will look something like this:</p>
				<div class="shadow">
                    <div class="preview-box unclickable">
						<img src="../lib/images/php-mysql-login-form.png" width="730" alt="PHP MySQL Login Form" />
                    </div>
                </div>
				<h3>Step 2: Creating the Welcome Page</h3>
				<p>Here's the code of our "welcome.php" file, where user is redirected after successful login.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox">
                        <div class="codebox-title"><h4>Example</h4><a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=welcome" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a><span class="box-size"><i title="Maximize"></i></span></div>
                        <pre class="syntax-highlighter line-numbers scroll large"><code class="language-php">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Welcome&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; text-align: center; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1 class="my-5"&gt;Hi, &lt;b&gt;&lt;?php echo htmlspecialchars($_SESSION["username"]); ?&gt;&lt;/b&gt;. Welcome to our site.&lt;/h1&gt;
    &lt;p&gt;
        &lt;a href="reset-password.php" class="btn btn-warning"&gt;Reset Your Password&lt;/a&gt;
        &lt;a href="logout.php" class="btn btn-danger ml-3"&gt;Sign Out of Your Account&lt;/a&gt;
    &lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<p>If data comes from external sources like form filled in by anonymous users, there is a risk that it may contain malicious script indented to launch cross-site scripting (XSS) attacks. Therefore, you must escape this data using the PHP <code>htmlspecialchars()</code> function before displaying it in the browser, so that any HTML tag it contains becomes harmless.</p>
				<p>For example, after escaping special characters the string <code>&lt;script&gt;alert("XSS")&lt;/script&gt;</code> becomes <code style="word-break: break-all;">&amp;lt;script&amp;gt;alert("XSS")&amp;lt;/script&amp;gt;</code> which is not executed by the browser.</p>
				<h3>Step 3: Creating the Logout Script</h3>
				<p>Now, let's create a "logout.php" file. When the user clicks on the log out or sign out link, the script inside this file destroys the session and redirect the user back to the login page.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox">
                        <div class="codebox-title"><h4>Example</h4><a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=logout" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a></div>
                        <pre class="syntax-highlighter line-numbers"><code class="language-php">&lt;?php
// Initialize the session
session_start();
 
// Unset all of the session variables
$_SESSION = array();
 
// Destroy the session.
session_destroy();
 
// Redirect to login page
header("location: login.php");
exit;
?&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<hr />
				<h2>Adding the Password Reset Feature</h2>
				<p>Finally, in this section we will add the password reset utility to our login system. Using this feature <em>logged in users</em> can instantly reset their own password for their accounts.</p>
				<p>Let's create a file named "reset-password.php" and place the following code inside it.</p>
				<!--Code box-->
                <div class="example">
                    <div class="codebox multi-style-mode">
                        <div class="codebox-title">
                        	<h4>Example</h4>
                            <div class="code-style">
                            	<span class="active" data-target="0" data-url="reset-password" title="Show Example Code in Procedural Style">Procedural</span> 
                                <span data-target="1" data-url="reset-password-oo-format" title="Show Example Code in Object Oriented Style">Object Oriented</span> 
                                <span data-target="2" data-url="reset-password-pdo-format" title="Show Example Code in PDO Style">PDO</span>
                            </div>
                        	<a href="https://www.tutorialrepublic.com/examples/bin/download-source.php?topic=php&amp;file=reset-password" target="_top" class="download-btn" title="Download Source Code"><span>Download</span></a>
                            <span class="box-size"><i title="Maximize"></i></span>
                        </div>
                        <pre class="syntax-highlighter line-numbers scroll xxlarge"><code class="language-php">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is logged in, otherwise redirect to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$new_password = $confirm_password = "";
$new_password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate new password
    if(empty(trim($_POST["new_password"]))){
        $new_password_err = "Please enter the new password.";     
    } elseif(strlen(trim($_POST["new_password"])) &lt; 6){
        $new_password_err = "Password must have atleast 6 characters.";
    } else{
        $new_password = trim($_POST["new_password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm the password.";
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($new_password_err) && ($new_password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
        
    // Check input errors before updating the database
    if(empty($new_password_err) && empty($confirm_password_err)){
        // Prepare an update statement
        $sql = "UPDATE users SET password = ? WHERE id = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "si", $param_password, $param_id);
            
            // Set parameters
            $param_password = password_hash($new_password, PASSWORD_DEFAULT);
            $param_id = $_SESSION["id"];
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Password updated successfully. Destroy the session, and redirect to login page
                session_destroy();
                header("location: login.php");
                exit();
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            mysqli_stmt_close($stmt);
        }
    }
    
    // Close connection
    mysqli_close($link);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Reset Password&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Reset Password&lt;/h2&gt;
        &lt;p&gt;Please fill out this form to reset your password.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt; 
            &lt;div class="form-group"&gt;
                &lt;label&gt;New Password&lt;/label&gt;
                &lt;input type="password" name="new_password" class="form-control &lt;?php echo (!empty($new_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $new_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $new_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;a class="btn btn-link ml-2" href="welcome.php"&gt;Cancel&lt;/a&gt;
            &lt;/div&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is logged in, otherwise redirect to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$new_password = $confirm_password = "";
$new_password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate new password
    if(empty(trim($_POST["new_password"]))){
        $new_password_err = "Please enter the new password.";     
    } elseif(strlen(trim($_POST["new_password"])) &lt; 6){
        $new_password_err = "Password must have atleast 6 characters.";
    } else{
        $new_password = trim($_POST["new_password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm the password.";
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($new_password_err) && ($new_password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
        
    // Check input errors before updating the database
    if(empty($new_password_err) && empty($confirm_password_err)){
        // Prepare an update statement
        $sql = "UPDATE users SET password = ? WHERE id = ?";
        
        if($stmt = $mysqli-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bind_param("si", $param_password, $param_id);
            
            // Set parameters
            $param_password = password_hash($new_password, PASSWORD_DEFAULT);
            $param_id = $_SESSION["id"];
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Password updated successfully. Destroy the session, and redirect to login page
                session_destroy();
                header("location: login.php");
                exit();
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            $stmt-&gt;close();
        }
    }
    
    // Close connection
    $mysqli-&gt;close();
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Reset Password&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Reset Password&lt;/h2&gt;
        &lt;p&gt;Please fill out this form to reset your password.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt; 
            &lt;div class="form-group"&gt;
                &lt;label&gt;New Password&lt;/label&gt;
                &lt;input type="password" name="new_password" class="form-control &lt;?php echo (!empty($new_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $new_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $new_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;a class="btn btn-link ml-2" href="welcome.php"&gt;Cancel&lt;/a&gt;
            &lt;/div&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
						<pre class="syntax-highlighter line-numbers scroll xxlarge hide"><code class="language-php">&lt;?php
// Initialize the session
session_start();
 
// Check if the user is logged in, otherwise redirect to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}
 
// Include config file
require_once "config.php";
 
// Define variables and initialize with empty values
$new_password = $confirm_password = "";
$new_password_err = $confirm_password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validate new password
    if(empty(trim($_POST["new_password"]))){
        $new_password_err = "Please enter the new password.";     
    } elseif(strlen(trim($_POST["new_password"])) &lt; 6){
        $new_password_err = "Password must have atleast 6 characters.";
    } else{
        $new_password = trim($_POST["new_password"]);
    }
    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $confirm_password_err = "Please confirm the password.";
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if(empty($new_password_err) && ($new_password != $confirm_password)){
            $confirm_password_err = "Password did not match.";
        }
    }
        
    // Check input errors before updating the database
    if(empty($new_password_err) && empty($confirm_password_err)){
        // Prepare an update statement
        $sql = "UPDATE users SET password = :password WHERE id = :id";
        
        if($stmt = $pdo-&gt;prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt-&gt;bindParam(":password", $param_password, PDO::PARAM_STR);
            $stmt-&gt;bindParam(":id", $param_id, PDO::PARAM_INT);
            
            // Set parameters
            $param_password = password_hash($new_password, PASSWORD_DEFAULT);
            $param_id = $_SESSION["id"];
            
            // Attempt to execute the prepared statement
            if($stmt-&gt;execute()){
                // Password updated successfully. Destroy the session, and redirect to login page
                session_destroy();
                header("location: login.php");
                exit();
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            unset($stmt);
        }
    }
    
    // Close connection
    unset($pdo);
}
?&gt;
 
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Reset Password&lt;/title&gt;
    &lt;link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&gt;
    &lt;style&gt;
        body{ font: 14px sans-serif; }
        .wrapper{ width: 360px; padding: 20px; }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrapper"&gt;
        &lt;h2&gt;Reset Password&lt;/h2&gt;
        &lt;p&gt;Please fill out this form to reset your password.&lt;/p&gt;
        &lt;form action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?&gt;" method="post"&gt; 
            &lt;div class="form-group"&gt;
                &lt;label&gt;New Password&lt;/label&gt;
                &lt;input type="password" name="new_password" class="form-control &lt;?php echo (!empty($new_password_err)) ? 'is-invalid' : ''; ?&gt;" value="&lt;?php echo $new_password; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $new_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;label&gt;Confirm Password&lt;/label&gt;
                &lt;input type="password" name="confirm_password" class="form-control &lt;?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?&gt;"&gt;
                &lt;span class="invalid-feedback"&gt;&lt;?php echo $confirm_password_err; ?&gt;&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class="form-group"&gt;
                &lt;input type="submit" class="btn btn-primary" value="Submit"&gt;
                &lt;a class="btn btn-link ml-2" href="welcome.php"&gt;Cancel&lt;/a&gt;
            &lt;/div&gt;
        &lt;/form&gt;
    &lt;/div&gt;    
&lt;/body&gt;
&lt;/html&gt;</code></pre>
                    </div>
                </div>
                <!--End:Code box-->
				<!--Bottom Navigation-->
                <div class="bottom-link clearfix">
                    <a href="php-mysql-ajax-live-search.php.html" class="previous-page-bottom">Previous Page</a>
                    <a href="../php-examples.php.html" class="next-page-bottom">Next Page</a>
                </div>
                <!--End:Bottom Navigation-->  
                <!-- InstanceEndEditable -->
                <div class="bottom-ad clearfix">

     <div class="ad-label">Advertisements</div>

     <!--Rectangle Left-->
     <div class="rectangle-left fl">
          <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
          <!-- Large Rectangle Left -->
          <ins class="adsbygoogle"
               style="display:inline-block;width:336px;height:280px"
               data-ad-client="ca-pub-9107540490929984"
               data-ad-slot="8162953958"></ins>
          <script>
          (adsbygoogle = window.adsbygoogle || []).push({});
          </script>
     </div>
     <!--End:Rectangle Left-->

     <!--Rectangle Right-->
     <div class="rectangle-right fr">
          <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
          <!-- Large Rectangle Right -->
          <ins class="adsbygoogle"
               style="display:inline-block;width:336px;height:280px"
               data-ad-client="ca-pub-9107540490929984"
               data-ad-slot="3324015654"></ins>
          <script>
          (adsbygoogle = window.adsbygoogle || []).push({});
          </script>
     </div>
     <!--End:Rectangle Right-->

</div>

            </div>
            <!--End:Text Content-->
            <!--Feedback Form-->
			<div class="snippets">
	<a href="../snippets/gallery.php.html" target="_blank"><img src="../lib/images/bootstrap-code-snippets.png" alt="Bootstrap UI Design Templates" /></a>
</div>            <!--End:Feedback Form-->
        </div>        
        <div class="rightcolumn">
            <div class="sidebar">
    
    <div class="ad-label">Advertisements</div>

    <div class="skyscraper primary">
        <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
        <!-- Premium Skyscraper -->
        <ins class="adsbygoogle"
            style="display:inline-block;width:160px;height:600px"
            data-ad-client="ca-pub-9107540490929984"
            data-ad-slot="4376141825"></ins>
        <script>
        (adsbygoogle = window.adsbygoogle || []).push({});
        </script>
    </div>

    <div class="skyscraper">
     <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
     <!-- Bottom Skyscraper -->
     <ins class="adsbygoogle"
          style="display:inline-block;width:160px;height:600px"
          data-ad-client="ca-pub-9107540490929984"
          data-ad-slot="3387984471"></ins>
     <script>
     (adsbygoogle = window.adsbygoogle || []).push({});
     </script>
</div>
</div>        </div>
    </div>
    <!--Footer-->
	<!--Footer-->
<div class="footer">
    <div class="appeal">
        <div class="wrapper">
            <p>Is this website helpful to you? Please give us a
            <a href="../like.php.html" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=250,width=600,top=150, left='+((screen.width/2)-300));return false;">like</a>,
            or share your <a href="../contact-us.php.html" target="_blank">feedback</a><em> to help us improve</em>.
            Connect with us on <a href="https://www.facebook.com/tutorialrepublic" target="_blank">Facebook</a> and <a href="https://twitter.com/tutrepublic" target="_blank">Twitter</a> for the latest updates.</p>               
        </div>
    </div>
    <div class="footer-inner">
        <div class="wrapper clearfix">                
            <div class="link-box">
                <h4>About Us</h4>
                <div class="clearfix">
                    <a href="../about-us.php.html">Our Story</a>                    
                    <a href="../terms-of-use.php.html">Terms of Use</a>
                    <a href="../privacy-policy.php.html">Privacy Policy</a>                    
                </div>
            </div>
            <div class="link-box">
                <h4>Contact</h4>
                <div class="clearfix">
                    <a href="../contact-us.php.html">Contact Us</a>                    
                    <a href="../contact-us.php.html" target="_blank">Report Error</a>
                    <a href="../advertise-with-us.php.html">Advertise</a>                    
                </div>
            </div>
            <div class="tool-box">
                <h4>Interactive Tools</h4>
                <div class="tools-list clearfix" id="tools">
                    <a href="../font-awesome-icons-classes.php.html" target="_blank">Font Awesome Icon Search Utility</a>
                    <a href="../html-formatter.php.html" target="_blank">HTML Formatter</a>
                    <a href="../faq/what-is-the-maximum-length-of-title-and-meta-description-tag.php.html">Title &amp; Meta Length Calculator</a>
                    <a href="../html-reference/html-color-picker.php.html">HTML Color Picker</a>
                    <a href="../twitter-bootstrap-button-generator.php.html" target="_blank">Bootstrap Button Generator</a>
                    <a href="../codelab.php%3Ftopic=sql&amp;file=select-all.html" target="_blank">SQL Playground</a>
                    <a href="../bootstrap-icons-classes.php.html" target="_blank">Bootstrap Icon Finder</a>
                    <a href="../codelab.php%3Ftopic=html&amp;file=hello-world.html" target="_blank">HTML Editor</a>
                </div>
            </div>
            <div class="footer-logo">
                <p><img src="../lib/images/logo.svg" alt="TutorialRepublic" /><p>
					<div>
						<a href="https://www.buymeacoffee.com/tutrepublic" class="bmc-btn" rel="nofollow" target="_blank">
    						<img src="../lib/images/bmc-btn.png" alt="BMC" />
						</a>
					</div>
            </div>
        </div>
    </div>           
        <div class="bottom-strip">
        <div class="wrapper">
            <div class="notice">Copyright &copy; 2022 Tutorial Republic. All Rights Reserved.</div>
            <div class="social-media">
                <em>Share This:</em>
                <a href="https://facebook.com/sharer.php?u=https://www.tutorialrepublic.com%2Fphp-tutorial%2Fphp-mysql-login-system.php" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=150, left='+((screen.width/2)-300));return false;" title="Facebook"><i class="icon-facebook"></i></a>
                <a href="php-mysql-login-system.php.html#" id="tweet-btn" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=150, left='+((screen.width/2)-300));return false;" title="Twitter"><i class="icon-twitter"></i></a>
                <a href="php-mysql-login-system.php.html#" id="email-btn" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600,top=150, left='+((screen.width/2)-300));return false;" rel="noreferrer" title="Gmail"><i class="icon-mail"></i></a>
            </div>
        </div>            
    </div>
    <script>
        var title = document.title.replace('- Tutorial Republic', '');
        document.getElementById('tweet-btn').href = 'https://twitter.com/share?text=' + title + '- &url=https://www.tutorialrepublic.com%2Fphp-tutorial%2Fphp-mysql-login-system.php';
        document.getElementById('email-btn').href = 'https://mail.google.com/mail/?view=cm&fs=1&su=' + title + '&body=https://www.tutorialrepublic.com%2Fphp-tutorial%2Fphp-mysql-login-system.php';
    </script>
</div>
<!--End:Footer-->
    
<div class="backdrop mobile-only"></div>

<!-- TutorialRepublic base script -->
<script>
// Adding CSS files
[	
	'/lib/styles/legacy/extended-1.1.css',
	'/lib/icomoon/style.css'
].forEach(function(href) {
	var link = document.createElement('link');
	link.rel = 'stylesheet';
	link.href = href;
	(document.getElementsByTagName('head')[0]).appendChild(link);
});

// Adding JS files
[
	'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js',
	'/lib/js/prism.js',
	'/lib/js/default-1.3.js'
].forEach(function(src) {
	var script = document.createElement('script');
	script.async = false; // important
	script.src = src;
	(document.getElementsByTagName('body')[0]).appendChild(script);
});
</script>


    <!--End:Footer-->
</body>
<!-- InstanceEnd --></html>