Создание регистрации. Часть 2
Среда, 25 августа 2010 г.Рубрика: PHP программирование -> Готовые решения
Метки: php | создание регистрации
Просмотров: 1120
Подписаться на комментарии по RSS
С прошлого урока у нас должно быть создано 3 файла:
reg.php reg_scr.php endreg.php
Теперь мы создадим форму входа, страницу редактирования данных пользователя и восстановление пароля.
Для начала создадим главную страницу с формой входа и ссылкой на регистрацию - index.php:
<tt> <form action="entry.php" method="post"> Имя<br /> <input type="text" name="login"/><br /><br /> Пароль<br /> <input type="password" name="pass"/><br /><br /> <input type="submit" name="submit" value="вход"/>/<a href="reg.php">Регистрация</a><br /><br /> <a href="ntpass.php">Забыли пароль</a> </form> </tt>
Теперь создадим обработчик для входа. И для входа будем использовать сессии:
И ещё нужно будет во все файлы, кроме регистрации, в самом начале прописывать старт сессии - session_start();
Обработаем переданные из формы,
Полученный пароль обработаем в функцие md5 и сверим с паролями в базе,
Создадим сессию,
Занесём в неё id и имя пользователя,
Переадресуем на главную страницу:
<?php
/*
* Стартуем сессию
*/
session_start();
/*
* Подключаемся к базе
*/
$db = mysql_connect ( "localhost", "root", "" );
mysql_select_db ( "mybase", $db );
/*
* Обрабатываем переданное имя
*/
if(isset($_POST["login"])and($_POST["login"]!=='')){
$name=$_POST["login"];
$name=trim($name);
$name=stripslashes($name);
$name=htmlspecialchars($name);
}else{
die("Вы не ввели имя");
}
/*
* Обрабатываем переданный пароль
*/
if(isset($_POST["pass"])and($_POST["pass"]!=='')){
$pass=$_POST["pass"];
$pass=trim($pass);
$pass=stripslashes($pass);
$pass=htmlspecialchars($pass);
$pass=md5($pass);
}else{
die("Вы не ввели пароль");
}
/*
* Вытаскиваем всё из базы об этом пользователе
*/
$result=mysql_query("SELECT * FROM users WHERE name='$name'", $db);
$myrow=mysql_fetch_array($result);
/*
* Если такой пользователь есть, то проверяем пароли
*/
if(!empty($myrow["id"])){
if($pass=$myrow["pass"]){
$_SESSION["id"]=$myrow["id"];
$_SESSION["name"]=$myrow["name"];
echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
}else{
die("Вы ввели не верный пароль");
}
}else{
die("Вы ввели не верные данные");
}
Всё что хотим записать в сессию, записываем в глобальный массив $_SESSION.
Теперь
не много изменим наш файл index.php - добавим в начало старт сессии и
если мы вошли, то будет приветствие и ссылка на выход, а если нет, то
форма входа.
<?php
session_start();
if(isset($_SESSION["id"])and($_SESSION["id"]!=='')){
echo "Привет, ".$_SESSION["name"]."<br /><br /><tt><a href='exit.php'>Выйти</a></tt>";
}else{
echo "<tt>
<form action='entry.php' method='post'>
Имя<br />
<input type='text' name='login'/><br /><br />
Пароль<br />
<input type='password' name='pass'/><br /><br />
<input type='submit' name='submit' value='вход'/>/<a href='reg.php'>Регистрация</a><br /><br />
<a href='ntpass.php'>Забыли пароль</a>
</form>
</tt>";
}
Мы
проверели есть ли сессия с id, и если есть, то вывели приветствие и
ссылку выйти, а если нет, то форму входа. И не забыли запустить сессии
в начале кода.
Теперь создадим страницу восстановления пароля,
только у нас все пароли шифруются, и восстановить их невозможно, но
можно создать новый:
<form action='ntpass_scr.php' method='post'> Имя<br /> <input type='text' name='login'/><br /><br /> E-mail<br /> <input type='text' name='email'/><br /><br /> <input type='submit' name='submit' value='отправить'/> </form>
Теперь создадим обработчик для формы:
<?php
/*
* Подключаемся к базе
*/
$db = mysql_connect ( "localhost", "root", "" );
mysql_select_db ( "mybase", $db );
/*
* Обрабатываем переданное имя
*/
if(isset($_POST["login"])and($_POST["login"]!=='')){
$login=$_POST["login"];
$login=trim($login);
$login=stripslashes($login);
$login=htmlspecialchars($login);
}else{
die("Вы не ввели имя");
}
/*
* Обрабатываем переданный email
*/
if(isset($_POST["email"])and($_POST["email"]!=='')){
$email=$_POST["email"];
$email=trim($email);
$email=stripslashes($email);
$email=htmlspecialchars($email);
if(!preg_match('/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i', $email)){
die("E-mail введён не корректно");
}
}else{
die("Вы не ввели e-mail");
}
/*
* Вытаскиваем всё из базы о пользователе с указанным именем и паролём
*/
$result=mysql_query("SELECT * FROM users WHERE name='$login'", $db);
$myrow=mysql_fetch_array($result);
/*
* Если пользователь с такими данными есть, то отправляем письмо
*/
if(!empty($myrow["id"])){
/*
* Создаём код, для подтверждения восстановления пароля
*/
$id=$myrow["id"];
$activation=md5($id).md5($login);
/*
* Пишем тему письма
*/
$subject="Восстановление пароля на сайте";
/*
* Пишем письмо
*/
$message="Ваше имя - ".$login." \r\n Ваш email - ".$email." \r\n Для создания нового пароля для Вашего аккаунта перейдите по этой ссылке: \r\n http://site.ru/newpass.php?id=".$id."&&code=".$activation;
/*
* Отправляем письмо
*/
mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");
echo "Вам на email было выслано письмо с ссылкой на создание нового пароля";
}else{
die("Не верно введены email или пароль");
}
Теперь создадим файл, который будет принимать GET данные из адресной строки:
<?php
/*
* Подключаемся к базе
*/
$db = mysql_connect ( "localhost", "root", "" );
mysql_select_db ( "mybase", $db );
/**
* Если пользователь ввёл новый пароль, то обновляем его в базе
*/
if(isset($_POST["newpass"])and($_POST["newpass"]!=='')){
$id2=$_POST["newpass"];
$sel_res=mysql_query("SELECT * FROM users WHERE id='$id2'",$db);
$sel_row=mysql_fetch_array($sel_res);
if(isset($_POST["npass"])and($_POST["npass"]!=='')){
$npass=$_POST["npass"];
$npass=trim($npass);
$npass=stripslashes($npass);
$npass=htmlspecialchars($npass);
$savepass=$npass;
$npass=md5($npass);
}else{
die("Вы не ввели пароль");
}
if(isset($_POST["npass2"])and($_POST["npass2"]!=='')){
$npass2=$_POST["npass2"];
$npass2=trim($npass2);
$npass2=stripslashes($npass2);
$npass2=htmlspecialchars($npass2);
$npass2=md5($npass2);
}else{
die("Вы не подтвердили пароль");
}
if($npass!==$npass2){
die("Введённые пароли не совпадают");
}
if($_POST["newpass"]!==''){
$update=mysql_query("UPDATE users SET pass='$npass' WHERE id='$id2'", $db);
if($update=='true'){
/**
* Присваиваем переменной адрес электронной почты пользователя, которуму создали новый пароль
*/
$email=$sel_row["email"];
/**
* Пишем тему письма
*/
$subject="Новые данные Вашего аккаунта на сайте";
/**
* Пишем письмо
*/
$message="По Вашему запросу, и выполнеными Вами действиями, у Вашего аккаунта был создан новый пароль! \r\n Новые данные Вашего аккаунта: \r\n Имя - ".$sel_row["name"]." \r\n Пароль - ".$savepass." \r\n E-mail - ".$email." \r\n И помните, что заново данные аккаунта на сайте получить не удатся!";
/**
* Отправляем письмо
*/
mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");
/**
* Выводим сообщение о том, что на почту было отправлено письмо с новыми данными аккаунта
*/
echo "Вам на email было отправлено письмо с новыми данными Вашего аккаунта, в том числе и новый пароль.";
}else{
die("Добавить новый пароль не удаётся");
}
}else{
die("Вы перешли на страницу с не верными параметрами");
}
}else{
/**
* Делаем обработку переданного через GET id
*/
if(isset($_GET["id"])and($_GET["id"]!=='')){
$id=$_GET["id"];
$id=trim($id);
$id=stripslashes($id);
$id=htmlspecialchars($id);
}else{
die("Вы перешли на страницу без параметров");
}
/**
* Делаем обработку переданного через GET code
*/
if(isset($_GET["code"])and($_GET["code"]!=='')){
$code=$_GET["code"];
$code=trim($code);
$code=stripslashes($code);
$code=htmlspecialchars($code);
}else{
die("Вы перешли на страницу без параметров");
}
/**
* Вытаскиваем всё о пользователе с переданным id
*/
$result=mysql_query("SELECT * FROM users WHERE id='$id'", $db);
$myrow=mysql_fetch_array($result);
/**
* Если такой пользователь существует, то выводим форму для создания нового пароля
*/
if(!empty($myrow["id"])){
echo "<form action='newpass.php' method='post'>
Новый пароль<br />
<input type='password' name='npass'/><br /><br />
Подтверждение пароля<br />
<input type='password' name='npass2'/><br /><br />
<input type='hidden' name='newpass' value='$id'/>
<input type='submit' name='submit' value='отправить'/>
</form>";
}else{
die("Пользователя с такими данными нет");
}
}
И для выхода из профиля создадим страницу exit.php, которая будет удалять данные из сессии:
<?php /** * Запускаем сессию */ session_start(); /** * Удаляем данные из сессии */ unset($_SESSION["name"]); unset($_SESSION["id"]); /** * Делаем редирект на главную страницу */ echo "<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>";
На этом наша регистрация готова.


капец, думал не найду не когда)))спасибо
правильное подключение бд
/* Конфигурация базы данных */
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_database = 'mysql';
/* Конец секции */
$link = mysql_connect($db_host,$db_user,$db_pass) or die('Невозможно установить соединение с базой данных');
mysql_select_db($db_database,$link);
mysql_query("SET names UTF8");