Отправляет email-рассылки с помощью сервиса Sendsay

PHP-песочница

  Все выпуски  

PHP-песочница Скрипт Секретного раздела на сайте


Php-«песочница»

Выпуск 24

Здравствуйте. С вами Андрей Чернобай с новым выпуском "PHP - песочницы". Рассылка создана для самых "маленьких" - для тех, кто делает только первые шаги в программировании на PHP. Если Вы хотите двигаться быстрее и освоить создание PHP-сайтов профессионально, рекомендую курс PHP+MySQL для начинающих, потому что в этом курсе собрано всё то, что необходимо именно для создания сайтов, никакой "воды", при этом всё доступно, подробно до мелочей и наглядно.

Для отписки от рассылки внизу страницы есть ссылка. А с остальными продолжим.

Наверняка Вы встречали на некоторых сайтах такие разделы, вход в которые заблокирован тем или иным способом. То есть, попасть в такие разделы может не любой пользователь, а только тот, кто зарегистрировался на сайте или подписался на рассылку автора данного сайта. Такие вот разделы «не для всех» принято называть секретными разделами.

Для чего нужен секретный раздел? С помощью секретного раздела, например, можно увеличивать число подписчиков на свои рассылки, если выкладывать в закрытый доступ какую-либо «особенную» информацию. Можно придумать для своих подписчиков и другие привилегии, которых будут лишены прочие посетители сайта. В общем, как использовать секретный раздел, всецело оставляю на Ваше творческое усмотрение. А я расскажу только об одном из способов создать секретный раздел на сайте.

Скрипт Секретного раздела на сайте

Это достаточно простой способ. Хотя он намного лучше и надёжнее того, о котором говорилось в статье «Секретный раздел на сайте» (ссылка). Там мы рассматривали совсем простенький скрипт секретного раздела. Недостаток его хотя бы в том, что пароль там хранится в самом скрипте, что, конечно же, небезопасно.

Важно! Ещё одно уточнение. Этот скрипт секретного раздела отлично работает в паре со скриптом рассылки от сайта http://tsbs.ru, там скрипт рассылки можно скачать бесплатно. Инструкция по его установке на сайт и на локальный сервер прилагается вместе со скриптом, поэтому об этом я рассказывать не стану. А уточнение это здесь потому, что скрипт рассылки устанавливается на движки типа Word Press с косяками, а также отчего-то не желает «спариваться» со скриптом авторизации, который мы создавали в одном из уроков на Вокруг Сайта. Так что, я предупредил, сильно меня не пинайте, пожалуйста. А вот если Вы станете использовать скрипт рассылки от http://tsbs.ru вместе с моим скриптом секретного раздела, тогда милости прошу с вопросами ко мне (коль вопросы у Вас возникнут).

В любом же случает, рассмотреть и проанализировать предлагаемый скрипт секретного раздела будет полезно для повышения «программистской квалификации».

Итак, создаём скрипт секретного раздела.

Как это должно выглядеть?

Очевидно, должна быть страница с формой, в которую пользователю нужно будет внести определенные данные, чтобы скрипт, проверив эти данные, впустил пользователя в секретный раздел (или же не впустил). Назовём эту страницу secret.php. Расширение .php здесь потому, что на странице будет и форма для подписки на рассылку, о скрипте которой упоминалось выше. А эта форма добавляется на страницу через команду include().

Код страницы secret.php сделаем такой:

<HTML>
<HEAD>
<TITLE>
Вход в Секретный Раздел</TITLE>
</HEAD>
<body>
<h1>
Вы на пороге Секретного Раздела сайта</h1>
<p align="center" >
Вход только для зарегистрированных пользователей (подписчиков рассылки «… (название Вашей рассылки)»):</p>
<p>
Введите логин и электронный адрес, которыми Вы пользовались при подписке на рассылку:</p>
<form name="form" method="post" action="secret/index.php">
<p>
Логин*:<br>
<label>
<input type="text" name="name">
</label>
</p>
<p>
Электронный адрес*:<br>
<label>
<input type="text" name="email">
</label>
</p>
<p>
<input type="submit" name="submit" value="Войти в Секретный Раздел">
</p>
</form>
<hr>
<p>
Если Вы не подписывались на нашу Рассылку, воспользуйтесь формой ниже:</p>
<?php
include("subscribe/show_form.php"); //здесь вставляется форма подписки на рассылку скрипта с сайта http://tsbs.ru; все файлы скрипта размещаются при установке в папке subscribe…
?>
</BODY>
</HTML>

Ничего нового в этом коде нет – для того, кто изучил HTML и немного знаком с PHP, - поэтому останавливаться на нём мы и не станем. Единственное, на что обратите внимание, это action="secret/index.php". То есть, скрипт-обработчик формы находится по адресу secret/index.php.

Поговорим об этом.

Для секретного раздела у нас будет отдельная папка, в неё поместим все файлы со скриптами и разную информацию, доступ к которой хотим разрешить только зарегистрированным пользователям. Не мудрствуя лукаво, назовём эту папку secret.

В папке secret создаём файл именем index.php. В этом файле будет код скрипта, а также ссылки для скачивания эксклюзивной информации.

Почему имя этого файла index, а не какое-нибудь другое?

Этим мы создадим небольшое препятствие на пути потенциальных злоумышленников, которые могут попытаться скачать наши ценные файлы «просто так». Как это они могут сделать?

Если обратиться на сайте к какой-либо папке, в которой нет индексного файла (например, так: http://my_sait.ru/secret/), то браузер отобразит, либо страницу с сообщением об ошибке, либо, что бывает очень часто, выдаст список всех файлов, которые имеются в данной папке. И тогда - «входите, люди добрые, берите, что хотите». Но мы-то индексный файл создали! А значит, при обращении к папке secret можно будет увидеть только именно страницу index.php… вернее, можно было бы увидеть! На самом же деле, мы поместим в index.php код скрипта, который будет отфутболивать любого незарегистрированного/неавторизованного гостя на страницу secret.php, где этому гостю будет предложено или авторизоваться или подписаться на нашу рассылку или – идти восвояси.

Итак, пока код index.php такой:

<HTML>
<HEAD>
<TITLE>
Добро пожаловать в Секретный раздел</TITLE>
</HEAD>
<body>
<h1>
Добро пожаловать в Секретный Раздел нашего сайта.</h1>
<p><a href=”archive_1.rar”>
ссылка 1</a></p>
<p><a href=”archive_2.rar”>
ссылка 2</a></p>
<p<a href=”archive_3.rar”>>
ссылка 3</a></p>
</ body >
</HTML>

Все эти archive_1 и т. д. – любые архивы, которые Вы поместите в папку secret для проверки работы скрипта, содержание архивов здесь значения не имеет, - думаю, это понятно.

Реализовать нашу задачу лучше всего с использованием функций (http://vokrug-saita.ru/php_func.php ).
Добавляем следующий код:

<?php
function check($name,$email)//определяем функцию check, которая будет заниматься проверкой данных из формы на истинность или ложность, поэтому в качестве аргументов этой функции будут логин ($name) и e-mail ($email) из формы на странице secret.php
// далее пишем то, что функция должна делать
{
$fd=false;
$filename = "data.txt";
//в переменную $filename помещаем путь к файлу (базе данных), в котором хранятся данные зарегистрированного пользователя: в нашем случае это будет текстовый файл в этой же папке secret
if(file_exists($filename))//проверяем, существует ли файл-база данных, если существует
$fd=fopen($filename,'r');//то открываем файл-базу данных и считываем данные в переменную $fd
if($fd !== false)// если $fd не ложь (здесь два знака равно говорят о том, что условие строгое), то
{
while(!feof($fd))
//запускаем цикл, который будет читать из файла-базы, пока есть, что читать, то есть, пока указатель файла не достигнет конца файла. Здесь функция feof() проверяет конец файла $fd. Восклицательный знак, как вы помните, означает «НЕ», а по-русски это будет примерно так: «если файл до конца не дочитан»
{
$rd=fgets($fd);
//читаем файл-базу построчно. Каждая считанная строка помещается в переменную $rd
if($rd===FALSE)break;// если в переменную $rd ничего не считано, то есть строка пустая, то скрипт останавливается (break)
$fields=explode(',',$rd); //функцией explode делим строку, помещённую в переменную $rd в свою очередь на строки, разделителем между которыми в данном случае является запятая
//на предыдущем шаге мы получили в своё распоряжение ни что иное, как массив, в который попали регистрационные данные пользователя, записанные в базе данных data.txt. Значения массива – эти самые регданные. И, как Вы, наверняка помните, у каждого значения есть индекс – число; отсчёт индексов начинается от нуля.
//теперь допустим, что имя пользователя в БД записывается первым, электронный адрес – вторым. Тогда проверка будет выглядеть так:
if(($fields[2]==$aname)&&($fields[3]==$email)&&($fields[6]=="2")) //если третий элемент массива равен имени, внесённому пользователем в форму, четвёртый элемент массива равен e-mail’y, тоже внесённому в форму, а седьмой – двойка, что говорит о том, что пользователь подтвердил свою подписку на рассылку, - то выполняем следующее
{
fclose($fd);
//закрываем файл-базу, т. к. нужное нам найдено
return true;//возвращаем истину
}
}
fclose($fd);
//в противном случае, то есть, если в БД не найдены пары «имя-адрес», тоже закрываем файл-базу
}
return false;
//и возвращаем «ЛОЖЬ»
}
//всё, что написано выше, есть функция проверки данных из формы на странице scret.php
// эту функцию можно поместить в отдельный файл, об этом мы поговорим в одном из следующих выпусков
//если Вы не знаете, что такое функции и для чего они, следует сначала обратиться к уроку «Функции» (http://vokrug-saita.ru/php_func.php)
//далее выполняется собственно проверка
if(check("$name","$email")) //если функция check выдаёт «ИСТИНУ», то есть в файле-базе данные пользователя есть, то дальше просто отображаем HTML-страницу с активными ссылками для скачивания эксклюзивной информации
{
?>
<HTML>
<HEAD>
<TITLE>
Добро пожаловать в Секретный раздел</TITLE>
</HEAD>
<body>
<h1>
Добро пожаловать в Секретный Раздел нашего сайта.</h1>
<p><a href=”archive_1.rar”>
ссылка 1</a></p>
<p><a href=”archive_2.rar”>
ссылка 2</a></p>
<p<a href=”archive_3.rar”>>
ссылка 3</a></p>
</ body >
</HTML>

И ещё нужно добавить второе условие, то есть, что должно выполняться, если пользователя в базе данных не оказалось. Поэтому к коду добавляем следующее:

<?php
}
else
{
print "<h1 align='center'><font color='#FF0000'>Вы не являетесь Зарегистрированным пользователем или ошиблись при вводе данных в форму!</font></h1>

<p align='center'><font size='3'>Если Вы не подписаны на рассылку … (название Вашей рассылки), можете сделать это, пройдя по этой <a href='../secret.php'>ссылке</a></font></p>

<p align='center'><font size='3'>Если же Вы подписывались на нашу рассылку, но всё равно не можете войти в Секретный Раздел, могут быть следующие причины:</font></p>

<p align='center'><font size='3'>1. Вы не подтвердили подписку через письмо, присланное Вам после Вашей подписки. Просто пройдите в свой почтовый ящик и подтвердите подписку.<br> (<font color='#FF0000'>Внимание! Возможно, это письмо попало в папку СПАМ - проверьте!</font>)</font></p>

<p align='center'><font size='3'>2. Вы ошиблись при вводе Имени и Электронного адреса в форму авторизации. Пройдите по <a href='../secret.php'>этой ссылке</a> и авторизуйтесь снова.</font><br>(Введённые Вами данные: Имя - " .$name. "; Электронный адрес - ".$email. " НЕ являются данными зарегистрированного подписчика)</p>";
}
?>

Теперь можно проверить, работает ли наш скрипт.

Сохраняем все результаты; открываем в браузере страницу secret.php. На странице должна быть форма для входа в Секретный раздел. Заполняем поля формы, жмём «Войти в Секретный Раздел» и, если не допущено нигде в коде ошибок, мы должны увидеть сообщение, что мы, дескать, не являемся зарегистрированным пользователем или невнимательно заполнили поля формы… и т. д.

И это правильно, ведь мы пока не подписались на свою рассылку.

Поэтому возвращаемся на страницу secret.php и подписываемся на рассылку. После чего идём на локальном сервере по адресу WebServers – tmp - !sendmail и находим письмо, открыв которое, читаем поздравления о подписки на рассылку и видим ссылку, по которой нужно перейти, чтобы подтвердить подписку. И вот только после этого можно вернуться на страницу secret.php и через первую форму попробовать попасть в свой секретный раздел. Что должно обязательно получиться, если Вы правильно ввели в форму свои логин и e-mail.

В заключении хочу лишь добавить, что гораздо удобней и надёжней создать секретный раздел с использованием баз данных MySQL, научившись, соответственно, создавать сайты на PHP с использованием таковых баз данных.

Успехов.


Если Вы хотите научиться создавать PHP-сайты профессионально и сэкономить на освоении программирования несколько лет, то Вам сюда:

"PHP + MySQL для начинающих"


P. S. Остальные уроки и статьи по PHP Вы найдёте как всегда здесь. Все возникающие вопросы Вы можете задать, прислав мне письмо на электроный адрес (см. подпись к выпуску) или через форму для добавления комментариев на страницах сайта.

Автор расылки: Андрей Чернобай
kapitansg@yandex.ru


В избранное