Создание регистрации. Часть 2

Среда, 25 августа 2010 г.
Рубрика: 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>";

На этом наша регистрация готова.

Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 2
  1. капец, думал не найду не когда)))спасибо

  2. 2012-05-05 в 00:23:26 | василий

    правильное подключение бд

    /* Конфигурация базы данных */

    $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");

Оставьте свой комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)