Login and Registration in PHP are essential parts of any website in PHP. Here we will learn the following points in this tutorial on How you can build a simple, lightweight user registration and login in PHP with MySQL database.
user-registration.php
3
if
(!
empty
(
$_POST
[
"signup-btn"
])) {
4
require_once
'./Model/Member.php'
;
5
$member
=
new
Member();
6
$registrationResponse
=
$member
->registerMember();
12
<link href=
"assets/css/tutorial-style.css"
type=
"text/css"
14
<link href=
"assets/css/user-registration.css"
type=
"text/css"
16
<script src=
"vendor/jquery/jquery-3.3.1.js"
type=
"text/javascript"
></script>
19
<div
class
=
"tutorial-container"
>
20
<div
class
=
"sign-up-container"
>
21
<div
class
=
"login-signup"
>
22
<a href=
"index.php"
>Login</a>
25
<form name=
"sign-up"
action=
""
method=
"post"
26
onsubmit=
"return signupValidation()"
>
27
<div
class
=
"signup-heading"
>New User Registration</div>
29
if
(!
empty
(
$registrationResponse
[
"status"
])) {
32
if
(
$registrationResponse
[
"status"
] ==
"error"
) {
34
<div
class
=
"server-response error-msg"
><?php
echo
$registrationResponse
[
"message"
]; ?></div>
36
}
else
if
(
$registrationResponse
[
"status"
] ==
"success"
) {
38
<div
class
=
"server-response success-msg"
><?php
echo
$registrationResponse
[
"message"
]; ?></div>
45
<div
class
=
"error-msg"
id=
"error-msg"
></div>
47
<div
class
=
"inline-block"
>
48
<div
class
=
"form-label"
>
49
Enter Your Username<span
class
=
"required error"
id=
"username-info"
></span>
51
<input
class
=
"input-box-330"
type=
"text"
name=
"username"
56
<div
class
=
"inline-block"
>
57
<div
class
=
"form-label"
>
58
Enter Your Email<span
class
=
"required error"
id=
"email-info"
></span>
60
<input
class
=
"input-box-330"
type=
"email"
name=
"email"
id=
"email"
>
64
<div
class
=
"inline-block"
>
65
<div
class
=
"form-label"
>
66
Enter Your Password<span
class
=
"required error"
id=
"signup-password-info"
></span>
68
<input
class
=
"input-box-330"
type=
"password"
69
name=
"signup-password"
id=
"signup-password"
>
73
<div
class
=
"inline-block"
>
74
<div
class
=
"form-label"
>
75
ReEnter Your Password<span
class
=
"required error"
76
id=
"confirm-password-info"
></span>
78
<input
class
=
"input-box-330"
type=
"password"
79
name=
"confirm-password"
id=
"confirm-password"
>
83
<input
class
=
"btn"
type=
"submit"
name=
"signup-btn"
84
id=
"signup-btn"
value=
"Sign up"
>
87
<div
class
=
"inline-block"
>
88
<div
class
=
"form-label"
>
101
function
signupValidation() {
104
$(
"#username"
).removeClass(
"error-field"
);
105
$(
"#email"
).removeClass(
"error-field"
);
106
$(
"#password"
).removeClass(
"error-field"
);
107
$(
"#confirm-password"
).removeClass(
"error-field"
);
109
var
UserName = $(
"#username"
).val();
110
var
email = $(
"#email"
).val();
111
var
Password = $(
'#signup-password'
).val();
112
var
ConfirmPassword = $(
'#confirm-password'
).val();
113
var
emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
115
$(
"#username-info"
).html(
""
).hide();
116
$(
"#email-info"
).html(
""
).hide();
118
if
(UserName.trim() ==
""
) {
119
$(
"#username-info"
).html(
"required."
).css(
"color"
,
"#ee0000"
).show();
120
$(
"#username"
).addClass(
"error-field"
);
124
$(
"#email-info"
).html(
"required"
).css(
"color"
,
"#ee0000"
).show();
125
$(
"#email"
).addClass(
"error-field"
);
127
}
else
if
(email.trim() ==
""
) {
128
$(
"#email-info"
).html(
"Invalid email address."
).css(
"color"
,
"#ee0000"
).show();
129
$(
"#email"
).addClass(
"error-field"
);
131
}
else
if
(!emailRegex.test(email)) {
132
$(
"#email-info"
).html(
"Invalid email address."
).css(
"color"
,
"#ee0000"
)
134
$(
"#email"
).addClass(
"error-field"
);
137
if
(Password.trim() ==
""
) {
138
$(
"#signup-password-info"
).html(
"required."
).css(
"color"
,
"#ee0000"
).show();
139
$(
"#signup-password"
).addClass(
"error-field"
);
142
if
(ConfirmPassword.trim() ==
""
) {
143
$(
"#confirm-password-info"
).html(
"required."
).css(
"color"
,
"#ee0000"
).show();
144
$(
"#confirm-password"
).addClass(
"error-field"
);
147
if
(Password != ConfirmPassword){
148
$(
"#error-msg"
).html(
"Both passwords must be same."
).show();
151
if
(valid == false) {
152
$(
'.error-field'
).first().focus();
User Registration CSS
9
box-shadow:
0
1
rem
9
rem
9px
rgb
(
0
0
0
/
18%
)
!important
;
10
border
:
1px
solid
#cbcbcb
;
20
text-decoration
:
none
;
25
text-decoration
:
none
;
37
display
: inline-
block
;
54
.sign-up-container .error {
61
.sign-up-container .error-field {
62
border
:
1px
solid
#d96557
;
65
.sign-up-container .error:before {
Output
User Registration Output
Login Page
4
if
(!
empty
(
$_POST
[
"login-btn"
])) {
5
require_once
__DIR__ .
'/Model/Member.php'
;
6
$member
=
new
Member();
7
$loginResult
=
$member
->loginMember();
13
<link href=
"assets/css/tutorial-style.css"
type=
"text/css"
15
<link href=
"assets/css/user-registration.css"
type=
"text/css"
17
<script src=
"vendor/jquery/jquery-3.3.1.js"
type=
"text/javascript"
></script>
20
<div
class
=
"tutorial-container"
>
21
<div
class
=
"sign-up-container"
>
22
<div
class
=
"login-signup"
>
23
<a href=
"user-registration.php"
>Sign up</a>
25
<div
class
=
"signup-align"
>
26
<form name=
"login"
action=
""
method=
"post"
27
onsubmit=
"return loginValidation()"
>
28
<div
class
=
"signup-heading"
>Login</div>
29
<?php
if
(!
empty
(
$loginResult
)){?>
30
<div
class
=
"error-msg"
><?php
echo
$loginResult
;?></div>
33
<div
class
=
"inline-block"
>
34
<div
class
=
"form-label"
>
35
Enter Your Username<span
class
=
"required error"
id=
"username-info"
></span>
37
<input
class
=
"input-box-330"
type=
"text"
name=
"username"
42
<div
class
=
"inline-block"
>
43
<div
class
=
"form-label"
>
44
Enter Your Password<span
class
=
"required error"
id=
"login-password-info"
></span>
46
<input
class
=
"input-box-330"
type=
"password"
47
name=
"login-password"
id=
"login-password"
>
51
<input
class
=
"btn"
type=
"submit"
name=
"login-btn"
52
id=
"login-btn"
value=
"Login"
>
55
<div
class
=
"inline-block"
>
56
<div
class
=
"form-label"
>
68
function
loginValidation() {
70
$(
"#username"
).removeClass(
"error-field"
);
71
$(
"#password"
).removeClass(
"error-field"
);
73
var
UserName = $(
"#username"
).val();
74
var
Password = $(
'#login-password'
).val();
76
$(
"#username-info"
).html(
""
).hide();
78
if
(UserName.trim() ==
""
) {
79
$(
"#username-info"
).html(
"required."
).css(
"color"
,
"#ee0000"
).show();
80
$(
"#username"
).addClass(
"error-field"
);
83
if
(Password.trim() ==
""
) {
84
$(
"#login-password-info"
).html(
"required."
).css(
"color"
,
"#ee0000"
).show();
85
$(
"#login-password"
).addClass(
"error-field"
);
89
$(
'.error-field'
).first().focus();
User Login Output
User Login Page Output
Create a Model for the User Registration and Login
11
require_once __DIR__ . '/../lib/DataSource.php';
12
$this->ds = new DataSource();
15
public function isUsernameExists($username)
17
$query = 'SELECT * FROM tbl_users where username = ?';
22
$resultArray = $this->ds->select($query, $paramType, $paramValue);
24
if (is_array($resultArray)) {
25
$count = count($resultArray);
36
public function isEmailExists($email)
38
$query = 'SELECT * FROM tbl_users where email = ?';
43
$resultArray = $this->ds->select($query, $paramType, $paramValue);
45
if (is_array($resultArray)) {
46
$count = count($resultArray);
57
public function registerMember()
59
$isUsernameExists = $this->isUsernameExists($_POST["username"]);
60
$isEmailExists = $this->isEmailExists($_POST["email"]);
61
if ($isUsernameExists) {
64
"message" => "Username already exists."
66
} else if ($isEmailExists) {
69
"message" => "Email already exists."
72
if (! empty($_POST["signup-password"])) {
75
$hashedPassword = password_hash($_POST["signup-password"], PASSWORD_DEFAULT);
77
$query = 'INSERT INTO tbl_users (username, password, email) VALUES (?, ?, ?)';
84
$memberId = $this->ds->insert($query, $paramType, $paramValue);
85
if (! empty($memberId)) {
87
"status" => "success",
88
"message" => "You have registered successfully."
95
public function getMember($username)
97
$query = 'SELECT * FROM tbl_users where username = ?';
102
$memberRecord = $this->ds->select($query, $paramType, $paramValue);
103
return $memberRecord;
107
public function loginMember()
109
$memberRecord = $this->getMember($_POST["username"]);
111
if (! empty($memberRecord)) {
112
if (! empty($_POST["login-password"])) {
113
$password = $_POST["login-password"];
115
$hashedPassword = $memberRecord[0]["password"];
117
if (password_verify($password, $hashedPassword)) {
123
if ($loginPassword == 1) {
126
$_SESSION["username"] = $memberRecord[0]["username"];
127
session_write_close();
129
header("Location: $url");
130
} else if ($loginPassword == 0) {
131
$loginStatus = "Invalid username or password.";
Data Base Config
This class is a wrapper for MySQL / mysqli with PreparedStatement for User Login and Registration in PHP example. You can use it in any of your PHP projects to connect with databases. It is available in the download source code linked at the end of this tutorial.
10
const
HOST =
'localhost'
;
12
const
USERNAME =
'root'
;
14
const
PASSWORD =
'201819'
;
16
const
DATABASENAME =
'tutorial'
;
21
function
__construct()
23
$this
->conn =
$this
->getConnection();
27
public
function
getConnection()
29
$conn
=
new
\mysqli(self::HOST, self::USERNAME, self::PASSWORD, self::DATABASENAME);
31
if
(mysqli_connect_errno()) {
32
trigger_error(
"Problem with connecting to database."
);
35
$conn
->set_charset(
"utf8"
);
40
public
function
getPdoConnection()
44
$dsn
=
'mysql:host='
. self::HOST .
';dbname='
. self::DATABASENAME;
45
$conn
=
new
\PDO(
$dsn
, self::USERNAME, self::PASSWORD);
46
$conn
->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
47
} catch (\Exception
$e
) {
48
exit
(
"PDO Connect Error: "
.
$e
->getMessage());
54
public
function
select(
$query
,
$paramType
=
""
,
$paramArray
=
array
())
56
$stmt
=
$this
->conn->prepare(
$query
);
58
if
(!
empty
(
$paramType
) && !
empty
(
$paramArray
)) {
60
$this
->bindQueryParams(
$stmt
,
$paramType
,
$paramArray
);
63
$result
=
$stmt
->get_result();
65
if
(
$result
->num_rows > 0) {
66
while
(
$row
=
$result
->fetch_assoc()) {
71
if
(!
empty
(
$resultset
)) {
77
public
function
insert(
$query
,
$paramType
,
$paramArray
)
79
$stmt
=
$this
->conn->prepare(
$query
);
80
$this
->bindQueryParams(
$stmt
,
$paramType
,
$paramArray
);
83
$insertId
=
$stmt
->insert_id;
88
public
function
execute(
$query
,
$paramType
=
""
,
$paramArray
=
array
())
90
$stmt
=
$this
->conn->prepare(
$query
);
92
if
(!
empty
(
$paramType
) && !
empty
(
$paramArray
)) {
93
$this
->bindQueryParams(
$stmt
,
$paramType
,
$paramArray
);
99
public
function
bindQueryParams(
$stmt
,
$paramType
,
$paramArray
=
array
())
101
$paramValueReference
[] = &
$paramType
;
102
for
(
$i
= 0;
$i
<
count
(
$paramArray
);
$i
++) {
103
$paramValueReference
[] = &
$paramArray
[
$i
];
105
call_user_func_array(
array
(
108
),
$paramValueReference
);
112
public
function
getRecordCount(
$query
,
$paramType
=
""
,
$paramArray
=
array
())
114
$stmt
=
$this
->conn->prepare(
$query
);
115
if
(!
empty
(
$paramType
) && !
empty
(
$paramArray
)) {
117
$this
->bindQueryParams(
$stmt
,
$paramType
,
$paramArray
);
120
$stmt
->store_result();
121
$recordCount
=
$stmt
->num_rows;
Logout
This is the logout script for User Login and Registration in PHP .. You can use it in any of your PHP projects. It clears the complete user session and redirects the user to the index page.
2
// clear all the session variables and redirect to index
7
header("Location: $url");?>
MySQL database script
This is the script to create a table with five collum for this example of User Login and Registration in PHP. You can add more collum as per your requirement.
1
Table structure for table `tbl_users`
4
CREATE TABLE `tbl_users` (
6
`username` varchar(255) NOT NULL,
7
`password` varchar(200) NOT NULL,
8
`email` varchar(255) NOT NULL,
9
`create_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
10
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
11
ALTER TABLE `tbl_users`
12
ADD PRIMARY KEY (`id`);
15
-- AUTO_INCREMENT for dumped tables
19
-- AUTO_INCREMENT for table `tbl_users`
21
ALTER TABLE `tbl_users`
22
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
Home.php
3
if (isset($_SESSION["username"])) {
4
$username = $_SESSION["username"];
11
header("Location: $url");
18
<link href="assets/css/tutorial-style.css" type="text/css"
20
<link href="assets/css/user-registration.css" type="text/css"
24
<div class="tutorial-container">
25
<div class="page-header">
26
<span class="login-signup"><a href="logout.php">Logout</a></span>
28
<div class="page-content">Welcome <?php echo $username;?></div>
index.php
2
require_once __DIR__ . "/login.php";
About Post Author
Continue Reading