Простая форма регистрации и авторизации на php

Сегодня мы рассмотрим создание простой формы регистрации и авторизации. Мы затронем тему самого функционала, за который отвечает php, html, который отвечает за внешний вид и конечно же mysql, который отвечает за хранение информации. Вообще я рекомендую пользоваться специальными классами для работы с базой данных, они намного удобнее и безопаснее.
Для начала нам необходимо создать таблицу в базе данных, в нашем примере это будет users и добавим 3 таблицы под названиями user_id, login и password. Вы можете создать любые нужные вам таблицы по тому же принципу.
Далее создадим 4 файла: index.php; login.php; header.php и register.php. Наш index.php будет выглядит следующим образом:

<?php
include "header.php";
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Web Фишки - Главная страница</title>
</head>
<body>
<?php /* Проверяем, авторизован ли пользователь */ if ($_SESSION['login'] != "" && $_SESSION['user_id'] != "") {echo "Добро пожаловать ".$_SESSION['login'];} ?>
</body>
</html>

Далее откроем файл header.php и добавим туда следующий код:

<?php
// Запуск сессии
session_start();
// Кодировка страницы
header('Content-Type: text/html; charset=utf-8');
// Устанавливаем соединение с базой данных
$database = mysql_connect ("хост_БД", "имя_пользователя_БД", "пароль_к_БД");
mysql_select_db ("имя_БД", $database);
?>

Мы будем подключать данный файл ко всем остальным файлам, чтобы каждый раз не писать одну и ту же функцию для каждой страницы отдельно.
Далее откроем файл register.php и добавим в него следующее:

<?php
include "header.php";
if ($_SESSION['login'] != "" && $_SESSION['user_id'] != "") {
// Если пользователь авторизован, то перенаправляем на главную страницу
header('Location: index.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Web Фишки - Регистрация</title>
</head>
<body>
<form action="register.php" method="post">
<p>
<label>Логин:<br></label>
   <input name="login" type="text" size="15" maxlength="15">
</p>
<p>
<label>Пароль:<br></label>
   <input name="password" type="password" size="15" maxlength="15">
</p>
<p>
   <input type="submit" name="submit" value="Регистрация">
</p>
</form>
</body>
</html>
<?php
// Проверяем, заполнил ли пользователь все необходимые поля
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { $login == '';} }
if (isset($_POST['password'])) { $password = $_POST['password']; if ($password == '') { $password == '';} }
if ($login == '') {
exit ("Пожалуйста, заполните поле Логин");
} elseif ($password == '') {
exit ("Пожалуйста, заполните поле Пароль");
} else {
// Избавляемся от ненужных символов
$login = htmlspecialchars(stripslashes($login));
$password = htmlspecialchars(stripslashes($password));
// Можем так же ограничить количество вводимых символов в форме, аналогично можно сделать с паролем
if ((utf8_strlen($login) < 3) || (utf8_strlen($login) > 25)) {
  exit ("Логин должен состоять минимум из 3 и максимум из 25 символов.");
}
// Проверим, существует ли пользователь в базе с таким же логином
$result = mysql_query("SELECT user_id FROM users WHERE login='$login'", $database);
$check = mysql_fetch_array($result);
if ($check['user_id'] != "") {
exit ("Введённый вами логин уже существует. Пожалуйста, придумайте другой.");
} else {
// Зашифруем пароль в MD5 для надёжности
$password = md5($password);
// Запишем информацию о новом пользователе в базу данных
$final = mysql_query ("INSERT INTO users (login, password) VALUES('$login', '$password')");
// Проверим на наличие ошибок
if ($final == 'TRUE') {
  echo "Вы успешно зарегистрировались. Чтобы авторизоваться, перейдите на страницу <a href="login.php">авторизации</a>";
} else {
  echo "Ошибка! Вы не зарегистрированы.";
}
}
}
?>

Здесь мы закончили. Нам осталось написать страницу авторизации и для этого откроем файл login.php и добавим в него следующее:

<!DOCTYPE html>
<html lang="ru">
<head>
<title>Web Фишки - Авторизация</title>
</head>
<body>
<form action="login.php" method="post">
<p>
  <label>Логин:<br></label>
  <input name="login" type="text" size="15" maxlength="15">
</p>
<p>
  <label>Пароль:<br></label>
  <input name="password" type="password" size="15" maxlength="15">
</p>
<p>
  <input type="submit" name="submit" value="Войти">
</p>
<br>
<p>Если у вас нет учетной записи, вы можете <a href="register.php">зарегистрироваться</a></p>
</form>
</body>
</html>
<?php
include "header.php";
// Проверяем, авторизован ли пользователь, и если да = перенаправляем на главную страницу
if ($_SESSION['login'] != "" && $_SESSION['user_id'] != "") {
// Если пользователь авторизован, то перенаправляем на главную страницу
header('Location: index.php');
exit;
} else {
// Проверяем введённые данные аналогично register.php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { $login == '';} }
if (isset($_POST['password'])) { $password = $_POST['password']; if ($password == '') { $password == '';} }
if ($login == '') {
exit ("Пожалуйста, заполните поле Логин");
} elseif ($password == '') {
exit ("Пожалуйста, заполните поле Пароль");
} else {
// Избавляемся от ненужных символов
$login = htmlspecialchars($login);
$password = htmlspecialchars($password);
// Зашифруем пароль в MD5 для сравнения с паролем из базы, т.к при регистрации мы сохранили пароль с хэшем
$password = md5($password);
// Проверяем на существование пользователя в базе
$result = mysql_query("SELECT * FROM users WHERE login='$login'", $database);
$check = mysql_fetch_array($result);
if ($check['login'] != $login || $check['password'] != $password) {
exit ("Введённые вами логин или пароль неверные.");
} else {
if ($check['login'] == $login || $check['password'] == $password) {
// При удачной авторизации записываем информацию в сессии
  $_SESSION['login'] = $check['login']; 
  $_SESSION['user_id'] = $check['user_id'];
echo "Вы успешно авторизовались на сайте! <a href="index.php">На главную</a>";
}
}
}
}
?>

Для большей безопасности рекомендую внедрить в эти формы капчу. Вот и всё.

Комменарии

Написать комментарий

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Защита от роботов