Уважаемые читатели сайта Ajaxs.ru

Очень рад что вы зашли на мой сайт. Надеюсь, Вы сможете найти здесь для себя полезную информацию. Зарегистрировавшись на сайте вы получаете ряд преимуществ:
1. При комментировании Вам не нужно вводить имя и капчу с картинки
2. Вы можете получать уведомления на Email к интерисующим вас урокам
3. Вы можете редактировать свои комментарии

Вход на сайт


Забыли пароль



Восстановление пароля


Войти на сайт

Зарегистрироваться

Главная / Уроки по PHP / Просмотр урока

     

Создание сайтов


Вам нужен небольшой сайт или просто хотите доработать уже существующий? | Подробнее

Активация зарегистрированных пользователей по E-mail

В этом уроке мы будем совершенствовать наш скрипт регистрации, который мы создавали с нуля и который подробно описан в уроке Создание регистрации пользователей на сайте. Для того чтобы на сайте не регистрировались все подряд кому не лень мы добавим активацию пользователей по E-mail. Сразу после регистрации на почту будет высылаться письмо с ссылкой для подтверждения, и только после перехода по ней пользователь сможет войти на сайт.
Для этого нам понадобится добавить одно поле в базу данных в таблицу users:

Пример

Это поле activation с типом int(1), которое будет принимать значения 0 – не активирован, или 1 – активирован. По умолчанию в этом поле будет 0 и после того как пользователь подтвердит по ссылке в письме что это он, оно изменит значение на 1. Для этого в файле verification.php добавим функцию отправки письма

$activ = mysql_query("SELECT id FROM users WHERE login='$login'");
$id_activ = mysql_fetch_array($activ);
$activation = md5($id_activ['id']);
$subject = "Подтверждение регистрации";
$message = "Здравствуйте! Спасибо за регистрацию на сайте www.MySite.ru\nВаш логин: ".$login."\n Для того чтобы войти в свой аккуант его нужно активировать.\n
Чтобы активировать ваш аккаунт, перейдите по ссылке:\n
http://www.MySite.ru/activation.php?login=".
$login."&act=".$activation."\n\n
С уважением, Администрация сайта www.MySite.ru"
;//содержание сообщение
mail($email, $subject, $message, "Content-type:text/plain; Charset=windows-1251\r\n");

echo "На Ваш E-mail выслано письмо с cсылкой, для активации вашего аккуанта. <a href='index.php'>Главная страница</a></p>";

В этом коде мы достали id только что зарегистрированного пользователя и зашифровав в md5 отправили в ссылке по E-mail. Теперь пользователь перейдя по этой ссылке попадает на страницу activation.php, на которой будет сравниваться генерированный id и id полученный в письме.

<?php
include("bd.php");
if(isset($_GET['act']) AND isset($_GET['login'])) {
$act = $_GET['act'];
$act = stripslashes($act);
$act = htmlspecialchars($act);

$login = $_GET['login'];
$login = stripslashes($login);
$login = htmlspecialchars($login);
}
else{
exit("Вы зашил на страницу без кода подтверждения!");
}
 
$activ = mysql_query("SELECT id FROM users WHERE login='$login'"); //извлекаем идентификатор пользователя с данным логином
$id_activ = mysql_fetch_array($activ);
$activation = md5($id_activ['id']);
if ($activation == $act) {//сравниваем полученный из url и сгенерированный код
mysql_query("UPDATE users SET activation='1' WHERE login='$login'");
echo "Ваш аккуант <strong>".$login."</strong> успешно активирован! Теперь вы можете зайти на сайт под своим логином и паролем!<br><a href='index.php'>Главная страница</a>";
}
else {
echo "Ошибка! Ваш аккуант не активирован. Обратитесь к администратору.<br><a href='index.php'>Главная страница</a>";
}
?>

Если id совпадают, то мы в поле activation ставим 1, что означает подтверждение регистрации. Отлично теперь нужно немного изменить код страницы входа, чтобы входить могли только активированные пользователи. Для этого в файле login.php исправим строку

$user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'");

На

$user = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'");

Автор: Евгений Бочкарев Урок добавлен: 13 Октября 2010 в 19:05 Просмотров: 45968

Условия копирования материалов сайта

Все комментарии

Посмотреть предыдущие комментарии (26)

#27 Алексей 16-09-2012 в 01:06
Не отправляется письмо когда в тексте присутствует http://, без этого протокола все отправляет, а с ним выскакивает ошибка. "Исключение неизвестное программное исключение (0x0eedfade) в приложение по адресу 0x7c812aeb." В чем может быть проблема, я работаю на локальном хосте и у меня настроена почтовая программа sendmail.
#28 Guesto 04-07-2013 в 00:21
$act = (int)$_GET['act'];

(int) - минимальная защита от инъекций...
#29 Casper 25-11-2013 в 08:16
Извините за вопрос , вот у меня нету Домена на сайте, а вход на сайт по ip это может как - то повлиять на отправление почты ?
#30 qiwi 25-11-2013 в 11:59
Письмо не приходит :(
#31 Таня 26-12-2013 в 13:42
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\localhost\www\reg2\verification.php:1) in Z:\home\localhost\www\reg2\bd.php on line 2
Вы успешно зарегистрировались! Вы успешно зарегистрировались!
На главнуюНа Ваш E-mail выслано письмо с cсылкой, для активации вашего аккуанта. Главная страница

У меня такая ошибка. Что посмотреть?
#32 alex-strigin76 22-05-2014 в 20:13
Люди, подскажите плиз, после чего нужно вставлять код в файле verification.php? Админ допиши пожалуйста....
#33 Серый 27-06-2014 в 01:52
Все четко спс ))).
#34 Илья 25-01-2015 в 02:25
Всё сделал как описано, но в письме на мыло приходит зашифрованная пустая строка,подскажите , почему?
#35 Canja 22-03-2016 в 13:39
Хорошее руководство для новичков
#36 Canny 22-04-2017 в 09:34
$act = (int)$_GET['act']; http://ajaxs.ru/
Добавить новый комментарий

Автор:

Текст сообщения:

Если в комментарии присутствует код, пожалуйста вставляете его между тегами [code][/code]

cap

Код с картинки:


Получать уведомления о новых комментариях по Email могут только зарегистрированные пользователи.

41001346159934
R314489888859
Уроки
Для начинающих
Интересное
Файлы
Полезное
Опрос

Много ли среди программистов девушек?

Последние комментарии
Ссылки