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

PHP-песочница

  Все выпуски  

PHP-песочница Выпуск 11


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

Выпуск 11. Проверка существования файла: функция file_exists.

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

В скрипте, созданном в прошлом выпуске, есть недостаток: если ввести имя пользователя, который не регился на сайте, выведется вот такое сообщение:

Warning: fopen(имя, которого нет): failed to open stream: No such file or directory in z:\home\php\www\testreg.php on line 12
Warning: file(имя, которого нет): failed to open stream: No such file or directory in z:\home\php\www\testreg.php on line 13
Ведённый пароль не верный.

Здесь говорится, что, дескать, мы хотим открыть файл, которого не существует. Это естественно: нельзя открыть то, чего нет. Но и такие сообщения – не совсем то, что хочется видеть на своём сайте. Вывод: нужно усовершенствовать скрипт, чтобы при неверном имени выводилось что-то более осмысленное и красиво оформленное. Например, предложение ввести имя внимательней, войти под своим именем и т. п.

В этом уроке мы это и сделаем.

Проверить существование файла очень легко. Для этого есть функция file_exists(имя файла).

Создадим условие, используя хорошо известные нам операторы if – else.

Добавим в testreg.php новый код (выделен зелёным):

<?php
/*проверяем, заполнены ли все поля формы*/
if (($name == "") || ($pass == ""))
/*если не заполнены, выводится сообщение*/
{
echo "<p>Форма заполнена не полностью! Вернитесь, пожалуйста, и заполните все поля формы!</p>";
exit (); /*и программа останавливается*/
}
/*если все поля формы заполнены, следуем дальше*/
else
{
if (!file_exists($name))
{
echo "<p>Имя пользователя указано не верно. Заполните форму внимательно или зайдите на сайт под своим именем.</p>";
}
else

{
$rfile = fopen ($name, "r"); /*открываем для чтения файл, имя которого совпадает с именем из формы*/
$data = file ($name);/*читаем из открытого файла*/
$newstr = strtok ($data[0], "\n"); /*удаляем из первого элемента массива data код перехода на новую строку*/
/*так как пароль находится в первой строке открытого файла, то нужно сравнить пароль из формы с этой первой строкой*/
if (strcmp ($newstr, $pass) == 0)
{
echo "<p>У Вас есть права зарегистрированного пользователя.</p>";
}
else
{
echo "<p>Ведённый пароль не верный.</p>";
}
}
}
?>

Обращаю внимание на ещё одну закрывающую фигурную скобку перед тегом закрытия скрипта.

Сохраним изменения; обновим страницу в браузере. Введём заведомо неверное имя, а пароль – всё равно какой. Если у Вас всё правильно в скрипте, выводится сообщение:

«Имя пользователя указано не верно. Заполните форму внимательно или зайдите на сайт под своим именем».

Вот и всё, о чём я хотел рассказать в этой статье.

Идём дальше.


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

Как стать Веб-мастером >>>>>

 

Функция trim()

Пару выпусков назад мы познакомились с двумя функциями для работы со строками: strtok(строка, символ) и strcmp (строка1, строка2). Напомню: функция strcmp (строка1, строка2) применяется для сравнения строк; а функция strtok(строка, символ) удаляет из строки символ. В php много других функций для работы со строками.

Например, функция trim() отсекает лишние пробелы в начале и в конце строки. Это нужно на случай, если при вводе пароля или имени в форму регистрации пользователь по невнимательности добавил пробел. Для программы пробел – тоже символ, и в файл данные запишутся вместе с пробелом. Потом, при попытке повторного входа на сайт, пользователь может пробел не ввести, и программа скажет о неверном имени/пароле.

Можете даже проверить всё, что я тут сказал, на созданной нами форме регистрации. Введите при регистрации какое-нибудь имя и прибавьте к нему пару пробелов. Потом попробуйте войти с этим именем, но без пробелов. Вылезет сообщение, что имя указано не верно. То же будет с паролем.

В общем, давайте доработаем нашу форму, застраховавшись от лишних пробелов.

Открываем reg.php и после проверки, заполнены ли поля формы, добавляем код:

<?php
if (($name == "") || ($password == "") || ($email == ""))
{
echo "<p>Форма заполнена не полностью! Вернитесь, пожалуйста, и заполните все поля формы!</p>";
exit ();
}
else
{
/*удаляем лишние пробелы из формы*/
$name = trim ($name);
$password = trim ($password);
$email = trim ($email);

$newfile = fopen($name, "w");
fwrite ($newfile, $password);
fwrite ($newfile, "\n");
fwrite ($newfile, $email);
fwrite ($newfile, "\n");
fclose ($newfile);
echo "<p>Поздравляем Вас, " .$name. ". Регистрация прошла успешно.</p>";
}
/*чтение из файла с помощью функции fread */
$file = fopen($name, "r");
$n = fread ($file, 100);
echo "<p>Ваш пароль: " .$n. ". Сохраните его.</p>";
fclose ($file);
/*чтение из  файла с помощью функции file и массива*/
$rfile = fopen($name, "r"); /*открываем файл только для чтения*/
$data = file($name); /* считываем открытый файл в массив $data*/
echo "Ваш пароль: " .$data[0]. ". Ваш электронный адрес: " .$data[1]. ". Сохраните свои данные."; //выводим из массива на страницу
fclose ($rfile); //закрыли файл
?>

Сохраните изменения.

Открываем testreg.php и также после проверки на заполненность формы добавляем код:

<?php
/*проверяем, заполнены ли все поля формы*/
if (($name == "") || ($pass == ""))
/*если не заполнены, выводится сообщение*/
{
echo "<p>Форма заполнена не полностью! Вернитесь, пожалуйста, и заполните все поля формы!</p>";
exit (); /*и программа останавливается*/
}
/*если все поля формы заполнены, следуем дальше*/
else
{
/*удаляем лишние пробелы из формы*/
$name = trim ($name);
$pass = trim ($pass);

if (!file_exists($name))
{
echo "<p>Имя пользователя указано не верно. Заполните форму внимательно или зайдите на сайт под своим именем.</p>";
}
else
{
$rfile = fopen ($name, "r"); /*открываем для чтения файл, имя которого совпадает с именем из формы*/
$data = file ($name);/*читаем из открытого файла*/
$newstr = strtok ($data[0], "\n"); /*удаляем из первого элемента массива data код перехода на новую строку*/
/*так как пароль находится в первой строке открытого файла, то нужно сравнить пароль из формы с этой первой строкой*/
if (strcmp ($newstr, $pass) == 0)
{
echo "<p>У Вас есть права зарегистрированного пользователя.</p>";
}
else
{
echo "<p>Ведённый пароль не верный.</p>";
}
}
}
?>

Сохраните изменения. Теперь проверьте работу формы, заведомо вводя при регистрации имя с пробелами в конце или в начале. Потом, при проверке, введите имя без пробелов. Сообщения об ошибке не будет.

Как видите, ничего сложного.

Успехов.

Андрей Чернобай
kapitansg@yandex.ru


В избранное