Как сделать регистрацию php mysql. Создание простой системы регистрации пользователей на PHP и MySQL

Если вам необходимо сделать один из разделов своего сайта доступным ограниченному, но неопределенному кругу лиц, проще всего это сделать с помощью регистрации и авторизации пользователей. Есть множество способов авторизации пользователей. Можно использовать как инструменты веб-сервера, так и инструменты языка программирования. Мы поговорим о случае, когда используются сессии PHP .

Вероятно, вы хотели бы увидеть более современный способ создания такой формы. Полное его современное и актуальное представление у меня пока что еще в планах, но зато вы можете увидеть, что форму обратной связи можно построить с помощью объектно-ориентированных приемов в PHP.

Для начала давайте оговорим все шаги, которые сделаем далее. Что нам вообще нужно? Нам нужен сценарий, который будет регистрировать пользователя, авторизовать пользователя, переадресовывать пользователя куда-либо после авторизации. Также нам нужно будет создать страницу, которая будет защищена от доступа неавторизованных пользователей. Для регистрации и авторизации нам необходимо будет создать HTML -формы. Информацию о зарегистрированных пользователях мы будем хранить в базе данных. Это значит, что нам еще нужен скрипт подключения к СУБД . Всю работу у нас будут выполнять функции, которые мы сами напишем. Эти функции мы сохраним в отдельный файл.

Итак, нам нужны следующие файлы:

  • соединение с СУБД;
  • пользовательские функции;
  • авторизация;
  • регистрация;
  • защищенная страница;
  • сценарий завершения работы пользователя;
  • сценарий, проверяющий статус авторизации пользователя;
  • таблица стилей для простейшего оформления наших страниц.

Всё это будет бессмысленно, если у вас нет соответствующей таблицы в базе данных. Запустите инструмент управления своим СУБД (PhpMyAdmin или командную строку, как удобнее) и выполните в нем следующий запрос:

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Наши файлы со сценариями я назову так (все они будут лежать в одном каталоге):

  • database.php;
  • functions.php;
  • login.php;
  • registration.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • style.css.

Назначение каждого из них, я уверен, вам понятно. Начнем со скрипта соединения с СУБД. Вы его уже видели . Просто сохраните код этого скрипта в файле с именем database.php . Пользовательские функции мы будем объявлять в файле functions.php . Как это всё будет работать? Неавторизованный пользователь пытается получить доступ к защищенному документу index.php , система проверяет авторизован ли пользователь, если пользователь не авторизован, он переадресовывается на страницу авторизации. На странице авторизации пользователь должен видеть форму авторизации. Давайте сделаем её.

Авторизация пользователей

зарегистрируйтесь.

Теперь нашей форме нужно придать некий вид. Заодно определим правила для других элементов. Я, забегая вперед, приведу содержимое таблицы стилей полностью.

/* файл style.css */ .row { margin-bottom:10px; width:220px; } .row label { display:block; font-weight:bold; } .row input.text { font-size:1.2em; padding:2px 5px; } .to_reg { font-size:0.9em; } .instruction { font-size:0.8em; color:#aaaaaa; margin-left:2px; cursor:default; } .error { color:red; margin-left:3px; }

Если всё сделано верно, у вас в броузере должно быть следующее:

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

Регистрация пользователей

" />

Вы, наверное, обратили внимание на то, что в HTML -коде присутствуют переменные PHP . Они являются содержимым атрибутов текстовых полей форм, содержимом контейнеров, предназначенных для вывода ошибок. Но мы не инициализировали эти переменные. Давайте сделаем это.

Регистрация пользователей

" />
В имени пользователя могут быть только символы латинского алфавита, цифры, символы "_", "-", ".". Длина имени пользователя должна быть не короче 4 символов и не длиннее 16 символов
В пароле вы можете использовать только символы латинского алфавита, цифры, символы "_", "!", "(", ")". Пароль должен быть не короче 6 символов и не длиннее 16 символов
Повторите введенный ранее пароль

В атрибуте action тега form не указан параметр. В этом случае при отправке данных формы обрабатываться они будут в том же сценарии, из которого они и отправлялись. Значит нам нужно написать код, обрабатывающий данные формы. Но давайте сначала оговорим алгоритм их обработки.

Нам нужно, чтобы поля логина и пароля не были пустыми. Затем необходимо проверить логин на соответствие требованиям. Пароль также должен соответствовать описанным требованиям, а повторно указанный пароль должен с ним совпадать и, кроме того, они должны быть идентичны. Если какое-то из этих условий не выполняется, обработка данных формы должна быть прекращена, в массив сообщений об ошибке должно быть записано соответствующее оповещение, и оно должно быть отображено пользвателю. Для удобства пользователя мы сохраним введенный им логин (если он его указал), записав его значение в массив $fields .

Если всё нормально, в окне вашего броузера, обратившись к документу registration.php, вы должны увидеть примерно такую форму:

Теперь, допустим, пользователь нажал на кнопку регистрации, не заполнил поля формы. Согласно нашему алгоритму, логин и пароль не могут быть пустыми. Если это условие не выполняется, регистрация невозможно. Мы помним о том, что обработка данных формы происходит в текущем сценарии. Значит нам нужно изменить его код, добавив соответствующие проверки. Сразу же оговорим и следующие проверки. Если введены и логин, и пароль, нужно проверить их соответствие указанным требованиям. Для проверки логина и пароля мы создадим пользовательские функции в файле functions.php.

/** * functions.php * Файл с пользовательскими функциями */ // Подключаем файл с параметрами подключения к СУБД require_once("database.php"); // Проверка имени пользователя function checkLogin($str) { // Инициализируем переменную с возможным сообщением об ошибке $error = ""; // Если отсутствует строка с логином, возвращаем сообщение об ошибке if(!$str) { $error = "Вы не ввели имя пользователя"; return $error; } /** * Проверяем имя пользователя с помощью регулярных выражений * Логин должен быть не короче 4, не длиннее 16 символов * В нем должны быть символы латинского алфавита, цифры, * в нем могут быть символы "_", "-", "." */ $pattern = "/^[-_.a-z\d]{4,16}$/i"; $result = preg_match($pattern, $str); // Если проверка не прошла, возвращаем сообщение об ошибке if(!$result) { $error = "Недопустимые символы в имени пользователя или имя пользователя слишком короткое (длинное)"; return $error; } // Если же всё нормально, вернем значение true return true; } // Проверка пароля пользователя function checkPassword($str) { // Инициализируем переменную с возможным сообщением об ошибке $error = ""; // Если отсутствует строка с логином, возвращаем сообщение об ошибке if(!$str) { $error = "Вы не ввели пароль"; return $error; } /** * Проверяем пароль пользователя с помощью регулярных выражений * Пароль должен быть не короче 6, не длиннее 16 символов * В нем должны быть символы латинского алфавита, цифры, * в нем могут быть символы "_", "!", "(", ")" */ $pattern = "/^[_!)(.a-z\d]{6,16}$/i"; $result = preg_match($pattern, $str); // Если проверка не прошла, возвращаем сообщение об ошибке if(!$result) { $error = "Недопустимые символы в пароле пользователя или пароль слишком короткий (длинный)"; return $error; } // Если же всё нормально, вернем значение true return true; }

Теперь нам нужно изменить файл registration.php, чтобы задействовать объявленные нами функции. В сценарий мы добавим условие, проверяющее нажатие кнопки регистрации. Внутри этого условия запускается проверка логина и паролей. В случае, если какая-то из проверок завершается неудачей, мы вновь отображаем форму, и выводим сообщение об ошибке. Если ошибок нет, мы регистрируем пользователя, форму регистрации при этом уже не отображаем, сообщаем пользователю об успешной регистрации, и с помощью функции header() переадресовываем его к форме авторизации.

Вы успешно зарегистрировались в системе. Сейчас вы будете переадресованы к странице авторизации. Если это не произошло, перейдите на неё по прямой ссылке.

"; header("Refresh: 5; URL = login.php"); } // Иначе сообщаем пользователю об ошибке else { $errors["full_error"] = $reg; } } } ?> Регистрация пользователей
" />
В имени пользователя могут быть только символы латинского алфавита, цифры, символы "_", "-", ".". Длина имени пользователя должна быть не короче 4 символов и не длиннее 16 символов
В пароле вы можете использовать только символы латинского алфавита, цифры, символы "_", "!", "(", ")". Пароль должен быть не короче 6 символов и не длиннее 16 символов
Повторите введенный ранее пароль

В скрипте вы должны были заметить еще одну новую функцию — registration() . А мы её еще не объявляли. Давайте сделаем это.

// Функция регистрации пользователя function registration($login, $password) { // Инициализируем переменную с возможным сообщением об ошибке $error = ""; // Если отсутствует строка с логином, возвращаем сообщение об ошибке if(!$login) { $error = "Не указан логин"; return $error; } elseif(!$password) { $error = "Не указан пароль"; return $error; } // Проверяем не зарегистрирован ли уже пользователь // Подключаемся к СУБД connect(); // Пишем строку запроса $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Делаем запрос к базе $query = mysql_query($sql) or die(""); // Смотрим на количество пользователей с таким логином, если есть хоть один, // возвращаем сообщение об ошибке if(mysql_num_rows($query) > 0) { $error = "Пользователь с указанным логином уже зарегистрирован"; return $error; } // Если такого пользователя нет, регистрируем его // Пишем строку запроса $sql = "INSERT INTO `users` (`id`,`login`,`password`) VALUES (NULL, "" . $login . "","" . $password . "")"; // Делаем запрос к базе $query = mysql_query($sql) or die("

Невозможно добавить пользователя: " . mysql_error() . ". Ошибка произошла в строке " . __LINE__ . "

"); // Не забываем отключиться от СУБД mysql_close(); // Возвращаем значение true, сообщающее об успешной регистрации пользователя return true; }

Если всё нормально, ваш пользователь будет зарегистрирован. Можете потестировать форму. Попробуйте зарегистрировать пользователей с одинаковыми логинами. После успешной регистрации пользователь будет перееадресован к форме авторизации. Ранее мы просто создали разметку для отображения этой формы. Так как в её атрибуте action не указан никакой параметр, данные, отправленные формой, будут обрабатываться в этом же сценарии. Значит нам нужно написать код для обработки, и добавить его в документ login.php.

Авторизация пользователей

;">

Если вы не зарегистрированы в системе, зарегистрируйтесь.

Вы, наверное, заметили, что в скрипте авторизации у нас появилась ещё одна незнакомая функция — authorization() . Эта функция должна авторизовать пользователя, предварительно проверив, существует ли в базе данных зарегистрированный пользователь с таким логином и паролем. Если такой пользователь не будет найден, авторизация будет прервана, на экран будет выведено сообщение о неудаче. При успешной проверки функция authorization() запустит сессию, и запишет в неё значения логина и пароля пользователя, сообщит сценарию об успешности авторизации, и сценарий перенаправит пользователя на защищенную страницу ресурса.

/** * Функция авторизации пользователя. * Авторизация пользователей у нас будет осуществляться * с помощью сессий PHP. */ function authorization($login, $password) { // Инициализируем переменную с возможным сообщением об ошибке $error = ""; // Если отсутствует строка с логином, возвращаем сообщение об ошибке if(!$login) { $error = "Не указан логин"; return $error; } elseif(!$password) { $error = "Не указан пароль"; return $error; } // Проверяем не зарегистрирован ли уже пользователь // Подключаемся к СУБД connect(); // Нам нужно проверить, есть ли такой пользователь среди зарегистрированных // Составляем строку запроса $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // Выполняем запрос $query = mysql_query($sql) or die("

Невозможно выполнить запрос: " . mysql_error() . ". Ошибка произошла в строке " . __LINE__ . "

"); // Если пользователя с такими данными нет, возвращаем сообщение об ошибке if(mysql_num_rows($query) == 0) { $error = "Пользователь с указанными данными не зарегистрирован"; return $error; } // Если пользователь существует, запускаем сессию session_start(); // И записываем в неё логин и пароль пользователя // Для этого мы используем суперглобальный массив $_SESSION $_SESSION["login"] = $login; $_SESSION["password"] = $password; // Не забываем закрывать соединение с базой данных mysql_close(); // Возвращаем true для сообщения об успешной авторизации пользователя return true; }

Когда пользователь попадает на защищенную страницу, следует проверить корректность данных о его авторизации. Для этого нам потребуется еще одна пользовательская функция. Назовем её checkAuth() . Её задачей будет сверка данных авторизации пользователя с теми, которые хранятся в нашей базе. Если данные не совпадут, пользователь будет перенаправлен на страницу авторизации.

Function checkAuth($login, $password) { // Если нет логина или пароля, возвращаем false if(!$login || !$password) return false; // Проверяем зарегистрирован ли такой пользователь // Подключаемся к СУБД connect(); // Составляем строку запроса $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // Выполняем запрос $query = mysql_query($sql) or die("

Невозможно выполнить запрос: " . mysql_error() . ". Ошибка произошла в строке " . __LINE__ . "

"); // Если пользователя с такими данными нет, возвращаем false; if(mysql_num_rows($query) == 0) { return false; } // Не забываем закрывать соединение с базой данных mysql_close(); // Иначе возвращаем true return true; }

Теперь, когда пользователь попал на защищенную страницу, мы должны вызвать функцию проверки данных авторизации. Сценарий вызова и проверки мы поместим в отдельный файл checkAuth.php и будем подключать его к тем страницам, которые будут закрытыми для общего доступа.

/** * Скрипт проверки авторизации пользователей */ // Запускаем сессию, из которой будем извлекать логин и пароль // авторизовавшихся пользователей session_start(); // Подлючаем файл с пользовательскими функциями require_once("functions.php"); /** * Чтобы определить авторизован ли пользователь, нам нужно * проверить существуют ли в базе данных записи для его логина * и пароля. Для этого воспользуемся пользовательской функцией * проверки корректности данных авторизовавшегося пользователя. * Если эта функция вернет false, значит авторизации нет. * При отсутствии авторизации мы просто переадресовываем * пользователя к странице авторизации. */ // Если в сессии присуствуют данные и о логине, и о пароле, // проверяем их if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password"]) && $_SESSION["password"]) { // Если проверка существующих данных завершается неудачей if(!checkAuth($_SESSION["login"], $_SESSION["password"])) { // Переадресовываем пользователя на страницу авторизации header("location: login.php"); // Прекращаем выполнение скрипта exit; } } // Если данных либо о логине, либо о пароле пользователя нет, // считаем что авторизации нет, переадресовываем пользователя // на страницу авторизации else { header("location: login.php"); // Прекращаем выполнение сценария exit; }

А теперь давайте создадим код нашей защищенной страницы. Он будет довольно-таки прост.

Авторизация и регистрация пользователей

Успешная авторизация.

Вы получили доступ к защищенной странице. Вы можете выйти из системы.

Как видите, в защищенном документе мы подключаем только один файл — checkAuth.php. Все остальные файлы подключаются уже в других сценариях. Поэтому наш код не выглядит громоздким. Регистрацию и авторизацию пользователей мы организовали. Теперь необходимо позволить пользователям выходить из системы. Для этого мы создадим сценарий в файле logout.php.

/** * Скрипт выхода пользователя из системы. Так как пользователи * авторизуются через сессии, их логин и пароль хранятся * в суперглобаном массиве $_SESSION. Чтобы осуществить * выход из системы, достаточно просто уничтожить значения * массива $_SESSION["login"] и $_SESSION["password"], после * чего мы переадресовываем пользователя к странице авторизации */ // Обязательно запускаем сессию session_start(); unset($_SESSION["login"]); unset($_SESSION["password"]); header("location: login.php");

Скрипт регистрации, авторизации и проверки пользователей готов. Вы можете использовать его у себя, дополнять, изменять под ваши нужды. Если у вас будут вопросы, можете задавать их в комментариях. Вы можете скачать себе все файлы, о которых здесь велась речь, упакованные в один архив .

P.S. Я в курсе, что лучше писать объектно-ориентированный код, знаю, что передавать и хранить пароль в открытом виде не стоит, что информацию, заносимую в базу данных, необходимо предварительно проверять. Знаю. Об этом я здесь не буду говорить.

Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью PHP + MySQL. Для этого на вашем компьютере должен быть установлен Apache. Принцип работы нашего скрипта изображен ниже.

1. Начнем с создания таблички users в базе . Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/ ). Создаем таблицу users , в ней будет 3 поля.

Я создаю ее в базе mysql, вы можете создавать в другой базе. Далее устанавливаем значения, как на рисунке:

2. Необходимо соединение с этой таблицей. Давайте создадим файл bd.php . Его содержание:

$db = mysql_connect ("ваш MySQL сервер","логин к этому серверу","пароль к этому серверу");
mysql_select_db ("имя базы, к которой подключаемся",$db);
?>

В моем случае это выглядит так:

$db = mysql_connect ("localhost","user","1234");
mysql_select_db ("mysql",$db);
?>

Сохраняем bd.php .
Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к созданию странички, на которой пользователи будут оставлять свои данные.

3. Создаем файл reg.php с содержанием (все комментарии внутри):



Регистрация


Регистрация
















4. Создаем файл , который будет заносить данные в базу и сохранять пользователя. save_user.php (комментарии внутри):



{
}
//если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести


//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}
// если такого нет, то сохраняем данные
$result2 = mysql_query ("INSERT INTO users (login,password) VALUES("$login","$password")");
// Проверяем, есть ли ошибки
if ($result2=="TRUE")
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. Главная страница";
}
else {
echo "Ошибка! Вы не зарегистрированы.";
}
?>

5. Теперь наши пользователи могут регистрироваться! Далее необходимо сделать "дверь" для входа на сайт уже зарегистрированным пользователям. index.php (комментарии внутри) :

// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
?>


Главная страница


Главная страница











Зарегистрироваться



// Проверяем, пусты ли переменные логина и id пользователя
if (empty($_SESSION["login"]) or empty($_SESSION["id"]))
{
// Если пусты, то мы не выводим ссылку
echo "Вы вошли на сайт, как гость
Эта ссылка доступна только зарегистрированным пользователям";
}
else
{

В файле index.php мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта - ограничить доступ к каким-либо данным.

6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):

session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
if (isset($_POST["login"])) { $login = $_POST["login"]; if ($login == "") { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST["password"])) { $password=$_POST["password"]; if ($password =="") { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //извлекаем из базы все данные о пользователе с введенным логином
$myrow = mysql_fetch_array($result);
if (empty($myrow["password"]))
{
//если пользователя с введенным логином не существует
}
else {
//если существует, то сверяем пароли
if ($myrow["password"]==$password) {
//если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
echo "Вы успешно вошли на сайт! Главная страница";
}
else {
//если пароли не сошлись

Exit ("Извините, введённый вами login или пароль неверный.");
}
}
?>

Ну вот и все! Может урок и скучный, но очень полезный. Здесь показана только идея регистрации, далее Вы можете усовершенствовать ее: добавить защиту, оформление, поля с данными, загрузку аватаров, выход из аккаунта (для этого просто уничтожить переменные из сессии функцией unset ) и так далее. Удачи!

Все проверил, работает исправно!

Для того, чтобы разделить посетителей сайта на некие группы на сайте обязательно устанавливают небольшую систему регистрации на php . Таким образом вы условно разделяете посетителей на две группы просто случайных посетителей и на более привилегированную группу пользователей, которым вы выдаете более ценную информацию.

В большинстве случаев, применяют более упрощенную систему регистрации, которая написана на php в одном файле register.php .

Итак, мы немного отвлеклись, а сейчас рассмотрим более подробно файл регистрации.

Файл register.php

Для того, чтобы у вас это не отняло массу времени создадим систему, которая будет собирать пользователей, принимая от них минимальную контактную информацию. В данном случае все будем заносить в базу данных mysql. Для наибольшей скорости работы базы, будем создавать таблицу users в формате MyISAM и в кодировке utf-8.

Обратите внимание! Писать все скрипты нужно всегда в одной кодировке. Все файлы сайта и база данных MySql должны быть в единой кодировке. Самые распространенные кодировки UTF-8 и Windows-1251.

Для чего нужно писать все в одной кодировке мы поговорим как-нибудь попозже. А пока примите эту информацию как строжайшее правило создания скриптов иначе в будущем возникнут проблемы с работой скриптов. Ничего страшного, конечно, но просто потеряете массу времени для поиска ошибок в работе скрипта.

Как будет работать сам скрипт?

Мы хотим все упростить и получить быстрый результат. Поэтому будем получать от пользователей только логин, email и его пароль. А для защиты от спам-роботов, установим небольшую капчу. Иначе какой-нибудь мальчик из Лондона напишет небольшой робот-парсер, который заполнит всю базу липовыми пользователями за несколько минут, и будет радоваться своей гениальности и безнаказанности.

Вот сам скрипт. Все записано в одном файле register.php :

! `; // красный вопросительный знак $sha=$sh."scripts/pro/"; //путь к основной папке $bg=` bgcolor="#E1FFEB"`; // фоновый цвет строк?> Пример скрипта регистрации register.php style.css" />

В данном случае скрипт обращается к самому себе. И является формой и обработчиком данных занесенных в форму. Обращаю ваше внимание, что файл сжат zip-архивом и содержит файл конфигурации config.php, дамп базы данных users, файл содержащий вспомогательные функции functions.php, файл стилей style.css и сам файл register.php. Также несколько файлов, которые отвечают за работу и генерацию символов капчи.

In this tutorial, I walk you through the complete process of creating a user registration system where users can create an account by providing username, email and password, login and logout using PHP and MySQL. I will also show you how you can make some pages accessible only to logged in users. Any other user not logged in will not be able to access the page.

If you prefer a video, you can watch it on my YouTube channel

The first thing we"ll need to do is set up our database.

Create a database called registration . In the registration database, add a table called users . The users table will take the following four fields.

  • username - varchar(100)
  • email - varchar(100)
  • password - varchar(100)

You can create this using a MySQL client like PHPMyAdmin.

Or you can create it on the MySQL prompt using the following SQL script:

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) ENGINE=InnoDB DEFAULT CHARSET=latin1;

And that"s it with the database.

Now create a folder called registration in a directory accessible to our server. i.e create the folder inside htdocs (if you are using XAMPP server) or inside www (if you are using wampp server).

Inside the folder registration, create the following files:

Open these files up in a text editor of your choice. Mine is Sublime Text 3.

Registering a user

Open the register.php file and paste the following code in it:

regiser.php:

Register

Already a member? Sign in

Nothing complicated so far right?

A few things to note here:

First is that our form"s action attribute is set to register.php. This means that when the form submit button is clicked, all the data in the form will be submitted to the same page (register.php). The part of the code that receives this form data is written in the server.php file and that"s why we are including it at the very top of the register.php file.

Notice also that we are including the errors.php file to display form errors. We will come to that soon.

As you can see in the head section, we are linking to a style.css file. Open up the style.css file and paste the following CSS in it:

* { margin: 0px; padding: 0px; } body { font-size: 120%; background: #F8F8FF; } .header { width: 30%; margin: 50px auto 0px; color: white; background: #5F9EA0; text-align: center; border: 1px solid #B0C4DE; border-bottom: none; border-radius: 10px 10px 0px 0px; padding: 20px; } form, .content { width: 30%; margin: 0px auto; padding: 20px; border: 1px solid #B0C4DE; background: white; border-radius: 0px 0px 10px 10px; } .input-group { margin: 10px 0px 10px 0px; } .input-group label { display: block; text-align: left; margin: 3px; } .input-group input { height: 30px; width: 93%; padding: 5px 10px; font-size: 16px; border-radius: 5px; border: 1px solid gray; } .btn { padding: 10px; font-size: 15px; color: white; background: #5F9EA0; border: none; border-radius: 5px; } .error { width: 92%; margin: 0px auto; padding: 10px; border: 1px solid #a94442; color: #a94442; background: #f2dede; border-radius: 5px; text-align: left; } .success { color: #3c763d; background: #dff0d8; border: 1px solid #3c763d; margin-bottom: 20px; }

Now the form looks beautiful.

Let"s now write the code that will receive information submitted from the form and store (register) the information in the database. As promised earlier, we do this in the server.php file.

Open server.php and paste this code in it:

server.php

Sessions are used to track logged in users and so we include a session_start() at the top of the file.

The comments in the code pretty much explain everything, but I"ll highlight a few things here.

The if statement determines if the reg_user button on the registration form is clicked. Remember, in our form, the submit button has a name attribute set to reg_user and that is what we are referencing in the if statement.

All the data is received from the form and checked to make sure that the user correctly filled the form. Passwords are also compared to make sure they match.

If no errors were encountered, the user is registered in the users table in the database with a hashed password. The hashed password is for security reasons. It ensures that even if a hacker manages to gain access to your database, they would not be able to read your password.

But error messages are not displaying now because our errors.php file is still empty. To display the errors, paste this code in the errors.php file.

0) : ?>

When a user is registered in the database, they are immediately logged in and redirected to the index.php page.

And that"s it for registration. Let"s look at user login.

Login user

Logging a user in is an even easier thing to do. Just open the login page and put this code inside it:

Registration system PHP and MySQL

Login

Not yet a member? Sign up

Everything on this page is quite similar to the register.php page.

Now the code that logs the user in is to be written in the same server.php file. So open the server.php file and add this code at the end of the file:

// ... // LOGIN USER if (isset($_POST["login_user"])) { $username = mysqli_real_escape_string($db, $_POST["username"]); $password = mysqli_real_escape_string($db, $_POST["password"]); if (empty($username)) { array_push($errors, "Username is required"); } if (empty($password)) { array_push($errors, "Password is required"); } if (count($errors) == 0) { $password = md5($password); $query = "SELECT * FROM users WHERE username="$username" AND password="$password""; $results = mysqli_query($db, $query); if (mysqli_num_rows($results) == 1) { $_SESSION["username"] = $username; $_SESSION["success"] = "You are now logged in"; header("location: index.php"); }else { array_push($errors, "Wrong username/password combination"); } } } ?>

Again all this does is check if the user has filled the form correctly, verifies that their credentials match a record from the database and logs them in if it does. After logging in, the user is redirected them to the index.php file with a success message.

Now let"s see what happens in the index.php file. Open it up and paste the following code in it:

Home

Home Page

Welcome

logout

The first if statement checks if the user is already logged in. If they are not logged in, they will be redirected to the login page. Hence this page is accessible to only logged in users. If you"d like to make any page accessible only to logged in users, all you have to do is place this if statement at the top of the file.

The second if statement checks if the user has clicked the logout button. If yes, the system logs them out and redirects them back to the login page.

Now go on, customize it to suit your needs and build an awesome site. If you have any worries or anything you need to clarify, leave it in the comments below and help will come.

You can always support by sharing on social media or recommending my blog to your friends and colleagues.

На множестве сайтов, которые мы каждый день просматриваем в сети, почти на всех имеется пользовательская регистрация. В том уроке мы пробежимся по основам пользовательского управления, заканчивая простой Областью Участника, которую Вы можете осуществить на своем собственном вебсайте.

Этот урок рассчитан для начинающих изучение php где мы рассмотрим основы управления пользователями.

Шаг-1

Создадим в базе таблицу user в которой, мы будем хранить информацию о пользователях в таблице 4 поля

  • UserID
  • Username
  • Password
  • EmailAddress

Используйте SQL запрос ниже для создания базы данных

CREATE TABLE `users` ( `UserID` INT(25 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Username` VARCHAR(65 ) NOT NULL , `Password` VARCHAR(32 ) NOT NULL , `EmailAddress` VARCHAR(255 ) NOT NULL ) ;

session_start () ; $dbhost = "localhost" ; // Имя хоста где расположен сервер mysql обычно localhost $dbname = "database" ; // Имя базы данных $dbuser = "username" ; // Имя пользователя базы данных $dbpass = "password" ; // Пароль для доступа к базе данных mysql_connect ($dbhost , $dbuser , $dbpass ) or die ("MySQL Error: " . mysql_error () ) ; mysql_select_db ($dbname ) or die ("MySQL Error: " . mysql_error () ) ; ?>

Этот файл отвечает за подключение к базе данных и будет выводиться на всех страницах. Рассмотрим строки кода более подробно

session_start();

Эта функция начинает сессию для нового пользователя, далее в ней мы будем хранить данные о ходе сессии, чтобы мы могли узнавать пользователей которые уже прошли идентификацию

mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());

mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());

Каждая из этих функций выполняет отдельные, но связанные задачи.

Функция mysql_connect выполняет соединение с сервером баз данных MySQL в качестве параметров в скобках указаны переменные которым присвоены соответствующие значения Хост, Имя пользователя, Пароль если данные не верные выдаст сообщение об ошибке

Функция mysql_select_db выбирает базу данных имя которой мы присвоили переменной $dbname , в случае если не удаётся найти базу выводит сообщение об ошибке

Шаг-2 Создаем файл index.php

Немало важным элементом на нашей странице – является первая строка PHP; эта строка будет включать файл, который мы создали выше (base.php ), и по существу позволим нам обращаться к чему-нибудь от того файла в нашем текущем файле. Мы сделаем это со следующей строкой кода PHP. Создайте файл, названный index.php, и поместите этот код наверху.

Создайте новый файл index.php и вставите в самое начало следующий код

Эта строка будет подключать фаил который мы создали выше (base.php), что позволит нам обращаться к коду того файла в нашем текущем файле.

Это осуществляет функция include()

Теперь мы займёмся созданием внешнего интерфейса, где пользователь будет вводить свои данные для регистрации, а если он уже зарегистрирован дать возможность изменения данных. Так как этот урок нацелен на PHP мы не будем разбираться с кодом HTML/CSS внешний вид сделаем потом когда мы создадим нашу таблицу стилей CSS, а пока просто вставим этот код после предыдущей строки.

Система управления пользователями <title> </span> <span><link rel="stylesheet" href="/style.css" type="text/css" /> </span> <meta charset="utf-8"></head> <body> <span><div id="main">Сюда вставим php код </div> </p> <p>Теперь прежде чем пристать php программу разберём принцип её работы, что в той или иной ситуации надо выводит на экран:</p> <ol><li>Если пользователь уже вошёл то показываем страницу с различными опциями которые были скрыты до регистрации.</li> <li>Если пользователь еще не вошёл но прошёл регистрацию то показываем форму для ввода логина и пароля.</li> <li>Если 1 и 2 пункт не выполнен выводим форму для регистрации.</li> </ol><p>Выглядеть это будет так:</p> <p><?php </span> <span>if (! empty empty </span> <span>{ </span> <span>// Здесь выводиться скрытые опции </span> <span>} </span> <span>elseif (! empty empty ($_POST [ "password" ] ) ) </span> <span>{ </span> <span>// Выводим форму для входа </span> <span>} </span> <span>else </span> <span>{ </span> <span>// Выводим форму для регистрации </span> <span>} </span> <span>?> </p> <p>Когда пользователь проходит авторизацию на нашем сайте, информация сохраняется в сессии получить к ней доступ мы можем через глобальный массив <b>$ _SESSION </b>. С помощью функции empty и знака! в условии if мы проверяем имеет ли переменная значение, если переменная имеет значение выполняем код между фигурных скобок.</p> <p>В следующей строке всё работает тем же образом, только на этот раз с помощью <b>$ _POST </b> глобального массива. Этот массив содержит какие либо данные переданные через форму входа которую мы создадим позже. Последняя условие else выполниться в том случае если предыдущие условия не удовлетворяются.</p> <p>Теперь когда мы понимаем логику давайте вставим следующий код в файл index.php между тегами <div></p> <p><?php </span> <span>if (! empty ($_SESSION [ "LoggedIn" ] ) && ! empty ($_SESSION [ "Username" ] ) ) </span> <span>{ </span> <span>?> </span> <span> <h1>Пользовательская зона</h1> </span> <span> <p Спасибо что вошли! Вы <b><?= $_SESSION [ "Username" ] ?> </b> и Ваш адрес электронной почты <b><?= $_SESSION [ "EmailAddress" ] ?> </b>.</p> </span> <span><?php </span> <span>} </span> <span>elseif (! empty ($_POST [ "username" ] ) && ! empty ($_POST [ "password" ] ) ) </span> <span>{ </span> <span>$username = mysql_real_escape_string ($_POST [ "username" ] ) ; </span> <span>$password = md5 (mysql_real_escape_string </span> <span>$checklogin = mysql_query (</span> <span>if (mysql_num_rows ($checklogin ) == 1 ) </span> <span>{ </span> <span>$row = mysql_fetch_array ($checklogin ) ; </span> <span> echo <span>"<h1>Вы успешно вошли</h1>" </span>; </span> <span> echo <span>"<p>Сейчас вы будете переадресованы в ваш профиль.</p>" </span>; </span> <span> echo <span>"<meta content="=2;index.php" />" </span>; </span> <span>} </span> <span>else </span> <span>{ </span> <span> echo "<h1>Ошибка</h1>" ; </span> <span> echo <span>"<p>Ваша учётная запись не найдена или вы неправильно ввели логин или пароль. <a href=\" index.php\" >Попробовать снова </a>.</p>" </span>; </span> <span>} </span> <span>} </span> <span>else </span> <span>{ </span> <span>?> </span> <h1>Вход</h1> <span> <p>Хорошо что зашли Регистрация .</p> </span> <span> <form method="post" action="index.php" name="loginform" id="loginform"> </span> <fieldset> <span> <label for="username">Логин:</label><input type="text" name="username" id="username" /><br /> </span> <span> <label for="password">Пароль:</label><input type="password" name="password" id="password" /><br /> </span> <span> <input type="submit" name="login" id="login" value="Войти" /> </span> </fieldset> </form> <span><?php </span> <span>} </span> <span>?> </p> <p>В этом участке кода две функции,это<b>mysql _real _escape _string </b>которая экранирует специальные символы в строках для использования в базе данных тем самым обезопасит вас от нехорошихлюдей, и <b>md 5 </b> эта функция шифрует всё что передано ей в качестве параметра, в данном случае это пароль в глобальном массиве <b>$_POST </b>. Всё результаты работы функций мы присваиваем переменным<b>$username , <span>$password </span> </b>.</p> <p>$checklogin = mysql_query (<span>"SELECT * FROM users WHERE Username = "" </span>. $username . "" AND Password = "" . $password . """ ) ; </span> <span>if (mysql_num_rows ($checklogin ) == 1 ) </span> <span>{ </span> <span>$row = mysql_fetch_array ($checklogin ) ; </span> <span>$email = $row [ "EmailAddress" ] ; </span> <span>$_SESSION [ "Username" ] = $username ; </span> <span>$_SESSION [ "EmailAddress" ] = $email ; </span> <span>$_SESSION [ "LoggedIn" ] = 1 ; </p> <p>В этом участке кода нам надо проверить существует ли такой пользователь,для этого направляем запрос в базу данных, вытащить все поля из таблицы users где поля Username и Password равны переменным<b>$username и $password </b>. Результат запроса заносим в переменную<b>$checklogin </b> далее в условии <b>if </b> функция <b>mysql _num _row </b>s считает количество строк в запросе к базе и если равно 1 то есть пользователь найденвыполняем код в фигурных скобках, функция <b>mysql _fetch _array </b>преобразовывает результат запроса из <b>$checklogin </b>в ассоциативный массив, присваиваеваем значение поля EmailAddress переменной <b>$email </b>для использовать в дальнейшем.</p> <p>Заносим логин и email в текущею сессию после этого пользователь перенаправляется в свою учётную запись.</p> <p><b>Шаг-3 </b></p> <p>Теперь надо сделать страницу где пользователи будут регистрироваться.</p> <p>Создаем файл register.phpи скопируйте в него следующий код:</p> <p><?php include "base.php" ; ?> </span> <span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> </span> <span><html xmlns="http://www.w3.org/1999/xhtml"> </span> <span><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </span> <span><title> Система управления пользователями - Регистрацияtitle> </span> <span><link rel="stylesheet" href="/style.css" type="text/css" /> </span> <meta charset="utf-8"></head> <body> <div id="main"> <span><?php </span> <span>if (! empty ($_POST [ "username" ] ) && ! empty ($_POST [ "password" ] ) ) </span> <span>{ </span> <span>$username = mysql_real_escape_string ($_POST [ "username" ] ) ; </span> <span>$password = md5 (mysql_real_escape_string ($_POST [ "password" ] ) ) ; </span> <span>$email = mysql_real_escape_string ($_POST [ "email" ] ) ; </span> <span>$checkusername = mysql_query (<span>"SELECT * FROM users WHERE Username = "" </span>. $username . """ ) ; </span> <span>if (mysql_num_rows ($checkusername ) == 1 ) </span> <span>{ </span> <span> echo "<h1>Ошибка</h1>" ; </span> <span> echo <span>"<p>Такой логин уже занят p>" </span>; </span> <span>} </span> <span>else </span> <span>{ </span> <span>$registerquery = mysql_query (<span>"INSERT INTO users (Username, Password, EmailAddress) VALUES("" </span>. $username . "", "" . $password . "", "" . $email . "")" ) ; </span> <span>if ($registerquery ) </span> <span>{ </span> <span> echo "<h1>Отлично</h1>" ; </span> <span> echo <span>"<p>Ваша учетная запись была успешно создана. Вы можете<a href=\" index.php\" >Воити</a>.</p>" </span>; </span> <span>} </span> <span>else </span> <span>{ </span> <span> echo "<h1>Ошибка</h1>" ; </span> <span> echo <span>"<p>Попробуйте повторить регистрацию снова.</p>" </span>; </span> <span>} </span> <span>} </span> <span>} </span> <span>else </span> <span>{ </span> <span>?> </span> <span> <h1>Регистрация</h1> </span> <span> <form method="post" action="register.php" name="registerform" id="registerform"> </span> <fieldset> <span> <label for="username">Логин:</label><input type="text" name="username" id="username" /><br /> </span> <span> <label for="password">Пароль:</label><input type="password" name="password" id="password" /><br /> </span> <span> <label for="email">Email:</label><input type="text" name="email" id="email" /><br /> </span> <span> <input type="submit" name="register" id="register" value="Регистрация" /> </span> </fieldset> </form> <span><?php </span> <span>} </span> <span>?> </span> </div> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(95794684, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/95794684" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </body> </html> </p> <p>В этом коде есть немного нового, запись в базу данных</p> <p>Это такой же запрос к базе данных который был раньше только теперь мы не получаеминформацию, а записываем командой INSERT , первым деломнадо указать в какие поля будет вноситься информация а в область VALUES информация которая будет записана в нашем случае это переменные со значением которые были переданы пользователем.Обратите особое внимание правила формирования запросов.</p> <p><b>Шаг-4 Завершение </b></p> <p>Для того чтобы пользователь мог выйти создайте файл logout.php и скопируйте в него код:</p> <p><?php include "base.php; <span>$_SESSION = array(); session_destroy(); ?> </span> <meta http-equiv=" refresh" content=" 0 ; index. php" </p> <p>В результате этого кода происходит сбросглобального массива $_SESSION и разрушение сессии, не забудьтев опция пользователя поставить ссылку на этот фаил.</p> <p>И наконец придадим стиль всему вышеописанному, создайте файл style.css и поместите туда следующий ниже код.</p> <p>* { </span> <span>margin : 0 ; </span> <span>padding : 0 ; </span> <span>} </span> body <span>{ </span> <span>} </span> a <span>{ </span> <span>color : #000 ; </span> <span>} </span> a<span>:hover , a:active , a:visited { </span> <span>text-decoration : none ; </span> <span>} </span> <span>#main { </span> <span>width : 780px ; </span> <span>margin : 0 auto ; </span> <span>margin-top : 50px ; </span> <span>padding : 10px ; </span> <span>background-color : #EEE ; </span> <span>} </span> form fieldset <span>{ border : 0 ; } </span> form fieldset p br <span>{ clear : left ; } </span> label <span>{ </span> <span>margin-top : 5px ; </span> <span>display : block ; </span> <span>width : 100px ; </span> <span>padding : 0 ; </span> <span>float : left ; </span> <span>} </span> input <span>{ </span> <span>font-family : Trebuchet MS; </span> <span>border : 1px solid #CCC ; </span> <span>margin-bottom : 5px ; </span> <span>background-color : #FFF ; </span> <span>padding : 2px ; </span> <span>} </span> input<span>:hover { </span> <span>border : 1px solid #222 ; </span> <span>background-color : #EEE ; </span> <span>} </p> <p>Вот в принципе и всё конечно приведенный в этом уроке пример далёк от совершенства но он и был рассчитан для начинающих чтобы дать понятие основ.</p> <p>Разберём некоторые части данного кода</p> <p>$username = mysql_real_escape_string($_POST["username"]); </p> <p>$password = md5(mysql_real_escape_string($_POST["password"])); </p> <p>В этом участке кода две функции,этоmysql _real _escape _string которая экранирует специальные символы в строках для использования в базе данных тем самым обезопасит вас от нехорошихлюдей, и md 5 эта функция шифрует всё что передано ей в качестве параметра, в данном случае это пароль в глобальном массиве $_POST . Всё результаты работы функций мы присваиваем переменным$username , <span>$password </span>.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> <div class="sidebar col-md-3"> <noindex> <div class="anchor_fix"></div> <div class="fixed_related" id="getFixed"> <div class='yarpp-related'> <div class="subscribe"> <ul class="related"> </ul> </div> </div> </div> <div id="vk_groups"></div> </div> </div> </noindex> </div> </div> </div> </div> </div> </div> <div class="footer"> <div class="container"> <div class="copyright pull-left"> © 2023 mymq.ru - Компьютер шаг за шагом<br> <style type="text/css"> .madeby { margin: 10px 0; font-size: 12px; line-height: 15px; color: white; float: left; display: block; width: 240px; text-align: left; clear: right; padding-left: 40px; background-repeat: no-repeat; background-position: left center; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0wMi0yNFQxMzozNjo1MSswMzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMDItMjRUMTM6MzcrMDM6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMDItMjRUMTM6MzcrMDM6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJDNDE4M0FFRkE3RDExRTY4RDA5RDBBNDU4QTVENTdDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJDNDE4M0FGRkE3RDExRTY4RDA5RDBBNDU4QTVENTdDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkM0MTgzQUNGQTdEMTFFNjhEMDlEMEE0NThBNUQ1N0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkM0MTgzQURGQTdEMTFFNjhEMDlEMEE0NThBNUQ1N0MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6p6JuUAAAEDElEQVR42qyXz4sURxTHX1X1RMPuQSSJIMIqLBEMISxBgj8QQV13Z/Ym/gVCLvkLPOYPiIGI1z16yc0wTtRl1REU0bCCECQoiHiJASE60zPdPT2T76vqrq7qnh1n3RR8t6p7u9+n3qvXr2rEaDQir23M07bawvPx99e+2kkDeYIGYgn9oYD+r8bzT4V/786hfQCt4D5g6hTGs4AS9IvYtsf8+lAYaCoCjI/C8DLGDehrAxJk+0SDzwbb8pCBQ/EFAHXtVSrOUip3aUDqwLhPLLiD67sfA5aAfQvDK+jZMx5LA8uMpyWYD75NP9yPpgXvhs4AVM9gn2ehLVQOqVlLgBywUYsNTgJ/A9WhJYT1GIyrYi1lBhsH1eMYgHsY7wD4uAPl/zd98Mb8LP6eglY0jGhfKXHMeCA38/I1DP+uDQ/EGl142KHLx9YdIFEsntKP668MeGP+e/TnoRPQJ6XE8cPpr2GK8X30LR2+gXiiARceGkd+Pj5LiTpaQPUEmrmf7PEz6IiFDh3vrGcW+g+ujVeJvIXrt6XEKRaqH5zG9Y4MmEm0CvDC8za85qS5Ds1UkiYVz2D8Vxj+Df0f6IcTEqcAh6rh3U/kvxSpB8WnYcpcGwbrMNS1D8aZIvUpRXIV/SNoCMEbRz1HfM3t4hlBvaAOkVYIva/dpNVriQ/m9t1fbYpVHbCugSrSkEjNQXdgdH8VmBnuB+Y6zMA9tQDt1cAO9K7G4KZfDNx28k/AZR2gLrwkx7s5yMB7QdXL0JmEBgeL1NGwXEOotTmYW6TaMFaHup6HDO8B3mPPcy+zMLqT4fau1nCg8Lr2mNavvpkM7qsqvGeNG3gIeFha3y5D8GGcO7cbsCMl8I1q3R0HNmrD4DLUtSE1EwA8gOfBASdxXMgSeqVDzetr+uZ04CJx7iGkBu57OAfgbRg8kCWOq4aFchTC4A30qIyp1mo27JU51NwE+2uiK9SMvt/Psx0lsq8OZtnPz0r0i/ZTjJXZFP6+MvwwmJMmsSUurzgGHqkWQDMWFMmXzphBh/HeZ/678vq4HagKDhWVKk7+PSPsGTzK4SidsYXyZEvVSqCey7XpwL2AvOrVt4WEAYAj4WKGS4Y3bVgTPeGGLqP5MqXiAQ0uvZ0SrMh64UGze+x5LBl+Cf0LJ6x7oQW7TZqDX3Ozzb4K5oyMxoBjWfSccLE67YRUH+AgoYHF+XEL4Pc11zs3cYqNI99tEukeBpbJP7C+otFPTz8OHJegfuIUIR0KvESLJUs3Jx3iNgm1F9Y8caiUOO4Bfg9UK1lqTj6qVsC24lQ3gL6z3v6vhtfQMn+M+VbDP1q2Bu4GRi7UAlX1Z0rR2g78Lta3s7VQh4FfMvPPYzTV+TuHf/mhB/8TYAD5G5WwXg8pHgAAAABJRU5ErkJggg=='); } </style> </div> <ul id="menu-bottom-menu" class="bottom-menu pull-right"> <li id="menu-item-14" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/sitemap.xml">Карта сайта</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="">Реклама</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/feedback/">Контакты</a></li> </ul> </div> </div> <a id="to-top" href="#" class="scrollToTop"></a> <link rel='stylesheet' id='yarppRelatedCss-css' href='/wp-content/plugins/yet-another-related-posts-plugin/style/related.css?ver=9dc0bdd0f1d2506e0eda58c88609f331' media='all' /> <script type='text/javascript' src='https://mymq.ru/wp-content/themes/blank/js/lib/conditionizr-4.3.0.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/themes/blank/js/lib/modernizr-2.7.1.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/themes/blank/js/scripts.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/imagesloaded.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/masonry.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/jquery/jquery.masonry.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331b'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/plugins/advanced-recent-posts/lptw-recent-posts.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/plugins/contact-form-7/includes/js/jquery.form.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331-2014.06.20'></script> <script type='text/javascript' src='/assets/scripts1.js'></script> <script type='text/javascript' src='//mymq.ru/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='//mymq.ru/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='//mymq.ru/wp-content/plugins/woocommerce/assets/js/jquery-cookie/jquery.cookie.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='//mymq.ru/wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/plugins/optin-monster/assets/js/api.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type='text/javascript' src='https://mymq.ru/wp-content/plugins/disqus-comment-system/media/js/count.js?ver=9dc0bdd0f1d2506e0eda58c88609f331'></script> <script type="text/javascript">(window.Image ? (new Image()) : document.createElement('img')).src = location.protocol + '//vk.com/rtrg?r=YXkLp5Vwqs9VOMWfFWIads6jxBixx6wQyBkSJ0/Hg4WE7l3w2X85qYgv7X5VakufxBiqU5gywDqKku6fxSALURgdcV62OTDaFtTzE45QC4pQEML4f9Q7UhtvgO1g2wr9zg1bO6bL1u*sYLa5sLCeA7pR51y8cE2HUSPPCKbldn8-';</script> <script type="text/javascript" src="https://mymq.ru/wp-content/themes/blank/javascript.js"></script> <script type="text/javascript" src="//vk.com/js/api/openapi.js?116"></script> <script type="text/javascript" src="https://mymq.ru/wp-content/themes/blank/js/readmore.min.js"></script> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('.click_menu').click(function() { jQuery('.mobile_menu .list_menu').toggle('normal'); return false; } ); jQuery('.container').click(function() { jQuery('.mobile_menu .list_menu').hide('normal'); } ); // jQuery('.vis .click_menu').click(function() { // jQuery('.vis.mobile_menu').addClass('hide').removeClass('vis'); // } ); } ); </script> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('.fixed_related .entry-image').height((jQuery(window).height()/3)-130); jQuery(function($) { function fixDiv() { if (jQuery( ".anchor_fix" ).length > 0) { var $cache = $('#getFixed'); if ($(window).scrollTop() > jQuery( ".anchor_fix" ).position().top+100) $cache.css({ 'position': 'fixed', 'top': '10px' } ); else $cache.css({ 'position': 'relative', 'top': 'auto' } ); } } $(window).scroll(fixDiv); if (jQuery( ".anchor_fix" ).length > 0) fixDiv(); } ); } ); </script> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(95794684, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/95794684" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> </body> </html>