Предпросмотр материала:
Практическая работа 59-61
Регистрация и авторизация на PHP и MySQL
Цель работы:
ü научиться создавать скрипты для регистрации и авторизации средствами php и mysql
План:
ü Теоретические сведения
ü Ход работы
ü Контрольные вопросы
Теоретические сведения
Регистрация пользователя – это получения данных реального пользователя, обработка и хранение данных.
Если объяснять простыми словами то регистрация это всего лишь запись и хранение определенных данных, по которым мы можем авторизировать пользователя в нашем случае – это Логин и Пароль.
Авторизация – предоставление определённому лицу или группе лиц прав на выполнение определённых действий, а также процесс проверки данных прав при попытке выполнения этих действий. То есть с помощью авторизации мы можем разграничить доступ к тому или иному контенту на нашем сайте.
ВАЖНО! Для того, чтобы в Денвере работали сессии необходимо:
1 Если файл в кодировке utf - то он должен быть в utf без BOM
2 до старта сессии (или посыла заголовка) - ни какого вывода (echo(), print(), html) или пустых строк:
<?php
session_start();
Способ 1
Алгоритм работы
Во-первых, создайте базу данных и таблицу, которая будет содержать все регистрационные данные. Вы можете сделать это вручную с помощью графического интерфейса пользователя PhpMyAdmin или использовать для вставки этой информации SQL.
Взгляните на приведенный ниже код SQL:
/* Создание базы данных */
CREATE DATABASE userlistdb; /* Создание таблицы */
CREATETABLE`usertbl`(
`id`int(11)NOTNULLauto_increment,
`full_name`varchar(32)collateutf8_unicode_ciNOTNULLdefault'',
`email`varchar(32)collateutf8_unicode_ciNOTNULLdefault'',
`username`varchar(20)collateutf8_unicode_ciNOTNULLdefault'',
`password`varchar(32)collateutf8_unicode_ciNOTNULLdefault'',
PRIMARYKEY(`id`),
UNIQUEKEY`username`(`username`)
) ENGINE=MyISAMDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ci;
Обратите внимание, что все данные представляют собой varchar, и даже пароль позже будет преобразован в символ md5, чтобы обеспечить его безопасность.
Кроме того, используйте auto_increment для автоматического назначения идентификаторов или номеров пользователям, которые будут регистрироваться в системе.
Теперь, когда таблица создана, нужно задать разметку и стили CSS, а затем PHP-код.
Для разметки, нам нужно включить три файла, и все они должны быть сохранены в формате ".php", так как мы создаем программу сценариев на стороне сервера.
Сначала создайте файл login.php. Скопируйте в него приведенный ниже код:
<?php
session_start();
?>
<?php
require_once("includes/connection.php"); ?>
<?php
include("includes/header.php"); ?>
<?php
if(isset($_SESSION["session_username"])){
// echo "Сессии
устанавливается";
// тестирование
header("Location: intropage.php");
}
if(isset($_POST["login"])){
if(!empty($_POST['username'])
&& !empty($_POST['password'])) {
$username=$_POST['username'];
$password=$_POST['password'];
$query =mysql_query("SELECT
* FROM usertbl WHERE username='".$username."' AND
password='".$password."'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{
while($row=mysql_fetch_assoc($query))
{
$dbusername=$row['username'];
$dbpassword=$row['password'];
}
if($username == $dbusername
&& $password == $dbpassword)
{
$_SESSION['session_username']=$username;
/* Перенаправления браузера */
header("Location:
intropage.php");
}
} else {
$message
= "Неверный логин или пароль!";
}
} else
{
$message
= "Все поля являются обязательными!";
}
}
?>
<div class="container
mlogin">
<div
id="login">
<h1>ЛОГИН</h1>
<form name="loginform"
id="loginform" action="" method="POST">
<p>
<label
for="user_login">Логин<br />
<input
type="text" name="username" id="username"
class="input" value="" size="20"
/></label>
</p>
<p>
<label
for="user_pass">Пароль<br />
<input type="password"
name="password" id="password" class="input"
value="" size="20" /></label>
</p>
<p
class="submit">
<input
type="submit" name="login" class="button"
value="Логин" />
</p>
<p class="regtext">Уже
есть учетная запись? <a
rel="nofollow ugc" target="_blank" href="register.php" >Логин Здесь</a>!</p>
</form>
</div>
</div>
<?php
include("includes/footer.php"); ?>
<?php if
(!empty($message)) {echo "<p class=\"error\">" . "MESSAGE:
". $message
. "</p>";}
?>

Далее, создаем файл register.php. Скопируйте и вставьте в него приведенный ниже код:
<?php
require_once("includes/connection.php"); ?>
<?php
include("includes/header.php"); ?>
<?php
if(isset($_POST["register"])){
if(!empty($_POST['full_name'])
&& !empty($_POST['email']) && !empty($_POST['username'])
&& !empty($_POST['password'])) {
$full_name=$_POST['full_name'];
$email=$_POST['email'];
$username=$_POST['username'];
$password=$_POST['password'];
$query=mysql_query("SELECT
* FROM usertbl WHERE username='".$username."'");
$numrows=mysql_num_rows($query);
if($numrows==0)
{
$sql="INSERT INTO
usertbl
(full_name,
email, username,password)
VALUES('$full_name','$email',
'$username', '$password')";
$result=mysql_query($sql);
if($result){
$message
= "Учетная запись успешно создана";
} else
{
$message
= "Не удалось вставить данные!";
}
} else
{
$message
= "Это имя пользователя уже существует! Пожалуйста, попробуйте еще
раз!";
}
} else
{
$message
= "Все поля являются обязательными!";
}
}
?>
<?php if (!empty($message)) {echo
"<p class=\"error\">" . "MESSAGE: ".
$message . "</p>";} ?>
<div class="container
mregister">
<div id="login">
<h1>РЕГИСТРАЦИЯ</h1>
<form
name="registerform" id="registerform"
action="register.php" method="post">
<p>
<label
for="user_login">ФИО<br />
<input
type="text" name="full_name" id="full_name"
class="input" size="32" value=""
/></label>
</p>
<p>
<label
for="user_pass">Email<br />
<input
type="email" name="email" id="email"
class="input" value="" size="32"
/></label>
</p>
<p>
<label
for="user_pass">Логин<br />
<input
type="text" name="username" id="username"
class="input" value="" size="20"
/></label>
</p>
<p>
<label
for="user_pass">Пароль<br />
<input
type="password" name="password" id="password"
class="input" value="" size="32"
/></label>
</p>
<p class="submit">
<input
type="submit" name="register" id="register"
class="button" value="Регистрация" />
</p>
<p class="regtext">Уже
есть учетная запись? <a
rel="nofollow ugc" target="_blank" href="login.php" >Логин Здесь</a>!</p>
</form>
</div>
</div>
<?php
include("includes/footer.php"); ?>

Далее, создаем файл intropage.php. Он будет служить в качестве страницы приветствия после того, как пользователь успешно авторизовался в системе:
<div id="welcome">
<h2>Добропожаловать,<span>USER</span></h2>!
<p><a href="logout.php">Выйти</a>изсистемы</p>
</div>
Теперь, когда разметка готова, нужно добавить CSS-код. В основном, он будет содержать стили для класса страниц container, а также для кнопок и некоторых других элементов, таких как текстовые поля и лайки:
/*= ОБЩИЕ СТИЛИ
--------------------------------------------------------*/body{
background: #efefef;
font-family: 'Open Sans', sans-serif;
color: #777;
} a{
color: #f58220;
font-weight: 400;
} span{
font-weight: 300;
color: #f58220;
} .mlogin{
margin: 170px auto 0;
} .mregister{
margin: 80px auto 0;
} .error{
margin: 40px auto 0;
border: 1px solid #777;
padding: 3px;
color: #fff;
text-align: center;
width: 650px;
background: #f58220;
} .regtext{
font-size: 13px;
margin-top: 26px;
color: #777;
} /*= КОНТЕЙНЕРЫ --------------------------------------------------------*/.container{
padding: 25px 16px 25px 10px;
font-weight: 400;
overflow: hidden;
width: 350px;
height: auto;
background: #fff;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.13);
box-shadow: 0 1px 3px rgba(0,0,0,.13);
} #welcome{
width: 500px;
padding: 30px;
background: #fff;
margin: 160px auto 0;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.13);
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.13);
box-shadow: 0 1px 3px rgba(0,0,0,.13);
} .containerh1{
color: #777;
text-align: center;
font-weight: 300;
border: 1px dashed #777;
margin-top: 13px;
} .containerlabel{
color: #777;
font-size: 14px;
} #login{
width: 320px;
margin: auto;
padding-bottom: 15px;
} .containerform.input,.containerinput[type=text],.containerinput[type=password],.containerinput[type=e]{
background: #fbfbfb;
font-size: 24px;
line-height: 1;
width: 100%;
padding: 3px;
margin: 0 6px 5px 0;
outline: none;
border: 1px solid #d9d9d9;
} .containerform.input:focus{
border: 1px solid #f58220;
-webkit-box-shadow: 0 0 3px 0 rgba(245,130,32,0.75);
-moz-box-shadow: 0 0 3px 0 rgba(245,130,32,0.75);
box-shadow: 0 0 3px 0 rgba(245,130,32,0.75);
} /*= КНОПКИ --------------------------------------------------------*/ .button{border: solid 1px #da7c0c;
background: #f78d1d;
background: -webkit-gradient(linear, left top, leftbottom, from(#faa51a), to(#f47a20));
background: -moz-linear-gradient(top, #faa51a, #f47a20);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#faa51a', endColorstr='#f47a20');
color: #fff;
padding: 7px 12px;
-webkit-border-radius:4px;
moz-border-radius:4px;
border-radius:4px;
float: right;
cursor: pointer;
} .button:hover{background: #f47c20;
background: -webkit-gradient(linear, left top, leftbottom, from(#f88e11), to(#f06015));
background: -moz-linear-gradient(top, #f88e11, #f06015);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f88e11', endColorstr='#f06015');
} /*= ПОДВАЛ --------------------------------------------------------*/ footer {color: #777;
font-size: 12px;
text-align: center;
margin-top: 20px;
}
К этому времени, вы уже должны получить тот же результат, что и на изображении, приведенном в начале статьи.
Теперь, когда у вас готовы разметка и стили CSS, попробуйте задействовать такие многоразово используемые элементы, как раздел заголовка и раздел подвала. В корневой папке создайте новую папку и назовите ее “includes“.
В ней будут содержаться все включаемые файлы. Затем в папке includes создайте новый файл и назовите его header.php. Скопируйте часть раздела заголовка в каждый из трех PHP-файлов, созданных нами ранее. Таким образом, у вас получится:
<!DOCTYPE html> <html lang="en"><head>
<meta charset="utf-8"><title>КакспомощьюPHP и MySQL создать систему регистрации и авторизации пользователей</title>
<link href="css/style.css" media="screen" rel="stylesheet">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800'rel='stylesheet' type='text/css'>
</head> <body>Следующее, что вам нужно сделать, это удалить разметку, скопированную из файла header.php во всех трех PHP-файлах и заменить ее следующим PHP-кодом:
<?phpinclude("includes/header.php");?>
Теперь, сделайте то же самое с подвалом. Скопируйте приведенный ниже код и вставьте его в новый файл footer.php. Он будет включать в себя раздел подвала:
<footer>©2017Авторизация. Все права защищены.</footer>
</body> </html>Затем снова удалите эту часть во всех трех файлах PHP и замените ее следующим кодом:
<?phpinclude("includes/footer.php");?>
<h3>Шаг - 5 Подключение к базе данных</h3>
Теперь, когда вы включили файлы разделов заголовка и подвала, пора создать новый включаемый файл. Назовите его constants.php и скопируйте в него следующий код:
<?php // Константы базы данныхdefine("DB_SERVER","localhost");
define("DB_USER","root");
define("DB_PASS","");
define("DB_NAME","userlistdb");
?>В приведенном выше коде, мы создали константы информации базы данных. Теперь мы можем легко изменять информацию всякий раз, когда это необходимо.
Далее, в папке includes создайте новый файл и назовите ее connection.php. В нем будут храниться коды подключения к базе данных. Скопируйте и вставьте в него код, приведенный ниже:
<?phprequire("constants.php");
$con= mysql_connect(DB_SERVER,DB_USER, DB_PASS)ordie(mysql_error());
mysql_select_db(DB_NAME)ordie("Cannot select DB");
?>Обратите внимание, что вам обязательно требуется файл constants.php. Если при подключении возникнет ошибка, с его помощью будет остановлено выполнение скрипта и выдано сообщение об ошибке.
Включите файл connection.php в файлах login.php и register.php, так как эти два файла необходимы для кода управления подключением. Скопируйте приведенный ниже код и вставьте его перед включением файла header.php:
<?phprequire_once("includes/connection.php");?>
Теперь необходимо преобразовать форму регистрации в полноценную систему регистрации. Чтобы сделать это, нужно добавить включение еще нескольких файлов PHP после включения header.php. Скопируйте и вставьте приведенный ниже код в файл register.php:
<?php if(isset($_POST["register"])){
if(!empty($_POST['full_name']) && !empty($_POST['email']) && !empty($_POST['username']) && !empty($_POST['password'])) {
$full_name= htmlspecialchars($_POST['full_name']);
=htmlspecialchars($_POST['email']);
$username=htmlspecialchars($_POST['username']);
$password=htmlspecialchars($_POST['password']);
$query=mysql_query("SELECT * FROM usertbl WHEREusername='".$username."'");
$numrows=mysql_num_rows($query);
if($numrows==0)
{$sql="INSERT INTO usertbl
(full_name, email, username,password) VALUES('$full_name','$email', '$username', '$password')";$result=mysql_query($sql);
if($result){
$message="Account Successfully Created";
}else{
$message="Failed to insert data information!";
}}else{
$message="That username already exists! Please try another one!";
}}else{
$message="All fields are required!";
} } ?> <?phpif(!empty($message)) {echo"<p class=\"error\">"."MESSAGE: ".$message."</p>";}?>
В приведенном выше коде, обратите внимание, что перед добавлением данных в базу производится их валидация. Переменная message используется для хранения сообщения об ошибках или об успешном выполнении действия.
Теперь, когда пользователи могут регистрироваться на сайте, необходимо создать систему авторизации. С помощью этого очень простого PHP-кода, вы можете включить систему авторизации. Скопируйте код и вставьте его перед разметкой в файл login.php:
<?php session_start(); ?> <?phprequire_once("includes/connection.php");?>
<?phpinclude("includes/header.php");?>
<?php if(isset($_SESSION["session_username"])){
// вывод "Session is set"; // в целях проверкиheader("Location: intropage.php");
} if(isset($_POST["login"])){
if(!empty($_POST['username']) && !empty($_POST['password'])) {
$username=htmlspecialchars($_POST['username']);
$password=htmlspecialchars($_POST['password']);
$query=mysql_query("SELECT * FROM usertbl WHEREusername='".$username."' AND password='".$password."'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{while($row=mysql_fetch_assoc($query))
{$dbusername=$row['username'];
$dbpassword=$row['password'];
}if($username==$dbusername&&$password==$dbpassword)
{
// старое место расположения // session_start();$_SESSION['session_username']=$username;
/* Перенаправление браузера */header("Location: intropage.php");
}}else{
// $message = "Invalid username or password!"; echo"Invalid username or password!";
}}else{
$message="All fields are required!";
}
} ?>В приведенном выше коде, перед перенаправлением пользователя на страницу intropage.php, которую мы добавим чуть позже, вы в первую очередь должны проверить, была ли установлена сессия.
В противном случае, если сессия не была установлена, пользователю с помощью переменной message будет выдаваться сообщение об ошибке или он будет перенаправляться на страницу login.php.
Мы установили все, что нужно для файлов register.php и login.php. Теперь вы просто должны обеспечить, чтобы пользователь оставался в системе при перенаправлении на страницу intropage.php. Скопируйте и вставьте приведенный ниже код в файл intropage.php:
<?php session_start(); if(!isset($_SESSION["session_username"])):header("location:login.php");else:?> <?php include("includes/header.php"); ?><div id="welcome">
<h2>Добропожаловать,<span><?php echo $_SESSION['session_username'];?>!</span></h2>
<p><a href="logout.php">Выйти</a>изсистемы</p>
</div>
<?php include("includes/footer.php"); ?> <?php endif; ?>Обратите внимание, что оператор if был создан для проверки, установлена ли сессия, и в зависимости от этого должен ли пользователь перенаправляться на страницу login.php или остаться на странице intropage.php.
Наконец, чтобы пользователь мог выйти из системы, нужно удалить сессию с помощью session_destroy.
Скопируйте данный код в файл logout.php:
<?php session_start();unset($_SESSION['session_username']);
session_destroy();header("location:login.php");
?>Способ 2 Регистрация и авторизация на сайте
В большинстве случаев формы авторизации состоят из двух полей — логин и пароль, а так же кнопки для входа. Первым делом напишем на HTML простую форму состоящую из двух полей, одно текстовое, второе для паролей и снизу разместим кнопку авторизации.
<form action="index.php" method="post">
<input type="text" name="login">
<input type="password" name="password">
<input type="submit" name="submit">
</form>
![]()
Создаем файл index.php и открываем его в текстовом редакторе, для этих целей используют Notepad++, в нем есть разметка различных языков программирования и нумерация строк. В вставляем наш HTML код в созданный файл, это тело нашей формы авторизации:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Авторизация на сайте</title>
</head>
<body>
<div align="center"><h2>Авторизация на сайте:</h2>
<form action="index.php" method="post">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="submit">
</form></div>
</body>
</html>
Важная тонкость — Ваш index.php файл должен быть создан в UTF-8 кодировке, в противном случае Вы получите следующий результат:

Сохранить *.php файл в кодировке UTF-8 весьма не сложно, просто откройте файл в редакторе Notepad++, выберите в верхнем меню раздел «Кодировки» и саму кодировку — «Кодировка UTF-8», сохраните файл.
Теперь зальем наш файл index.php на вебсервер и зайдем на него, увидим форму авторизации:

Следующим шагом будет создание нужных таблиц в базе данных MySQL. Воспользуемся обычным скриптом phpMyAdmin для добавления нужной для работы авторизации таблицы. Заходим в раздел базы данных, создаем базу «my-site», не забываем про кодировку UTF-8 если нужно, так как наши файлы и код именно в этой кодировки. В phpMyAdmin кодировку можно изменить в разделе «Операции» вашей базы данных MySql:
Выполняем SQL запрос к базе данных, созданной ранее. В phpMyAdmin это делается в разделе SQL:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(20) NOT NULL,
`password` varchar(35) NOT NULL,
PRIMARY KEY (`id`)
);

В данном SQL запросе мы создаем таблицу «users» из трех полей. Первое поле «id» — присваивает уникальный идентификационный номер каждому пользователю. Для этого ему присвоено значение «AUTO_INCREMENT», оно автоматически наращивает на 1 значение «id» каждого нового пользователя, для того что бы его можно было присвоить полю «id» мы выставляем на это поле первичный ключ «PRIMARY KEY». Второе значение поля «login», тут мы будем хранить логины пользователей. Третье значение таблицы — это «password» тут соответственно будут храниться пароли юзеров.
Теперь у нас есть база данных для логинов и паролей, нужно создать страницу для регистрации новых пользователей. Теперь текстовое поле — «login2», поле для паролей — «password2», а кнопка отправки — «submit2», в action прописываем наш reg.php файл, что бы не запутаться:

Обычно полей у формы регистрации пользователей на сайте гораздо больше, но главное понять сам принцип, то в дальнейшем сможете отредактировать форму под свои нужды без труда. Создаем файл reg.php в кодировки UTF-8 и помещаем туда HTML код нашей формы:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Регистрация на сайте</title>
</head>
<body>
<div align="center"><h2>Регистрация на сайте:</h2>
<form action="reg.php" method="post">
Логин: <input type="text" name="login2"><br><br>
Пароль: <input type="password" name="password2"><br><br>
<input type="submit" name="submit2">
</form></div>
</body>
</html>
Теперь мы можем начать писать php скрипт для регистрации пользователей на сайте. Первым делом добавляем в reg.php строку соединения с базой данных ниже формы для регистрации:
|
1 |
<?php $connection = mysqli_connect('host_db', 'user_db', 'password_db', 'name_db') or die(mysqli_error()); ?> |
Host_db — Хост базы данных, обычно это localhost
User_db — Имя пользователя базы данных
Password_db — Пароль от базы данных
Name_db — Имя базы данных
Не забудьте прописать эти значения иначе соединение с БД MySql не будет установлено. Вот так выглядит строка соединения c MySql:
<?php $connection = mysqli_connect('localhost', 'root', '', 'my-site') or die(mysqli_error()); ?>
Теперь начинаем обработку данных при нажатии на кнопку «Отправить» в регистрационной форме. Вставляем следующий код ниже и рассмотрим его поподробнее:
<?php if (isset($_POST['submit2'])) // Отлавливаем нажатие на кнопку отправить
{
if (empty($_POST['login2'])) // Условие - если поле логин пустое
{
echo "<script>alert('Поле логин не заполненно');</script>"; // Выводим сообщение об ошибке
}
elseif (empty($_POST['password2'])) // Иначе если поле с паролем пустое
{
echo "<script>alert('Поле логин не заполненно');</script>"; // Выводим сообщение об ошибке
}
else // Иначе если поля не пустые
{
$login2 = $_POST['login2']; // Присваиваем переменной значение из поля с логином
$password2 = $_POST['password2']; // Присваиваем другой переменной значение из поля с паролем
$query = "INSERT INTO `users` (login, password) VALUES ('$login2', '$password2')"; // Создаем переменную с запросом к базе данных на отправку нового юзера
$result = mysqli_query($connection, $query) or die(mysql_error()); // Отправляем переменную с запросом в базу данных
echo "<div align='center'>Регистрация прошла успешно!</div>"; // Сообщаем что все получилось
}
} ?>
Прочитав комментарии в коде, станет понятна его структура и какие операции за что отвечают. Закидываем наш файл reg.php на сервер и пробуем зарегистрироваться. Если все сделано правильно то вы должны увидеть нечто подобное:

Все с регистрацией закончили, возвращаемся к нашему файлу с авторизацией пользователя — index.php
В самом верху файла перед формой авторизации вставляем следующий PHP код:
<?php
session_start();
?>
Этой функцией мы запускаем сессию в которой будем хранить информацию авторизированого пользователя. Это необходимо для получения этой информации в любой момент, за счет чего можно к примеру реализовать ее вывод или проверку например прав доступа к различным разделам сайта.
Далее ниже формы авторизации вставляем код соединения с базой данных MySql. Такой же как в файле reg.php:
<?php $connection = mysqli_connect('host_db', 'user_db', 'password_db', 'name_db') or die(mysqli_error()); ?>
Теперь обрабатываем нажатие кнопки «Отправить» в нашей форме авторизации, все с подробными комментариями:
<?php if (isset($_POST['submit'])) // Отлавливаем нажатие кнопки "Отправить"
{
if (empty($_POST['login'])) // Если поле логин пустое
{
echo '<script>alert("Поле логин не заполненно");</script>'; // То выводим сообщение об ошибке
}
elseif (empty($_POST['password'])) // Если поле пароль пустое
{
echo '<script>alert("Поле пароль не заполненно");</script>'; // То выводим сообщение об ошибке
}
else // Иначе если все поля заполненны
{
$login = $_POST['login']; // Записываем логин в переменную
$password = $_POST['password']; // Записываем пароль в переменную
$query = mysqli_query($connection, "SELECT `id` FROM `users` WHERE `login` = '$login' AND `password` = '$password'"); // Формируем переменную с запросом к базе данных с проверкой пользователя
$result = mysqli_fetch_array($query); // Формируем переменную с исполнением запроса к БД
if (empty($result['id'])) // Если запрос к бд не возвразяет id пользователя
{
echo '<script>alert("Неверные Логин или Пароль");</script>'; // Значит такой пользователь не существует или не верен пароль
}
else // Если возвращяем id пользователя, выполняем вход под ним
{
$_SESSION['password'] = $password; // Заносим в сессию пароль
$_SESSION['login'] = $login; // Заносим в сессию логин
$_SESSION['id'] = $result['id']; // Заносим в сессию id
echo '<div align="center">Вы успешно вощли в систему: '.$_SESSION['login'].'</div>'; // Выводим сообщение что пользователь авторизирован
}
}
} ?>
Готово. Теперь мы можем опробовать нашу форму авторизации, введем зарегистрированные заранее логин и пароль пользователя в нашей форме регистрации и должен получиться результат, как на картинке ниже:

Ну вот мы практически и подошли к концу статьи. Осталось дело за малым, нужно создать разделы для авторизированых и не авторизированых пользователей. Начнем с авторизированого пользователя, добавим ему кнопку выхода. Для этого добавим в файл index.php небольшую функцию очистки сессии.
<?php if (isset($_GET['exit'])) { // если вызвали переменную "exit"
unset($_SESSION['password']); // Чистим сессию пароля
unset($_SESSION['login']); // Чистим сессию логина
unset($_SESSION['id']); // Чистим сессию id
} ?>
Теперь создаем блок с выводимой только для авторизированых пользователей информацией и размещаем там нашу кнопку выхода.
<?php if (isset($_SESSION['login']) && isset($_SESSION['id'])) // если в сессии загружены логин и id
{
echo '<div align="center"><a rel="nofollow ugc" target="_blank" href="index.php?exit">Выход</a></div>'; // Выводим нашу ссылку выхода
} ?>

И для не зарегестрированых юзеров создаем блок, который будет показан только им. В этом блоке покажем к примеру ссылку на регистрацию нового пользователя.
<?php if (!isset($_SESSION['login']) || !isset($_SESSION['id'])) // если в сессии не загружены логин и id
{
echo '<div align="center"><a rel="nofollow ugc" target="_blank" href="reg.php">Регистрация</a></div>'; // Выводим нашу ссылку регистрации
} ?>

Способ 3 Создание формы регистрации средствами PHP и MySQL
1 Создаем форму
Для начала создаем форму с полями для ввода имени, пароля, повторного ввода пароля и электронного адреса.

Код:
<table>
<form
action="reg.php" method="POST">
<tr>
<td>Имя</td>
<td><input type="text" name="login"
></td>
</tr>
<tr>
<td>Пароль</td>
<td><input type="password" name="password"
></td>
</tr>
<tr>
<td>Повторите пароль</td>
<td><input type="password"
name="password2"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td colspan="2"><input type="submit"
value="OK" name="submit" ></td>
</tr>
</form>
</table>
2 Создаем таблицу в базе данных
SQL-скрипт:
CREATE TABLE `users` (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT ,
`login` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
3
Пишем скрипт подключения к базе данных
Создаем файл connect.php.
и в нем пишем следущий код.
Код
<?php
$dblocation = "localhost";
$dbname = "database_name";
$dbuser = "root";
$dbpasswd = "";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P> Не удалось подключиться к базе данных. </P>"
);
exit();
}
if (!@mysql_select_db($dbname, $dbcnx))
{
echo( "<P> Не удалось найти базу данных. .</P>" );
exit();
}
?>
4
Скрипт
регистрации
Создаем файл reg.php:
Код
<?
include_once("connect.php");
if (isset($_POST['submit']))
{
if(empty($_POST['login']))
{
echo 'Введите имя';
}
elseif(empty($_POST['password']))
{
echo 'Введите пароль';
}
elseif(empty($_POST['password2']))
{
echo 'Подтвердите пароль';
}
elseif($_POST['password'] != $_POST['password2'])
{
echo 'Пароль подтвержден';
}
elseif(empty($_POST['email']))
{
echo 'Введите свой E-mail';
}
else
{
$login = $_POST['login'];
$password = $_POST['password'];
$password2 = $_POST['password2'];
$email = $_POST['email'];
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) > 0)
{
echo 'Ошибка регистрации';
}
else
{
$query = "INSERT INTO users(login , password , email )
VALUES ('$login', '$password', '$email')";
$result = mysql_query($query) or die(mysql_error());;
echo 'Регистрация прошла успешно!';
}
}
}
?>
Проверка доступности имени пользователя на PHP и Ajax.
Данный функционал необходим при создании сайтов с большим количеством пользователей. При вводе желаемого имени пользователя рядом с полем ввода появляется красивая надпись, которая свидетельствует о доступности или недоступности данного имени.
Для начала нам необходимо создать страничку, где будет находиться форма.
Между тегами <body></body> необходимо поместить следующий код:
<script src="jquery.js" type="text/javascript" language="javascript"></script>
<script language="javascript">
$(document).ready(function()
{
$("#username").blur(function()
{
$("#msgbox").removeClass().addClass('messagebox').text('Проверка...').fadeIn("slow");
//Проверить существует ли имя
$.post("user_availability.php",{ user_name:$(this).val() } ,function(data)
{
if(data=='no') //если имя не доступно
{
$("#msgbox").fadeTo(200,0.1,function() //начнет появляться сообщение
{
$(this).html('Это имя уже занято').addClass('messageboxerror').fadeTo(900,1);
});
}
else
{
$("#msgbox").fadeTo(200,0.1,function()
{
//тут прописывается сообщение о доступности имени
$(this).html('Имя доступно для регистрации').addClass('messageboxok').fadeTo(900,1);
});
}
});
});
});
</script>
В данном коде мы подключили фреймворк jQuery и прописали тексты и эффекты для сообщений о доступности\недоступности имен.
Далее нам необходимо создать форму
<div >
User Name : <input name="username" type="text" id="username" value="" maxlength="15" />
<span id="msgbox" style="display:none"></span>
</div>
Ниже представлены стили оформления, которые были использованы в примере. Их можно использовать как в том же документе, так и вынести в отдельный файл.
.messagebox{
position:absolute;
width:100px;
margin-left:30px;
border:1px solid #c93;
background:#ffc;
padding:3px;
}
.messageboxok{
position:absolute;
width:auto;
margin-left:30px;
border:1px solid #349534;
background:#C9FFCA;
padding:3px;
font-weight:bold;
color:#008000;
}
.messageboxerror{
position:absolute;
width:auto;
margin-left:30px;
border:1px solid #CC0000;
background:#F7CBCA;
padding:3px;
font-weight:bold;
color:#CC0000;
}
<?php
//это переменная содержит имена существующих пользователей
$existing_users=array('roshan','mike','jason');
$user_name=$_POST['user_name'];
//проверка существует ли пользователь в массиве $existing_users
if (in_array($user_name, $existing_users))
{
//юзер недоступен
echo "no";
}
else
{
//доступен
echo "yes";
}
?>
Как Вы видите в нашем примере все существующие имена пользователя находятся в массиве. Скрипт проверяет его и выдает результат. Если модифицировать данный скрипт, то можно выполнять проверку из любой базы данных.
Ход работы
Задание:
· Создайте форму регистрации и авторизации средствами php и mysql (разными способами).
· Откорректируйте данный скрипт, добавив поля пол, сотовый телефон, о себе. Вся информация должна храниться в БД. При сохранении данные должны пройти процедуру проверки (уникальность логина, пароль должен содержать как буквы, так и цифры и быть не менее 5 символов, правильность написания адреса электронной почты).
Дополнительное задание: изучить самостоятельно видеоурок «Простая авторизация» и создать данную форму авторизации.
Профессия: Специалист по транспортному обслуживанию
Профессия: Учитель информатики в начальной школе
Профессия: Системный аналитик
Профессия: Учитель информатики
Профессия: Преподаватель информационных систем и технологий
В каталоге 7 333 курса по разным направлениям