Username
Password
Confirm Password Make sure to type the same password
SignUp Смотрим результат Форма регистрации: После успешного входа пользователя: После неверного входа пользователя: Источник
В этой короткой заметке я поделюсь с Вами отличной контактной формой, которую можно за несколько минут установить на любой сайт.
Данная форма использует технологии PHP\MySQL в связке с jQuery. Обычно контактные формы после отправки доставляют письма на почту владельцу. Данная же форма, кроме своей прямой обязанности, также сохраняет все в базу данных. Таким образом можно легко отслеживать все письма.
Таблица для хранения писем имеет следующий вид:
CREATE TABLE CONTACT( pk_contact INT UNSIGNED NOT NULL auto_increment, name VARCHAR(120) NOT NULL, email VARCHAR(120) NOT NULL, website VARCHAR(120) NOT NULL DEFAULT "", message VARCHAR(300) NOT NULL, added_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, primary key(pk_contact) )type=innodb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Мы будем вносить в БД имя, емейл, вебсайт (по желанию), сообщение и дату отправки. Можете легко изменить ограничения полей для своих потребностей, но не забудьте их также изменить в PHP файлах.
Мы используем jQuery для фронт-енда формы и AJAX для ее отправки. Все проверки данных производятся на стороне сервера, и пользователь будет проинформирован в случае ошибки. Если сообщение добавлено в БД, тогда отправляется сообщение админу, которое оповещает его о новом письме.
В исходниках и демо версии Вы сможете найти два разных варианты таблиц стилей формы. Выбирайте ту, которая больше подходит под Ваш сайт, или же создайте новое оформление.
Все что от Вас требуется при установке это: 1) выполнить SQL запрос из файла db_main_script.sql в созданной БД, 2) настроить связь с БД в файле config.php:
define('DB_SERVER', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_NAME', 'ContactForm');
А также, в том же файле, не забудьте настроить адрес почтового ящика и УРЛ сайта:
define('EMAIL_TO' , 'codrops@gmail.com'); /* Ваш email */ define('EMAIL_FROM_NAME' , 'codrops'); /* имя - от кого пришло письмо */ define('EMAIL_FROM_ADDR' , 'www.tympanus.net'); /* УРЛ от кого пришло */ define('MESSAGE_SUBJECT' , 'New Message From Contact Form'); /* тема сообщения */ define('SEND_EMAIL' , true); /* если true, email сообщает админу о новом сообщении */
Для всех читателей — задание на дом 🙂 Попробуйте создать админку для удобного просмотра всех сообщений, которые хранятся в БД. Таким образом Вам не надо будет каждый раз заходить в phpMyAdmin для просмотра сообщений, при условии, что под рукой не будет доступа в Ваш почтовый ящик (что, конечно, маловероятно :)). Но все же, я думаю, что для начинающих программистов это будет интересный вызов!
Всем удачи! До следующих статей и уроков!
Данный урок подготовлен для вас командой сайта ruseller.com Источник урока: www.tympanus.com Перевел: Максим Шкурупий Урок создан: 19 Марта 2010 Просмотров: 47617 Правила перепечатки
5 последних уроков рубрики «Разное» Как выбрать хороший хостинг для своего сайта? Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.
Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.
Разработка веб-сайтов с помощью онлайн платформы Wrike Создание вебсайта — процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.
Источник
Безопасный метод авторизации на PHP Давайте посмотрим вокруг: форумы, интернет магазины, гостевые книги и т.д. используют регистрацию и последующую авторизацию пользователей. Можно даже сказать, что это почти необходимая функция каждого сайта (только если это не домашняя страничка Васи Пупкина или не визитная карточка, какой-нибудь небольшой компании). Сегодня я хочу поделиться со всеми новичками информацией, о том, как лучше это все реализовать.
Модель авторизации: Клиент Сервер MySQL Таблица users user_id (int(11)) user_login (Varchar(30)) user_password (varchar(32)) user_hash (varchar(32)) user_ip (int(10)) по умолчанию 0
При регистрации в базу данных записывается логин пользователя и пароль(в двойном md5 шифровании).
При авторизации сравнивается логин и пароль, если они верны, то генерируется случайная строка, которая хешируется и добавляется в БД в строку user_hash. Также записывается IP-адрес пользователя (но это у нас будет опциональным, так как кто-то сидит через Proxy, а у кого-то IP динамический. тут уже пользователь сам будет выбирать безопасность или удобство). В куки пользователя мы записываем его уникальный индетификатор и сгенерированный hash.
Почему надо хранить в куках хеш случайно сгенерированной строки, а не хеш пароля?
Из-за невнимательности программиста во всей системе могут быть дырки, воспользовавшись этими дырками, злоумышленик может вытащить хеш пароля из БД и подставить его в свои куки, тем самым получить доступ к закрытым данным. В нашем же случае двойной хеш пароля ничем не сможет помочь хакеру, так как расшифровать его он не сможет (теоретически это возможно, но на это он потратит не один месяц, а может быть, и год), а воспользоваться этим хешем ему негде, ведь у нас при авторизации свой уникальный хеш прикрепленный к IP пользователя. Если злоумышленик вытащит трояном у пользователя уникальный хеш, воспользоваться им он также не сможет (разве, если только пользователь решил пренебречь своей безопастностью и выключил привязку к IP при авторизации). Реализация Структура таблицы `users` в базе данных ‘testtable’ CREATE TABLE `users` ( `user_id` int(11) unsigned NOT NULL auto_increment, `user_login` varchar(30) NOT NULL, `user_password` varchar(32) NOT NULL, `user_hash` varchar(32) NOT NULL default '', `user_ip` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
register.php
if(strlen($_POST[‘login’]) < 3 or strlen($_POST['login']) >30) < $err[] = "Логин должен быть не меньше 3-х символов и не больше 30"; >// проверяем, не сущестует ли пользователя с таким именем $query = mysqli_query($link, «SELECT user_id FROM users WHERE user_login='».mysqli_real_escape_string($link, $_POST[‘login’]).»‘»); if(mysqli_num_rows($query) > 0) < $err[] = "Пользователь с таким логином уже существует в базе данных"; >// Если нет ошибок, то добавляем в БД нового пользователя if(count($err) == 0) < $login = $_POST['login']; // Убераем лишние пробелы и делаем двойное хеширование $password = md5(md5(trim($_POST['password']))); mysqli_query($link,"INSERT INTO users SET user_login='".$login."', user_password='".$password."'"); header("Location: login.php"); exit(); >else < print "При регистрации произошли следующие ошибки: «; foreach($err AS $error) < print $error." «; > > > ?> Логин Пароль return $code; > // Соединямся с БД $link=mysqli_connect(«localhost», «mysql_user», «mysql_password», «testtable»); if(isset($_POST[‘submit’])) < // Вытаскиваем из БД запись, у которой логин равняеться введенному $query = mysqli_query($link,"SELECT user_id, user_password FROM users WHERE user_login='".mysqli_real_escape_string($link,$_POST['login'])."' LIMIT 1"); $data = mysqli_fetch_assoc($query); // Сравниваем пароли if($data['user_password'] === md5(md5($_POST['password']))) < // Генерируем случайное число и шифруем его $hash = md5(generateCode(10)); if(!empty($_POST['not_attach_ip'])) < // Если пользователя выбрал привязку к IP // Переводим IP в строку $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')"; >// Записываем в БД новый хеш авторизации и IP mysqli_query($link, «UPDATE users SET user_hash='».$hash.»‘ «.$insip.» WHERE user_id='».$data[‘user_id’].»‘»); // Ставим куки setcookie(«id», $data[‘user_id’], time()+60*60*24*30, «/»); setcookie(«hash», $hash, time()+60*60*24*30, «/», null, null, true); // httponly . // Переадресовываем браузер на страницу проверки нашего скрипта header(«Location: check.php»); exit(); > else < print "Вы ввели неправильный логин/пароль"; >> ?> Логин Пароль Не прикреплять к IP (небезопасно) Логин Пароль Не прикреплять к IP(не безопасно)
Для защиты формы логина от перебора, можно использовать капчу или временную задержку на повторную авторизацию.
Автор: http://jiexaspb.habrahabr.ru/. Адаптация под PHP 5.5 и MySQL 5.7 KDG.
Куки с флагом HttpOnly не видны браузерному javascript-коду, а отправляются только на сервер. На практике у вас никогда не будет необходимости получать их содержимое в javascript. А вот злоумышленнику, нашедшему XSS – а XSS так или иначе когда-нибудь где-нибудь найдется – отсутствие HttpOnly на авторизационных куках доставит много радости.
Другие примеры авторизации на PHP:
Источник