Как отобразить информацию о зарегистрированном пользователе в PHP?

Опубликовано: 6 Января, 2022

На веб-сайтах социальных сетей, таких как Facebook, Instagram и т. Д., Имя пользователя и изображение профиля пользователя, вошедшего в систему, отображаются в заголовке веб-сайта, и этот заголовок остается постоянным, независимо от веб-страницы, которую открыл пользователь. Такую функциональность можно создать с помощью переменных сеанса .
Переменные сеанса существуют только тогда, когда сеанс пользователя активен. После завершения сеанса переменные сеанса уничтожаются. Они уникальны для каждого посетителя и обычно используются для хранения пользовательской информации, такой как имя пользователя, изображение профиля и т. Д., После входа пользователя в систему.
Переменные сеанса используются для отображения информации вошедшего в систему пользователя в PHP.
Пояснение и код проекта:
Это простая система регистрации. Страница register.php запрашивает желаемое имя пользователя, адрес электронной почты и пароль пользователя, а затем отправляет введенные данные в базу данных после нажатия кнопки отправки. После этого пользователь перенаправляется на страницу index.php, где отображается приветственное сообщение и имя пользователя, выполнившего вход.
Первый шаг - создать базу данных, а затем таблицу внутри нее. База данных называется «регистрация», а таблица - «пользователи». Таблица «Пользователи» будет содержать 4 поля.

  1. id - первичный ключ - автоинкремент
  2. имя пользователя - varchar (100)
  3. электронная почта - varchar (100)
  4. пароль - varchar (100)

«Id» будет первичным ключом, это означает, что он будет уникальным для каждого зарегистрированного пользователя. Он также будет автоматически увеличиваться при каждой новой регистрации. Тип данных для имени пользователя, электронной почты и пароля будет varchar. Размер можно регулировать в соответствии с требованиями, однако достаточно 100.
Код SQL для таблицы:

sql

CREATE TABLE `users` (
`id` int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` varchar (100) NOT NULL ,
`email` varchar (100) NOT NULL ,
` password ` varchar (100) NOT NULL
)

phpMyAdmin после создания базы данных и таблицы

Папка проекта, содержащая необходимые файлы

error.php

html

<? php if (count($errors) > 0) : ?>
< div class = "error" >
<? php foreach ($errors as $error) : ?>
< p ><? php echo $error ?></ p >
<? php endforeach ?>
</ div >
<? php endif ?>

Объяснение: Файл error.php отвечает за хранение сообщений об ошибках системы. Предположим, пользователь вводит неправильную комбинацию имени пользователя и пароля, тогда в таких случаях сообщения об ошибках будут сохраняться в переменной $ error, которая затем будет отображаться пользователю с помощью 'echo; функция PHP.
server.php

php

<?php
// Starting the session, necessary
// for using session variables
session_start();
// Declaring and hoisting the variables
$username = "" ;
$email = "" ;
$errors = array ();
$_SESSION [ 'success' ] = "" ;
// DBMS connection code -> hostname,
// username, password, database name
$db = mysqli_connect( 'localhost' , 'root' , '' , 'registration' );
// Registration code
if (isset( $_POST [ 'reg_user' ])) {
// Receiving the values entered and storing
// in the variables
// Data sanitization is done to prevent
// SQL injections
$username = mysqli_real_escape_string( $db , $_POST [ 'username' ]);
$email = mysqli_real_escape_string( $db , $_POST [ 'email' ]);
$password_1 = mysqli_real_escape_string( $db , $_POST [ 'password_1' ]);
$password_2 = mysqli_real_escape_string( $db , $_POST [ 'password_2' ]);
// Ensuring that the user has not left any input field blank
// error messages will be displayed for every blank input
if ( empty ( $username )) { array_push ( $errors , "Username is required" ); }
if ( empty ( $email )) { array_push ( $errors , "Email is required" ); }
if ( empty ( $password_1 )) { array_push ( $errors , "Password is required" ); }
if ( $password_1 != $password_2 ) {
array_push ( $errors , "The two passwords do not match" );
// Checking if the passwords match
}
// If the form is error free, then register the user
if ( count ( $errors ) == 0) {
// Password encryption to increase data security
$password = md5( $password_1 );
// Inserting data into table
$query = "INSERT INTO users (username, email, password)
VALUES( '$username' , '$email' , '$password' )";
mysqli_query( $db , $query );
// Storing username of the logged in user,
// in the session variable
$_SESSION [ 'username' ] = $username ;
// Welcome message
$_SESSION [ 'success' ] = "You have logged in" ;
// Page on which the user will be
// redirected after logging in
header( 'location: index.php' );
}
}
// User login
if (isset( $_POST [ 'login_user' ])) {
// Data sanitization to prevent SQL injection
$username = mysqli_real_escape_string( $db , $_POST [ 'username' ]);
$password = mysqli_real_escape_string( $db , $_POST [ 'password' ]);
// Error message if the input field is left blank
if ( empty ( $username )) {
array_push ( $errors , "Username is required" );
}
if ( empty ( $password )) {
array_push ( $errors , "Password is required" );
}
// Checking for the errors
if ( count ( $errors ) == 0) {
// Password matching
$password = md5( $password );
$query = "SELECT * FROM users WHERE username=
'$username' AND password= '$password' ";
$results = mysqli_query( $db , $query );
// $results = 1 means that one user with the
// entered username exists
if (mysqli_num_rows( $results ) == 1) {
// Storing username in session variable
$_SESSION [ 'username' ] = $username ;
// Welcome message
$_SESSION [ 'success' ] = "You have logged in!" ;
// Page on which the user is sent
// to after logging in
header( 'location: index.php' );
}
else {
// If the username and password doesn't match
array_push ( $errors , "Username or password incorrect" );
}
}
}
?>

Объяснение: Сеанс запущен с использованием метода session_start (). После этого объявляются переменные и создается массив ошибок. В нем будут храниться все сообщения об ошибках. Затем страница server.php подключается к ранее созданной базе данных «регистрации». После того, как пользователь нажимает кнопку «зарегистрироваться» на кнопке register.php, введенные данные отправляются в базу данных, и на этом завершается новая регистрация. Однако перед этим выполняется проверка формы, чтобы убедиться, что пользователь правильно заполняет форму. Все поля обязательны, и их нельзя оставлять пустыми.
Строка 18-21 : mysqli_real_escape_string экранирует специальные символы перед отправкой данных в базу данных. Это важно для защиты базы данных от SQL-инъекций.
Строки 25–27: Эти строки проверяют, заполнил ли пользователь все поля ввода и совпадают ли «пароль» и «подтверждение пароля». Если оба пароля совпадают, код запускается дальше.
Строка 29 - 32: Проверка совпадения пароля.
Строка 35–46: Если количество ошибок до этого момента равно нулю, пароль затем зашифровывается «md5», и введенные данные отправляются в базу данных. После завершения процесса регистрации имя пользователя сохраняется в переменной сеанса, и пользователь перенаправляется на страницу index.php, где его просят ввести учетные данные для входа.
Строка 50 - 80: Сначала имя пользователя и пароль, введенные в sanitized. Это важно для повышения безопасности базы данных, так как исключает вероятность любой SQL-инъекции. Пользователь получает сообщение об ошибке, если поле имени пользователя или пароля остается пустым.
Если количество ошибок до этой точки кода равно 0, то выполняется проверка базы данных. Если обнаруживается, что введенное пользователем имя присутствует в базе данных, то пользователь успешно входит в систему. Затем пользователь перенаправляется на страницу index.php.
login.php

html

<? php include('server.php') ?>
<!DOCTYPE html>
< html >
< head >
< title >
Login and Registration
System - LAMP Stack
</ title >
< link rel = "stylesheet" type = "text/css"
href = "style.css" >
</ head >
< body >
< div class = "header" >
< h2 >Login Here!</ h2 >
</ div >
< form method = "post" action = "login.php" >
<? php include('errors.php'); ?>
< div class = "input-group" >
< label >Enter Username</ label >
< input type = "text" name = "username" >
</ div >
< div class = "input-group" >
< label >Enter Password</ label >
< input type = "password" name = "password" >
</ div >
< div class = "input-group" >
< button type = "submit" class = "btn"
name = "login_user" >
Login
</ button >
</ div >
< p >
New Here?
< a href = "register.php" >
Click here to regsiter!
</ a >
</ p >
</ form >
</ body >
</ html >

Пояснение: Страница входа в систему. Пользователь должен ввести имя пользователя и пароль для успешного входа в систему. После нажатия кнопки входа в систему запускается код входа, написанный на странице server.php, который выполняет всю внутреннюю работу, например, проверяет, совпадают ли имя пользователя и пароль или нет.
register.php

php

<?php include ( 'server.php' ) ?>
<!DOCTYPE html>
<html>
<head>
<title>
Registration system PHP and MySQL
</title>
<link rel= "stylesheet" type= "text/css"
href= "style.css" >
</head>
<body>
<div class = "header" >
<h2>Register</h2>
</div>
<form method= "post" action= "register.php" >
<?php include ( 'errors.php' ); ?>
<div class = "input-group" >
<label>Enter Username</label>
<input type= "text" name= "username"
value= "<?php echo $username; ?>" >
</div>
<div class = "input-group" >
<label>Email</label>
<input type= "email" name= "email"
value= "<?php echo $email; ?>" >
</div>
<div class = "input-group" >
<label>Enter Password</label>
<input type= "password" name= "password_1" >
</div>
<div class = "input-group" >
<label>Confirm password</label>
<input type= "password" name= "password_2" >
</div>
<div class = "input-group" >
<button type= "submit" class = "btn"
name= "reg_user" >
Register
</button>
</div>
<p>
Already having an account?
<a href= "login.php" >
Login Here!
</a>
</p>
</form>
</body>
</html>

Объяснение: Эта страница содержит HTML-код страницы регистрации. Страницы server.php и errors.php включены в строки 01 и 15 соответственно. Это необходимо для того, чтобы серверная часть системы регистрации работала. Пользователя просят ввести имя пользователя, адрес электронной почты и пароль для создания учетной записи. После заполнения полей ввода введенные данные отправляются в таблицу базы данных.
index.php

html



<? php
// Starting the session, to use and
// store data in session variable
session_start();
// If the session variable is empty, this
// means the user is yet to login
// User will be sent to 'login.php' page
// to allow the user to login
if (!isset($_SESSION['username'])) {
$_SESSION['msg'] = "You have to log in first";
header('location: login.php');
}
// Logout button will destroy the session, and
// will unset the session variables
// User will be headed to 'login.php'
// after loggin out
if (isset($_GET['logout'])) {
session_destroy();
unset($_SESSION['username']);
header("location: login.php");
}
?>
<!DOCTYPE html>
< html >
< head >
< title >Homepage</ title >
< link rel = "stylesheet" type = "text/css"
href = "style.css" >
</ head >
< body >
< div class = "header" >
< h2 >Home Page</ h2 >
</ div >
< div class = "content" >
<!-- Creating notification when the
user logs in -->
<!-- Accessible only to the users that
have logged in already -->
<? php if (isset($_SESSION['success'])) : ?>
< div class = "error success" >
< h3 >
<? php
echo $_SESSION['success'];
unset($_SESSION['success']);
?>
</ h3 >
</ div >
<? php endif ?>
<!-- information of the user logged in -->
<!-- welcome message for the logged in user -->
<? php if (isset($_SESSION['username'])) : ?>
< p >
Welcome
< strong >
<? php echo $_SESSION['username']; ?>
</ strong >
</ p >
< p >
< a href = "index.php?logout='1'" style = "color: red;" >
Click here to Logout
</ a >
</ p >
<? php endif ?>
</ div >
</ body >
</ html >

Объяснение:
Строка 01-19: имя пользователя, которое было сохранено в переменной сеанса, теперь отображается обратно пользователю. Эта переменная сеанса может быть уничтожена с помощью unset ($ _ SESSION [«products»]) или session_destroy () . Од