HTML формы — сложные элементы интерфейса. Они включают в себя разные функциональные элементы: поля ввода и , списки , подсказки и т.д. Весь код формы заключается в элемент .
Большая часть информации веб-форм передаётся с помощью элемента . Для ввода одной строки текста применяется элемент , для нескольких строк - элемент . Элемент создает выпадающий список.
Элемент создаёт надписи к полям формы. Существует два способа группировки надписи и поля. Если поле находится внутри элемента , то атрибут for указывать не нужно.
Last Name Last Name Last Name
Поля формы можно разделять на логические блоки с помощью элемента
Чтобы сделать форму более понятной для пользователей, в поля формы добавляют текст, содержащий пример вводимых данных. Такой текст называется подстановочным и создаётся с помощью атрибута placeholder .
Обязательные для заполнения поля также необходимо выделять. До появления HTML5 использовался символ звездочки * , установленный возле названия поля. В новой спецификации появился специальный атрибут required , который позволяет отметить обязательное поле на уровне разметки. Этот атрибут дает указание браузеру (при условии, что тот поддерживает HTML5), указание не отправлять данные после нажатия пользователем кнопки отправить, пока указанные поля не заполнены.
Для изменения внешний вид текстового поля при получении фокуса, используется псевдокласс focus . Например, можно сделать фон текущего поля более темным или добавить цветную рамку, чтобы оно выделялось среди остальных:
Input:focus { background: #eaeaea; }
Ещё один полезный html5-атрибут — атрибут autofocus . Он позволяет автоматически установить фокус на нужном начальном поле для элементов и (только в один элемент каждой формы).
HTML разметка
Примечание action="form.php" — ссылка на файл обработчика формы. Создайте файл в кодировке UTF-8, закачайте его на сервер и замените action="form.php" на путь к файлу на вашем сервере.
Как видно из рисунка, каждый элемент формы имеет стили браузера по умолчанию. Очистим стили и оформим элементы формы.
Form-wrap { width: 550px; background: #ffd500; border-radius: 20px; } .form-wrap *{transition: .1s linear} .profile { width: 240px; float: left; text-align: center; padding: 30px; } form { background: white; float: left; width: calc(100% - 240px); padding: 30px; border-radius: 0 20px 20px 0; color: #7b7b7b; } .form-wrap:after, form div:after { content: ""; display: table; clear: both; } form div { margin-bottom: 15px; position: relative; } h1 { font-size: 24px; font-weight: 400; position: relative; margin-top: 50px; } h1:after { content: "\f138"; font-size: 40px; font-family: FontAwesome; position: absolute; top: 50px; left: 50%; transform: translateX(-50%); } /********************** стилизация элементов формы **********************/ label, span { display: block; font-size: 14px; margin-bottom: 8px; } input, input { border-width: 0; outline: none; margin: 0; width: 100%; padding: 10px 15px; background: #e6e6e6; } input:focus, input:focus { box-shadow: inset 0 0 0 2px rgba(0,0,0,.2); } .radio label { position: relative; padding-left: 50px; cursor: pointer; width: 50%; float: left; line-height: 40px; } .radio input { position: absolute; opacity: 0; } .radio-control { position: absolute; top: 0; left: 0; height: 40px; width: 40px; background: #e6e6e6; border-radius: 50%; text-align: center; } .male:before { content: "\f222"; font-family: FontAwesome; font-weight: bold; } .female:before { content: "\f221"; font-family: FontAwesome; font-weight: bold; } .radio label:hover input ~ .radio-control, .radiol input:focus ~ .radio-control { box-shadow: inset 0 0 0 2px rgba(0,0,0,.2); } .radio input:checked ~ .radio-control { color: red; } select { width: 100%; cursor: pointer; padding: 10px 15px; outline: 0; border: 0; background: #e6e6e6; color: #7b7b7b; -webkit-appearance: none; /*убираем галочку в webkit-браузерах*/ -moz-appearance: none; /*убираем галочку в Mozilla Firefox*/ } select::-ms-expand { display: none; /*убираем галочку в IE*/ } .select-arrow { position: absolute; top: 38px; right: 15px; width: 0; height: 0; pointer-events: none; /*активизируем показ списка при нажатии на стрелку*/ border-style: solid; border-width: 8px 5px 0 5px; border-color: #7b7b7b transparent transparent transparent; } button { padding: 10px 0; border-width: 0; display: block; width: 120px; margin: 25px auto 0; background: #60e6c5; color: white; font-size: 14px; outline: none; text-transform: uppercase; } /********************** добавляем форме адаптивность **********************/ @media (max-width: 600px) { .form-wrap {margin: 20px auto; max-width: 550px; width:100%;} .profile, form {float: none; width: 100%;} h1 {margin-top: auto; padding-bottom: 50px;} form {border-radius: 0 0 20px 20px;} }
Файл form.php
" . "\r\n"; $headers .= "Bcc: ваш_email". "\r\n"; if(!empty($name) && !empty($sex) && !empty($email) && !empty($country) && filter_var($email, FILTER_VALIDATE_EMAIL)){ mail($email, $subject, $msg, $headers); echo "Спасибо! Вы успешно зарегистрировались."; } ?>
Примечание В переменной $subject укажите текст, который будет отображаться как заголовок письма; Ваше_имя — здесь вы можете указать имя, которое будет отображаться в поле «от кого письмо» ; url_вашего_сайта замените на адрес сайта с формой регистрации; ваш_email замените на ваш адрес электронной почты; $headers .= "Bcc: ваш_email". "\r\n"; отправляет скрытую копию на ваш адрес электронной почты.
Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью 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(); ?>
Зарегистрироваться
В файле 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 ) и так далее. Удачи!
Все проверил, работает исправно!
Инструкция
Начните создание регистрационной формы с тега
Открываем html файл и начинаем ввод кода. Тэг отвечающий за создание формы - "form". Записываем тэг вместе с атрибутами "form action=”obrabotka.php” method=”post” name”forma1”". Приступаем к созданию элементов формы. Практически все элементы делаются с помощью тэга , и его атрибут “type”, который отвечает за тип данных, к примеру текста, пароля и прочего. Всегда задаем имя “name“ любому из атрибутов.
Прописываем: "br"Введите фио:"br"
"input type="text" name="fio""
"br" Введите пароль:"br"
"input type="password" name="pass""
"br"Введите E-mai:l"br"
"input type="text" name="email"".
Далее создаем элемент выбора радио кнопки. Радио кнопка это элемент формы, который при нажатии на нее курсором , а другие радио кнопки выключаются. Поясним примером нашей формы. При заказе курса выбор будет состоять либо из CD либо DVD , поэтому нужно выбрать что то одно. Отвечает за создание такой кнопки элемент атрибута “type” – “radio”. Мы будем прописывать одно и тоже имя для вида носителя, поэтому укажем атрибут “value” для того, чтобы обработчик смог точно определить значение переменной. Прописываем код: "br"Выберите вариант носителя информации:"br"
"input type="radio" name="disc" value="cd"" CD "br"
"input type="radio" name="disc" value="dvd"" DVD "br"
Если атрибут “value” поставить к тексту, то в форме сразу будет отображаться то значение которое мы присвоили этому атрибуту. Например чтобы в форме ФИО уже стояло какое нибудь имя(value=”имя”).
Введите другой элемент и установите type равным "checkbox", чтобы предоставить пользователям возможность отметить более одного варианта в форме . Для примера:(Свяжитесь со мной, когда будет отправлен)(Подписаться на )
Создайте кнопку «Отправить», набрав тег и type равным "submit", value присвойте значение «Отправить». Кроме того, в другом теге сделайте кнопку «Сброс», установив type равным "reset", а value соотвественно «Сброс». Например, так:Кнопка «Отправить» предназначена для отправки данных, а кнопка «Сброс» - для очистки формы, если потребуется.
Введите закрывающий тег , чтобы закончить форму . Сохраните страницу.
Источники:
Форма регистрации является встроенным модулем панели Joomla. Для того чтобы ее добавить, не требуется быть экспертом в веб-программировании. Однако если вы решили изменить ее, то реализовать это можно при помощи компонента Community Builder или вручную. Нужно лишь отредактировать нужные элементы, изучив основы сайтостроения.
Зайдите в административную панель Joomla и откройте настройки встроенных модулей. Перейдите на вкладку «Расширенные» и нажмите на кнопку «Создать». Появится окно «Менеджера модулей», в котором необходимо выбрать и активировать форму регистрации . Укажите желаемое название для заголовка поставьте галочку возле строки «Показать заголовок».
Откройте раздел «Начальный текст» в модуле формы регистрации и отредактируйте стандартный текст для посетителей, если он вам не подходит. В пункте «Логин» вы можете выбрать, как будет именоваться пользователь на сайте: под своим именем или логином. Нажмите кнопку «Сохранить», чтобы изменения вступили в силу.
Загрузите компонент Community Builder на ваш сайт. Для этого перейдите в раздел «Загрузить файл пакета» и нажмите кнопку «Обзор». После выбора нужных документов щелкните на кнопку «Загрузить и установить». Перейдите в панель администратора и запустите установленный компонент.
Откройте вкладку «Регистрация» и внесите все необходимые изменения в форму регистрации . Данное приложение очень удобно в использовании, однако если вы хотите изменить только одно-два поля, то удобнее будет выполнить редактирование вручную.
Создайте резервную копию файлов, которые вы будете изменять для внесения корректировок в форму регистрации . Это позволит вам откатить все действия и восстановить работоспособность сайта в случае неудачи. Определите, какие поле вы хотите отредактировать или добавить. К примеру, вы хотите добавить в форму регистрации поле «Город».
Откройте файл default.php, который находится по ссылке components/com_user/views/register/tmpl. Добавьте отображение «Города», вставив в форму регистрации соответствующий HTML-код. Для этого вы можете скопировать любой другой пункт и отредактировать его под город (city). Внесите данные изменения в таблицу jos_users. Откройте файл user.php, который находится по ссылке libraries/joomla/database/table. Добавьте в него новую переменную. Сохраните настройки и перезапустите сайт.
Далеко не всегда счастливым новоселам удается выполнить требование закона о регистрации по месту пребывания (сделать временную регистрацию) в установленные сроки – 90 дней. Иногда причиной этому может стать нежелание или отсутствие возможности у собственника квартиры явиться в соответствующую организацию для осуществления регистрационных действий.
Безусловно, если собственник не выразил желание узаконить ваше временное пребывание в его жилом помещении, то зарегистрироваться не получится. Исключение составляют случаи, когда вы регистрируете своего несовершеннолетнего ребенка по месту своей регистрации. В этом случае согласия собственника получать не нужно.
Но если проблема с временной регистрацией заключается только в отсутствии желания у собственника посетить вместе с вами сотрудников, ответственных за прием документов на регистрацию, то нормативными актами предусмотрена возможность получить временную регистрацию и без присутствия собственника.
Если основанием для вселения является договор найма, то можно направить нотариальный договор по почте с приложением остальных документов (копия паспорта, заполненное заявление). В такой ситуации у лиц, которые ответственны за приемку документов, нет обязанности по заверке копии данного договора, а собственник помещения не проставляет свою подпись в заявлении.
Если же есть возможность представить только договор в простой письменной форме, то ответственные лица обязаны заверить подпись собственника и регистрируемого лица в заявлении. В этой ситуации без присутствия собственника не обойтись.
Свидетельство о регистрации по месту пребывания можно получить также через почтовое отправление.
Хотя присутствия собственника при получении временной регистрации не требуется, надеяться, что он не узнает о новых жильцах, не стоит. После совершенных регистрационных действий органы ФМС направят ему уведомление о зарегистрированном на его жилплощади лице.
Если вы продали автомобиль, которым владели более трех лет, дальше можете не читать: начиная с 2011 года, права на имущественный налоговый вычет признается за вами автоматически. Это значит, что подавать декларацию вы не должны. А вот если он был у вас в собственности меньшее время, оформить нужные бумаги придется. Проще всего это сделать с помощью программы «Декларация».
Вам понадобится
Скачать самую свежую версию программы вы можете на сайте Главного научно-исследовательского центра Федеральной налоговой службы (ГНИВЦ ФНС) России. Она распространяется
Процесс создания системы регистрации – это довольно большой объем работы. Вам нужно написать код, который бы перепроверял валидность email-адресов, высылал email-письма с подтверждением, предлагал возможность восстановить пароль, хранил бы пароли в безопасном месте, проверял формы ввода и многое другое. Даже когда вы все это сделаете, пользователи будут регистрироваться неохотно, так как даже самая минимальная регистрация требует их активности.
В сегодняшнем руководстве мы займемся разработкой простой системы регистрации, с использованием которой вам не понадобятся никакие пароли! В результаты мы получим, систему, которую можно будет без труда изменить или встроить в существующий PHP-сайт. Если вам интересно, продолжайте чтение.
PHP
Теперь мы готовы к тому, чтобы заняться кодом PHP. Основной функционал системы регистрации предоставляется классом User, который вы можете видеть ниже. Класс использует (), представляющую собой минималистскую библиотеку для работы с базами данных. Класс User отвечает за доступ к базам данных, генерирование token-ов для логина и их валидации. Он представляет нам простой интерфейс, который можно без труда включить в систему регистрации на ваших сайтах, основанных на PHP.
User.class.php
// Private ORM instance private $orm;
/** * Find a user by a token string. Only valid tokens are taken into * consideration. A token is valid for 10 minutes after it has been generated. * @param string $token The token to search for * @return User */
Public static function findByToken($token){
// find it in the database and make sure the timestamp is correct
->where("token", $token) ->where_raw("token_validity > NOW()") ->find_one();
If(!$result){ return false; }
Return new User($result); }
/** * Either login or register a user. * @return User */
Public static function loginOrRegister($email){
// If such a user already exists, return it
If(User::exists($email)){ return new User($email); }
// Otherwise, create it and return it
Return User::create($email); }
/** * Create a new user and save it to the database * @param string $email The user"s email address * @return User */
Private static function create($email){
// Write a new user to the database and return it
$result = ORM::for_table("reg_users")->create(); $result->email = $email; $result->save();
/** * Check whether such a user exists in the database and return a boolean. * @param string $email The user"s email address * @return boolean */
Public static function exists($email){
// Does the user exist in the database? $result = ORM::for_table("reg_users") ->where("email", $email) ->count();
Return $result == 1; }
/** * Create a new user object * @param $param ORM instance, id, email or null * @return User */
Public function __construct($param = null){
If($param instanceof ORM){
// An ORM instance was passed $this->orm = $param; } else if(is_string($param)){
// An email was passed $this-> ->where("email", $param) ->find_one(); } else{
If(is_numeric($param)){ // A user id was passed as a parameter $id = $param; } else if(isset($_SESSION["loginid"])){
// No user ID was passed, look into the sesion $id = $_SESSION["loginid"]; }
$this->orm = ORM::for_table("reg_users") ->where("id", $id) ->find_one(); }
/** * Generates a new SHA1 login token, writes it to the database and returns it. * @return string */
Public function generateToken(){ // generate a token for the logged in user. Save it to the database.
$token = sha1($this->email.time().rand(0, 1000000));
// Save the token to the database, // and mark it as valid for the next 10 minutes only
$this->orm->set("token", $token); $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")"); $this->orm->save();
Return $token; }
/** * Login this user * @return void */
Public function login(){
// Mark the user as logged in $_SESSION["loginid"] = $this->orm->id;
// Update the last_login db field $this->orm->set_expr("last_login", "NOW()"); $this->orm->save(); }
/** * Destroy the session and logout the user. * @return void */
Public function logout(){ $_SESSION = array(); unset($_SESSION); }
/** * Check whether the user is logged in. * @return boolean */
Public function loggedIn(){ return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id; }
/** * Check whether the user is an administrator * @return boolean */
Public function isAdmin(){ return $this->rank() == "administrator"; }
/** * Find the type of user. It can be either admin or regular. * @return string */
Public function rank(){ if($this->orm->rank == 1){ return "administrator"; }
Return "regular"; }
/** * Magic method for accessing the elements of the private * $orm instance as properties of the user object * @param string $key The accessed property"s name * @return mixed */
Public function __get($key){ if(isset($this->orm->$key)){ return $this->orm->$key; }
Return null; }} Token-ы генерируются при помощи алгоритма , и сохраняются в базу данных. Мы используем из MySQL для установки значения в колонку token_validity, равного 10 минутам. При валидации token, мы сообщаем движку, что нам нужен token, поле token_validity пока еще не истекло. Таким образом мы ограничиваем время, в течение которого token будет валиден.
Обратите внимание на то, что мы используем волшебный метод __get () в конце документа, чтобы получить доступ к свойствам объекта user. Это позволяет нам осуществить доступ к данным, которые хранятся в базе данных в виде свойств: $user->email, $user->token. Для примера давайте посмотрим, как мы можем использовать этот класс в следующем фрагменте кода:
Functions.php
Function send_email($from, $to, $subject, $message){
// Helper function for sending email
$headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/plain; charset=utf-8" . "\r\n"; $headers .= "From: ".$from . "\r\n";
Return mail($to, $subject, $message, $headers);}
function get_page_url(){
// Find out the URL of a PHP file
$url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];
If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != ""){ $url.= $_SERVER["REQUEST_URI"]; } else{ $url.= $_SERVER["PATH_INFO"]; }
Return $url;}
function rate_limit($ip, $limit_hour = 20, $limit_10_min = 10){
// The number of login attempts for the last hour by this IP address
$count_hour = ORM::for_table("reg_login_attempt") -> ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count();
// The number of login attempts for the last 10 minutes by this IP address
$count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count();
If($count_hour > $limit_hour || $count_10_min > $limit_10_min){ throw new Exception("Too many login attempts!"); }}
function rate_limit_tick($ip, $email){
// Create a new record in the login attempt table
$login_attempt = ORM::for_table("reg_login_attempt")->create();
$login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip));
$login_attempt->save();}
function redirect($url){ header("Location: $url"); exit;} Функции rate_limit и rate_limit_tick позволяют нам ограничивать число попыток авторизации на определенный промежуток времени. Попытки авторизации записываются в базу данных reg_login_attempt. Эти функции запускаются при проведении подтверждения формы авторизации, как можно видеть в следующем фрагменте кода.
Нижеприведенный код был взят из index.php, и он отвечает за подтверждение формы авторизации. Он возвращает JSON-ответ, который управляется кодом jQuery, который мы видели в assets/js/script.js.
index.php
If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"])){
// Output a JSON header
Header("Content-type: application/json");
// Is the email address valid?
If(!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){ throw new Exception("Please enter a valid email."); }
// This will throw an exception if the person is above // the allowed login attempt limits (see functions.php for more): rate_limit($_SERVER["REMOTE_ADDR"]);
// Record this login attempt rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["email"]);
// Send the message to the user
$message = ""; $email = $_POST["email"]; $subject = "Your Login Link";
If(!User::exists($email)){ $subject = "Thank You For Registering!"; $message = "Thank you for registering at our site!\n\n"; }
// Attempt to login or register the person $user = User::loginOrRegister($_POST["email"]);
$message.= "You can login from this URL:\n"; $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";
$message.= "The link is going expire automatically after 10 minutes.";
$result = send_email($fromEmail, $_POST["email"], $subject, $message);
If(!$result){ throw new Exception("There was an error sending your email. Please try again."); }
Die(json_encode(array( "message" => "Thank you! We\"ve sent a link to your inbox. Check your spam folder as well."))); }}catch(Exception $e){
Die(json_encode(array( "error"=>1, "message" => $e->getMessage())));} При успешной авторизации или регистрации, вышеприведенный код отсылает email человеку с ссылкой для авторизации. Token (лексема) становится доступной в качестве $_GET-переменной "tkn" ввиду сгенерированного URL.
If(isset($_GET["tkn"])){
// Is this a valid login token? $user = User::findByToken($_GET["tkn"]);
// Yes! Login the user and redirect to the protected page.
$user->login(); redirect("protected.php"); }
// Invalid token. Redirect back to the login form. redirect("index.php");} Запуск $user->login() создаст необходимые переменные для сессии, что позволит пользователю оставаться авторизованным при последующих входах.
Выход из системы реализуется примерно таким же образом:
Index.php
If(isset($_GET["logout"])){
$user = new User();
If($user->loggedIn()){ $user->logout(); }
Redirect("index.php");} В конце кода мы снова перенаправляем пользователя на index.php, поэтому параметр?logout=1 в URL исключается.
Нашему файлу index.php также потребуется защита – мы не хотим, чтобы уже авторизованные пользователи видели форму. Для этого мы используем метод $user->loggedIn():
if($user->loggedIn()){ redirect("protected.php");} Наконец, давайте посмотрим, как можно защитить страницу вашего сайта, и сделать ее доступной только после авторизации:
protected.php
// To protect any php page on your site, include main.php// and create a new User object. It"s that simple!
require_once "includes/main.php";
if(!$user->loggedIn()){ redirect("index.php");} После этой проверки вы можете быть уверены в том, что пользователь успешно авторизовался. У вас также будет доступ к данным, которые хранятся в базе данных в качестве свойств объекта $user. Чтобы вывести email пользователя и их ранг, воспользуйтесь следующим кодом:
Echo "Your email: ".$user->email;echo "Your rank: ".$user->rank(); Здесь rank() – это метод, так как колонка rank в базе данных обычно содержит числа (0 для обычных пользователей и 1 для администраторов), и нам нужно преобразовать это все в названия рангов, что реализуется при помощи данного метода. Чтобы преобразовать обычного пользователя в администратора, просто отредактируйте запись о пользователе в phpmyadmin (либо в любой другой программе по работе с базами данных). Будучи администратором, пользователь не будет наделен какими-то особыми возможностями. Вы сами в праве выбирать, каким правами наделять администраторов.
Готово!
На этом наша простенькая система регистрации готова! Вы можете использовать ее на уже существующем PHP-сайте, либо модернизировать ее, придерживаясь собственных требований.
Предлагаю вашему вниманию очень простой и функциональный скрипт регистрации и авторизации на сайте , который состоит из 3-ёх файлах PHP с подключением 2-ух java скриптов, с помощью которых ошибки выводятся в самой форме без перезагрузки страницы.
Скрипт был успешно протестирован на версии PHP 5.3.3 и PHP 5.6.3 .
Что умеет и имеет скрипт
Там же DEMO и Админ Панели
2 ШАГ .Переходим (если используете DENWER) по адресу: http://localhost/Tools/phpmyadmin/ , если на хостинге, то нажимаете Базы Данных, и создаёте новую базу с именем: registr и сравнение: utf8_general_ci .Вы можете задать разумеется своё имя, но тогда замените его обязательно в файлах для соединения с базой (см. шаг 1).
3 ШАГ .Нажмите на созданную базу registr и затем на верхнюю вкладку SQL и в появившееся окно для ввода вставьте этот код и нажмите ОК. CREATE TABLE IF NOT EXISTS `my_users` (`id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `names` varchar(15) NOT NULL, `password` varchar(255) NOT NULL, `salt` varchar(100) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; Всё! Переходите в браузере по своему адресу, пробуйте и экспериментируйте.
Админ Панель
После того, как вы сделали хоть одну регистрацию, можете перейти в АДМИНКУ.Вход в АДМИН-ПАНЕЛЬ :
http://Ваш_сайт.ru/adminka/
Не забудьте запоролить эту папку для безопасности и можно так же переименовать её.При открытие Админ Панели нажмите кнопку ПОИСК и вам отобразятся все зарегистрированные пользователи, где при нажатие на определённый номер ID , вам откроются данные пользователя для редактирования.
Можно так же быстро найти пользователя по его E-mail, для этого достаточно ввести в поле для ПОИСКа известную электронную почту и нажать на кнопку.Кнопкой ДОБАВИТЬ не советую пользоваться, так как пользователь добавляется в систему без пароля. И не имею понятия зачем её вообще сделали.
На этом всё, что не получается или не понятно, - задавайте вопросы.
Попутно можете попробовать