Пишем систему пользователей сайта на PHP. Часть 4. Функция восстановления паролей
7 сентября 2008 | KalimdorВообщем полезная опция для пользовательской системы, ведь ни для кого не секрет, что юзер на сайте существо забывчивое
и зачастую свой пароль он не помнит. Именно поэтому функция восстановления пароля на сайте нужна. На этот раз код будет оформлен в виде функции. Где и в каком месте её применить, решать вам
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?php // Функция восстановления пароля, в качестве аргументов принимает почтовый ящик дескриптор соединения с базой данных, название сайта и мыло отправителя и возвращает true, если операция восстановления пароля прошла успешно, false в противном случае function restoration_password ($email, $dbdeskriptor, $site_name, $adm_mail) { // Проверим валидность мыла if(!preg_match("/^[dw-_.]+@[dw-.]+.[w]{2,4}/i",$email)) { mysql_close ($dbdeskriptor); echo "Некорректно введён e-mail адрес"; return false; } // Составим запрос к базе данных $query_select = "SELECT `login`,`pass` FROM `user` WHERE mail="$email""; // Проведём запрос к базе данных $ath = mysql_query ($query_select, $dbdeskriptor); // Проверим успешность запроса if (!$ath) { mysql_close ($dbdeskriptor); echo "Ошибка базы данных"; return false; } // Извлечём результаты запроса $result = mysql_fetch_assoc ($ath); // Проверим на NULL результат запроса if (isset ($result ['user'])) { mysql_close ($dbdeskriptor); include "Такого e-mail в базе нет!"; return false; } // Если пользователь существует, сгенерируем для него новый пароль, состоящий из 6 знаков $simvols = array ("0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); for ($key = 0; $key < 6; $key++) { shuffle ($simvols); $string = $string.$simvols[1]; } // Найдём хеш пароля $pass = md5 ($string); // Составим запрос к базе данных $query_update = "UPDATE user SET pass = "$pass" WHERE mail="$email""; // Проведём запрос $ath = mysql_query ($query_update, $dbdeskriptor); // Проверим результат запроса if (!$ath) { mysql_close ($dbdeskriptor); echo "Ошибка базы данных"; return false; } // Вышлем письмо с логином и новым паролем пользователю $ath = mail ("$email", "Восстановление пароля на сайте {$site_name}", "Вы запросили восстановление логина и/или пароля на сайте {$site_name}. Ваш логин и новый пароль:n Логин: {$result['login']}n Пароль: {$string}", "From: amin <{$adm_mail}>"); // Проверим успешность отправки if (!$ath) { include "Ошибка при отправке письма"; return false; } echo "Пароль восстановлен"; return true; } ?> |
Ну собственно всё, ничего сложно в функции нет.
____________________________________________
Постовый.
Обзор блогосферы от Virtual-lab.
Рецепт заработка от Спрута.
А здесь можно выйграть iPhone
.
Похожие записи:
11
Пишем систему пользователей сайта на PHP. Часть 3. Пишем залогинивание пользователей
2 сентября 2008 | KalimdorС этим постом я припозднился, но лучше поздно, чем никогда
. Теперь перейдём к делу. Сначала код формы для отправки данных. Его можно будет вставить в любое нужное вам место на сайте. И так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <html> <head> <title>Вход для пользователя</title> </head> <body> <table> <tr><td> <form action= "login.php" method="post"> Логин: <input type = "text" name = "login"> Пароль: <input type = "text" name = "pass"> <input type = "checkbox" name = "zap" value= "yes"> Запомнить <input type = "submit" value = "Вход"> </form> </td></tr> </table> </body> </html> |
При вставке в php-код и выводе через функцию echo () не забывайте экранировать кавычки обратным слешем (). Обрабатывает входящие данные файл login.php. Структура таблицы пользователей была описана в предыдущем посте.
Теперь код самого login.php (код прокомментирован):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?php // Здесь введите адрес своего сайта, он используется для ограничения доступа по URL к кукам $host = "www.panel.demo.ru"; // Получим входные данные $login = $_POST ['login']; $pass = $_POST ['pass']; $zap = $_POST['zap']; // Проверим входящие данные // Проверка вводимых данных на корректность if(!preg_match("/[A-Za-z0-9]/",$login)) { include "error.php"; // Здесь и далее можно поставить урл на свою страницу ошибки exit(); } if(!preg_match("/[A-Za-z0-9]/",$pass)) { include "error.php"; exit(); } if(!($zap == "yes") && !($zap =="")) { include "error.php"; exit (); } // Найдём хеш пароля $pass = md5 ($pass); // Найдём пользователя с введённым логином // Составим запрос $query = "SELECT `user`,`pass` FROM `user` WHERE login = "$login""; // Приконнектимся к БД include "config.php"; // Произведём запрос $ath = mysql_query ($query, $dbdeskriptor); // Проверим выполненость запроса if (!$ath) { mysql_close ($dbdeskriptor); include "error.php"; exit (); } // Извлечём результаты запроса $result = mysql_fetch_assoc ($ath); // Проверим наличие логина if (!isset($result ['login'])) { mysql_close ($dbdeskriptor); include "error.php"; exit (); } // Если логин есть проверим правильность пароля if (!($pass == $result ['pass'])) { mysql_close ($dbdeskriptor); include "error.php"; exit (); } // Если пароль правильный, то производим запись в куки в зависимости от того, будет запоминание пользователя или нет if ($zap == "yes") { setcookie ("l","$login", time () + 172800, "/", $host); setcookie ("p","$pass", time () + 172800, "/", $host); } else { setcookie ("l","$login", 0, "/", $host); setcookie ("p","$pass", 0, "/", $host); } // Выводим сообщение об успешности залогинивания echo "Логин и пароль приняты системой"; ?> |
Вместо простого вывода сообщения об успешности залогинивания, можно сделать вывод сообщения с редиректом на прошлую страницу. Если интересно как это сделать — отпишите в комментариях, в следующем посте опубликую решение. На сегодня пока всё.
____________________________________________________________________
Постовый.
Полубомж написал на тему паления тем. Достаточно давно я тоже писал на эту тему.
Бесколёсный вернулся!. Жду новых интересных постов от него.
__________________________________________________________
P.S.
Съездил на Московский автосалон Мотор Экспо 2008. Выставка проходила в Крокус Экспо и была просто шикарной. Самые лучшие стенды имхо были у Ауди, Мерседеса и БМВ. Во многом благодаря большой концентрации отличных тачек на квадратный метр стенда. Думаю не стоит объяснять, почему на их стендах было очень много народу
. Даже машину себе выбрал. По соотношению цена/качество/стиль/мощность/практичность мне понравился Mitsubishi Lancer Evolution X. Думаю начать копить на неё
. Не, ну правда красавица:

Похожие записи:
3
Пишем систему пользователей сайта на PHP. Часть 2. Пишем регистрацию пользователей
20 августа 2008 | KalimdorРазглагольствовать что да как у меня сделано не буду, код очень хорошо прокомментрован буквально по действиям.
Сначала форма с полями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <html> <head> <title>Регистрация нового пользователя</title> </head> <body> <table> <tr><td> <form action = "reg_end.php" method = "post"> Введите, пожалуйста, желаемый логин:</td><td> <input type = "text" name = "login"> </td></tr> <tr><td> Введите свой пароль<br /></td><td><input type = "password" name = "pass"> </td></tr> <tr><td> Повторите свой пароль:</td><td><input type = "password" name = "second_pass"> </td></tr> <tr><td> Введите свой e-mail:</td><td><input type = "text" name = "email"> </td></tr> <tr><td> <input type = "submit" value = "Зарегистрироваться"> </form> </td></tr> </table> </body> </html> |
В таблице юзеров у нас 4 поля — id_user, login, pass, mail. Пароли шифруются с помощью алгоритма необратимого шифрования md5. Теперь код самого обработчика:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <?php // Приём данных из формы $login = $_POST['login']; $pass = $_POST['pass']; $second_pass = $_POST['second_pass']; $email = $_POST['email']; // Проверка вводимых данных на корректность if(!preg_match("/^[A-Za-z0-9]+$/",$login)) { include "regerror.php";// Здесь можно поставить адрес любой страницы с сообщением об ошибке. Аналогично со всеми инклюдами в проверке данных и их соответствии. exit(); } if(!preg_match("/^[A-Za-z0-9]+$/",$pass)) { include "regerror.php"; exit(); } if(!preg_match("/^[A-Za-z0-9]+$/",$second_pass)) { include "regerror.php"; exit(); } if(!preg_match("/^[dw-_.]+@[dw-.]+.[w]{2,4}/i",$email)) { include "regerror.php"; exit(); } // Проверяем соответствие пароля и его копии if (!$pass == $second_pass) { include "regerror.php"; exit (); } // Проверим занятость логина и мыла в скрипте // Коннектимся к базе данных include "config.php"; // Формируем запрос $query_login = "SELECT `user`,`mail` FROM `user` WHERE login = "$login" OR mail = "email";"; // Делаем запрос к БД $ath = mysql_query ($query_login, $dbdeskriptor); // Проверяем успешность запроса if (!$ath) { include "dberror.php"; // При проверке успешности запроса указывайте свой адрес файла с сообщением об ошибке mysql_close ($dbdeskriptor); exit (); } // Извлекаем результаты запроса $result = mysql_fetch_assoc ($ath); // Проверяем свободность if (isset ($result ['user'])) { include "regerror.php"; mysql_close ($dbdeskriptor); exit (); } // Если всё нормально, заносим данные в базу данных // Сформируем данные $pass = md5 ($pass); // Сформируем запрос $query_insert = "INSERT INTO user VALUES (0,'$login','$pass','$email');"; // Проведём запрос к БД $ath = mysql_query ($query_insert, $dbdeskriptor); // Проверим успешность запроса if (!$ath) { include "dberror.php"; mysql_close ($dbdeskriptor); exit (); } // Закроем соединение с БД mysql_close ($dbdeskriptor); // Выведем сообщение об успешной регистрации echo "Регистрация прошла успешно"; ?> |
Файл подключения базы данных (config.php):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $dblocation = "localhost"; // Введите имя хоста сервера баз данных MySQL $dbuser = ""; // Введите имя вашего пользователя БД MySQL $dbpass = ""; // Ввелите пароль вашего пользователя БД MySQL $dbname = ""; // Введите имя БД MySQL, предназначенной для скрипта // Соединение с БД $dbdeskriptor = @mysql_connect($dblocation,$dbuser,$dbpass); if (!$dbdeskriptor) // Проверяем соединение с сервером БД { include "dberror.php"; exit(); } // Подключается к базе данных $db_select = mysql_select_db($dbname,$dbdeskriptor); if (!$db_select) // Проверяем соединение с нужной БД { include "dberror.php"; exit(); } ?> |
Далее во всех скриптах, использующих БД для подключения будет использоваться этот файл.
На сегодня пока всё
.
Похожие записи:
13
Пишем систему пользователей сайта на PHP. Часть 1. Составляем проект
17 августа 2008 | KalimdorСистема пользователей необходима на многих сайтах, поэтому я решил написать серию постов на эту тему. Процесс написания будет разбит на части, в каждой будет описываться процесс написания одного из компонентов системы. Эта часть — первая, здесь будет описана будущая пользовательская система.
И так, что моя система будеn иметь:
- Регистрирация пользователей
- Выполнение входа пользователей
- Выполние выхода пользователей
- Выполнение проверки, перед выводом содержимого для конкретного пользователя
- Личный кабинет
- Вывод профайла пользователя
- Система администрирования
Теперь разберём каждую часть в отдельности.
Регистрации пользователей
Данный модуль представляет из себя страничку с полями, где пользователь должен заполнить все необходимые поля и нажать кнопку регистрации. Что должен уметь данный компонент:
- Проверять входящие от пользователя данные на корректность, чтобы в скрипт не пропихнули чего-нибудь опасного
- Уметь выводить капчу при регистрации для защиты от ботов
- Проверять занятость логина и e-mail
- Отправлять письмо для подтверждения регистрации
Вход пользователя
По сути — два классических поля логин/пароль. Данный модуль должен уметь:
- Проверять входящие данные (безопасность, безопасность и ещё раз безопасность)
- Проверять наличие логина в базе данных и при его присутствии проверить пароль
- Если логин и пароль верны записывать данные в куки
Выход пользователя
Тут всё просто. Пользователь нажимает кнопку выход и скрипт удаляет пользовательские куки.
Выполнение проверки при выводе приватного содержимого
В данном случае это будет просто функция проверки кук на корректность, которую надо будет подключать там где нужно. Принцип действия такой же как и при авторизации, за исключением того, что данные берутся из кук.
Личный кабинет
Тут пользователь может редактировать данные профайла. Ничего сложного тут нет.
Профайл
Тут будет выводиться информация профайла пользователя. Профайл можно сделать как открытый, так и закрытый. Я рассмотрю различные вариации открытого и закрытого профайла.
Система администрирования
Тут будет три инструмента:
- Вывод списка пользователей
- Возможность редактировать профайлы пользователей
- Возможность удалять пользователей
Вот и всё описание продукта. Теперь его осталось сделать
.
Похожие записи:
9