Разработчику. Сборник рецептов PHP
Задавайте вопросы

Программа: (Де)активатор учетной
записи на веб-сайте

Вернуться назад

Не лишним бывает знать, что пользователи, зарегистрировавшиеся на сайте, предоставили корректный адрес электронной почты. Для проверки правильности адреса электронной почты пошлите письмо по адресу, указанному при регистрации. Если пользователь в течение нескольких дней не посетит специальный ЮURL, включенный в письмо, то его учетную запись можно деактивировать.

Система состоит из трех частей. Первая часть, показанная в Примере notify-user.php, представляет собой программу notify"user.php, посылающую электронное письмо новому пользователю с просьбой посетить контрольный URL. Вторая часть, приведенная в Примере verify-user.php, – это страница verify-user.php, которая обрабатывает контрольный URL и отмечает пользователей, прошедших проверку. Третья часть – это программа delete-user.php, деактивирующая учетные записи пользователей, которые не посетили контрольный URL в течение определенного интервала времени. Эта программа показана в Примере delete-user.php

Ниже приведен оператор SQL, создающий таблицу для хранения информации о пользователе:

CREATE TABLE users (
     email VARCHAR(255) NOT NULL,
     created_on DATETIME NOT NULL,
     verify_string VARCHAR(16) NOT NULL,
     verified TINYINT UNSIGNED
);

Возможно, вы захотите иметь больше информации о пользователях, но для нашей проверки этого вполне достаточно. При создании учетной записи пользователя занесите информацию в таблицу users и пошлите пользователю письмо по электронной почте, объясняющее, как подтвердить его учетную запись. В программе предполагается, что адрес электронной почты пользователя хранится в переменной $email.

Пример: notify"user.php

// генерируем контрольную строку
$verify_string = '';
for ($i = 0; $i < 16; $i++) {
     $verify_string .= chr(mt_rand(32,126));

}

// помещаем пользователя в базу данных
if (! mysql_query("INSERT INTO users
(email,created_on,verify_string,verified)
     VALUES ('".addslashes($email)."',NOW(),
          '".addslashes($verify_string)."',0)")) {
     error_log("Can't insert user: ".mysql_error());
     exit;

}

$verify_string = urlencode($verify_string);
$safe_email = urlencode($email);

$verify_url = "http://www.example.com/verify.php";

$mail_body=<<<_MAIL_
To $email:

Please click on the following link to verify your account creation:

$verify_url?email=$safe_email&verify_string=$verify_string

If you do not verify your account in the next seven days, it will be
deleted.
_MAIL_;

mail($email,"User Verification",$mail_body);

Контрольная страница, на которую пользователи попадают, если нажимают на ссылку, указанную в почтовом сообщении, обновляет таблицу users, если пользователи предоставляют соответствующую информацию, как показано в примере, описанном ниже:

Пример: verify-user.php

$safe_email = addslashes($_REQUEST['email']);
$safe_verify_string = addslashes($_REQUEST['verify_string']);

if ($r = mysql_query("UPDATE users SET verified = 1 WHERE email
     LIKE '$safe_email' AND
     verify_string = '$safe_verify_string' AND verified = 0")) {
     if (mysql_affected_rows() == 1) {
          print "Thank you, your account is verified.";
     } else {
          print "Sorry, you could not be verified.";

}

} else {
     print "Please try again later due to a database error.";

}

Контрольный статус пользователя обновляется, только если адрес электронной почты и контрольная строка, предоставленные пользователем, соответствуют строке в базе данных, которая еще не проверялась. Вот и последний этап – короткая программа, удаляющая непроверенных пользователей по истечении некоторого интервала времени, как показано в примере ниже:

Пример: delete-user.php

$window = 7; // в днях

if ($r = mysql_query("DELETE FROM users WHERE verified = 0 AND
     created_on < DATE_SUB(NOW(),INTERVAL $window DAY)")) {
     if ($deleted_users = mysql_affected_rows()) {
          print "Deactivated $deleted_users users.\n";

     }

} else {
     print "Can't delete users: ".mysql_error();

}

Запускайте эту программу раз в день, чтобы очистить таблицу от пользователей, не прошедших проверку. Если потребуется изменить интервал времени, предоставляемый пользователям для самопроверки, то измените значение $window и обновите текст почтового сообщения, посылаемого пользователю, чтобы отразить новое значение.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ