Здравствуйте, с Вами на связи Андрей Чернобай с очередным выпуском рассылки «PHP-песочница».
Если посетитель уже регистрировался на нашем сайте, нужно проверить его имя (логин) и пароль, а затем предоставить дополнительные услуги на сайте. Такими услугами может быть, например, доступ к эксклюзивной либо к платной информации, к настройкам аккаунда и т. п.
В этой статье я расскажу, как создать скрипт проверки имени пользователя и пароля на языке PHP.
Как происходит проверка пользователя?
На странице сайта есть форма, в которую пользователь вводит свои данные: имя, пароль, иногда e-mail. Затем нажимает кнопку, программа сравнивает введенные в форму данные с теми, что уже есть.
Если данные сошлись – предоставляется доступ к закрытому разделу. Если таких данных нет – следует предложение или правильно заполнить форму или зарегистрироваться.
Таким образом, наша задача – создать форму для проверки регистрации и файл-обработчик этой формы.
Сначала создадим форму.
Открыли в Блокноте index.php. Ниже закрывающего тега </form> формы для регистрации пишем код, в котором создаём новую форму:
…
<!—форма проверки зарегистрирован ли пользовательa
<p align=”center”><strong>Проверка пользователя:</strong></p>
<form action=”testreg.php” method=”post”>
<p align=»center»>Введите в поле своё имя:<br>
<input name=”name” type=”text”></p>
<p align=»center»>Введите в поле свой пароль:<br>
<input name=”pass” type=”password”></p>
<p align=”center”><input name=”submit” type=”submit” value=”Войти”></p>
</form>
</body>
</html>
Сохраним изменения; обновим индексную страницу в браузере. На странице появилась форма для проверки пользователя.
Обратите внимание на строку:
<form action=”testreg.php” method=”post”>
В ней указан файл-обработчик формы: testreg.php. Создадим этот файл.
Создайте в Блокноте новый файл, сохраните его под именем testreg.php (Файл – Сохранить как… – Имя файла: testreg.php – Тип файла: все - Сохранить).
Пишем в него код:
<?php
/*проверяем, заполнены ли все поля формы*/
if (($name == "") || ($pass == ""))
/*если не заполнены, выводится сообщение*/
{
echo "<p>Форма заполнена не полностью! Вернитесь, пожалуйста, и заполните все поля формы!</p>";
exit (); /*и программа останавливается*/
}
В этом фрагменте мы использовали уже знакомую нам проверку, заполнены ли все поля формы.
Пишем дальше:
/*если все поля формы заполнены, следуем дальше*/
else
{
$rfile = fopen ($name, "r"); /*открываем для чтения файл, имя которого совпадает с именем из формы*/
$data = file ($name);/*читаем из открытого файла*/
Здесь тоже всё известно по прошлым выпускам: открываем файл, если таковой имеется, и читаем данные из него в массив $data.
А вот дальше новое.
При записи в файл мы использовали код перехода на новую строку ("\n"). Перед тем как сравнивать пароли из файла и из формы, этот код перехода на новую строку следует удалить. Для удаления кода переходя на новую строку применяют функцию strtok(строка, символ), которая позволяет извлечь из строки подстроку до первого появления указанного символа.
Пишем далее следующий код:
$newstr = strtok ($data[0], "\n"); /*удаляем из первого элемента массива data код перехода на новую строку*/
И теперь нужно сравнить первую строку открытого файла с паролем из формы. Для сравнения строк есть функция
strcmp (строка1, строка2)
Добавляем следующий код:
/*так как пароль находится в первой строке открытого файла, то нужно сравнить пароль из формы с этой первой строкой*/
/*если строки совпадают, то функция возвращает значение 0*/
if (strcmp ($newstr, $pass) == 0)
{
echo "<p>У Вас есть права зарегистрированного пользователя.</p>";
}
else
{
echo "<p>Ведённый пароль не верный.</p>";
}
}
?>
Важно! Не забывайте тег, закрывающий php-код.
Ещё напомню, что такими знаками /**/ обозначаются пояснения, комментарии к коду. Комментарии на страницу не выводятся и в работе скрипта не участвуют.
Сохраните изменения в файле. Откройте индексную страницу в браузере, обновите её.
Вводим в форму имя и пароль, жмём кнопку и смотрим результат. Попробуйте разные варианты: когда все поля формы заполнены правильно; когда не заполнены; когда пароль введён заведомо не верный…