Доброго времени суток! Спасибо, что заглянули на Блог RS! Сегодня я продолжаю пополнять цикл "Создать блог с нуля" а Вы делаете еще один шаг по созданию своего проекта. Цель сегодняшней заметки написать модуль белого списка и создать таблицу базы данныхс которой списку придется работать. Смысл белого списка прост, определить статус сообщения который посылает пользователь через форму "Добавить комментарий". Статус определяется по двум критерием:
Небольшая заметка для тех кто на блоге в первый раз. Так как этот пост написан для тех кто читает цикл, то для Вас этот текст будет почти на 90 процентов бессмыслен. Если Вы ищите уроки по php, и хотите научится программировать, на данном языке, без тонны теории, то почитайте мой, выше упомянутый, цикл "Создать блог с нуля". Цикл представляет собой сборку постов в которых я рассказываю о том как писал движок, на котором работает мой блог.
Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки цикла!
Нам понадобится список, в котором движок будет хранить все почтовые ящики, с которых писали хоть раз, и их статусы. Я дам Вам sql запрос, надеюсь Вы знаете что с ним делать... Если нет, то напишите комментарий в этом посте, объясню =)
CREATE TABLE IF NOT EXISTS `whitelist` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Каждое сообщение будет содержать статус почтового ящика с которого это сообщение послали, таким образом наш движок сможет показывать только те сообщения которые разрешены к показу.
Теперь давайте приступим к созданию самого скрипта определения статуса
Как я уже говорил, скрипт не сложный, и имеет два условия (если включен и если выключен), каждое из которых имеет свои два условия (Если пользователь уже есть в базе данных, и если нет).
Уведомления пользователя о включенном белом списке или нахождения его почтового ящика статусе "блокирован" будет реализовано с помощью кукис. К подобному способу реализации уведомления мы прибегали во время создания формы обратной связи.
Я даю Вам полный код файла whitelist.php (нового файла, который Вам необходимо создать в пользовательской папке moduls)
<?
//выводим пользователя из таблицы whitelist по почтовому ящику
@$userRESULT = mysql_query("SELECT email,status FROM whitelist WHERE email='$email_comm'");
@$user = mysql_fetch_array($userRESULT);
if($whitelist == 0)//если белый список отключен
{
if($user != "")//если пользователь уже писал сообщения и есть в бд
{
if($user['status'] == 2)//статус пользователя - бан
{
//формируем куку с сообщением
cookieMessW($server_root,"Вы не можете оставлять комментарии.");
header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;
}
if($user['status'] == 1)//статус пользователя - Не подтвержден
//формируем куку с сообщением
cookieMessW($server_root,"Ваше сообщение появится после того как администратор его проверит.");
$status = $user['status'];//сохраняем статус в переменной (0 или 1)
}
else//если это первое сообщение пользователя
{
$status = 0;//по умолчанию - гость
//заносим пользователя в список
$result_add_new_user = mysql_query ("INSERT INTO whitelist (email,status) VALUES ('$email_comm','0')");
}
}
else//если белый список включен
{
if($user != "")//если это не превое сообщение пользователя
{
if($user['status'] == 2)//если пользователь имеет статус бан
{
//формируем куку с сообщением
cookieMessW($server_root,"Вы не можете оставлять комментарии.");
header("location: ".getenv('HTTP_REFERER'));//Перенаправляем пользователя
exit;
}
if($user['status'] == 1)//статус пользователя - Не подтвержден
//формируем куку с сообщением
cookieMessW($server_root,"Включена премодерация комментариев. Ваше сообщение появится после того как администратор его проверит.");
$status = $user['status'];//сохраняем статус в переменной (0 или 1)
}
else//если это сообщение не первое
{
$status = 1;//по умолчанию заносим статус не подтвержден
//заносим пользователя в список
$result_add_new_user = mysql_query ("INSERT INTO whitelist (email,status) VALUES ('$email_comm','1')");
//формируем куку с сообщением
cookieMessW($server_root,"Включена премодерация комментариев. Ваше сообщение появится после того как администратор его проверит.");
}
}
//-------------------------------------------------
function cookieMessW($server_root,$txt)
{
preg_match("/http:\/\/(.*?)\//s",$server_root,$cookieSITE);
$cookieSITE = str_replace("www.","",$cookieSITE[1]);
setcookie("messW",$txt,time()+300,"/",".".$cookieSITE);
}
?>
Код за комментирован, да и сам по себе не сложный. Хочу лишь поделится идеей статуса, если быть точнее то, что означает число в переменной status и что это за переменная whitelist такая =)
Давайте с начало о статусе:
Что касается переменной whitelist, то тут все очень просто. Значение этой переменной будет формироваться в файле index.php. Если переменная имеет значение ноль, то модуль белого списка считает отключенным. Если переменная имеет значение единица, то, соответственно, модуль является включенным!
Запустить этот модуль для проверки пока не получится, но совсем скоро этот модуль окажется привязан к нашим комментарием, и вот уже тогда мы сможем его тщательно потестить =)
Если Вы читаете мои заметки, и все еще не подписаны, то скорее подписывайтесь на RSS ленту блога через ридер, или же по почте =)
Всего Вам наилучшего! На сегодня к сожалению все!
Исходник |
_______
P.S.: Умеете пользоваться интернетом? Знаете Всё об Интернет? Если простор веб-паутины Вас пугает, и Вы уверенны, что интернет это что-то типа свалки, то это значит, что Вы просто не умеете им пользоваться =) Почитайте ресурс inetedu.ru, Вам обязательно покажется интересным их материал...