Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
php учебник_весь.doc
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
2.06 Mб
Скачать

Проверка допустимости вводимых данных

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

Будем исходить из того, что адрес должен иметь вид something@server.com. Как видим, у адреса две составляющие - имя пользователя и имя домена, которые разделены знаком @. В имени пользователя могут присутствовать буквы нижнего и верхнего регистров, цифры, знаки подчеркивания и минуса, точки. Для проверки разделителя между именем пользователя и именем домена в выражение требуется добавить +@. Таким образом, регулярное выражение, проверяющее имя пользователя и наличие разделителя имеет следующий вид:

"/[0-9a-z_]+@[0-9a-z_^\.]"

Для проверки доменного имени добавляем такое выражение:

"\.[a-z]{2,3}/i"

Объединяя эти шаги, получаем следующее регулярное выражение для проверки адресов электронной почты:

"/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"

Точно таким же образом вы можете проверить и остальные заполняемые пользователем поля.

Удаление html - тегов и обратных слешей

Как уже говорилось, вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl). К примеру, если переменная $name содержит текст с именем пользователя, то обработка этого текста выглядит так:

<?

$name = substr($HTTP_POST_VARS["name"],0,32);

$name = htmlspecialchars(stripslashes($name));

?>

11. Пишем гостевую книгу на php

Сейчас мы разработаем приложение "Гостевая книга на PHP".

Сообщения будут храниться в файлах, которые расположены в директории RECORDS (позже мы разработаем вариант гостевой книги, основанный на хранении сообщений в базе данных). Код размещен в двух файлах: index.php (отображение сообщений) и addrec.php (добавление сообщений, их проверка и запись в файл).

Итак, создайте файл addrec.php и в той же директории, в которой расположен этот файл создайте директорию RECORDS.

Сначала проверяем, ввел ли пользователь данные и правильно ли он их ввел:

<?

$error = "";

$action = $HTTP_POST_VARS["action"];

if (!empty($action))

{

$name = trim($name);

$msg = trim($msg);

if (empty($msg)) // если не введено сообщение

{

$action = "";

$error = $error."<LI>Вы не ввели сообщение\n";

}

if (empty($name)) // если не введено имя

{

$action = "";

$error = $error."<LI>Вы не ввели имя\n";

}

if (!empty($email))

/* если введен e-mail, то проверяем с помощью регулярного выражения

правильность ввода */

{

if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))

{

$action = "";

$error = $error."<LI> Неверно введен е-mail.&nbsр Введите e-mail

в виде <i>softtime@softtime.ru</i> \n";

}

}

Теперь обрабатываем введенный пользователем текст функциями удаления HTML-тегов и обратных слешей:

$name = substr($HTTP_POST_VARS["name"],0,32);

$name = htmlspecialchars(stripslashes($name)); // обрабатываем имя

$city = substr($HTTP_POST_VARS["city"],0,32);

$city = htmlspecialchars(stripslashes($city)); // обрабатываем город

$email = substr($HTTP_POST_VARS["email"],0,32);

$email = htmlspecialchars(stripslashes($email)); // обрабатываем e-mail

$url = substr($HTTP_POST_VARS["url"],0,36);

$url = htmlspecialchars(stripslashes($url)); // обрабатываем url-адрес

$msg = substr($HTTP_POST_VARS["msg"],0,1024);

$msg = htmlspecialchars(stripslashes($msg)); // обрабатываем сообщение

В нашей гостевой книге поддерживается полужирное начертание, курсив, подчеркивание, верхние и нижние индексы. Для того, чтобы пользователь мог, к примеру, выделить блок текста в сообщении курсивом, его необходимо заключить в теги <i></i> и т.д. Поэтому для после того, как текст введен, нужно заменить эти искусственные теги на их реальное HTML-представление:

if (empty($error)) // если ошибок нет, обрабатываем сообщение

{

$msg = nl2br($msg);

$msg = str_replace("[u]","<u>",$msg);

$msg = str_replace("[U]","<u>",$msg);

$msg = str_replace("[i]","<i>",$msg);

$msg = str_replace("[I]","<i>",$msg);

$msg = str_replace("[b]","<B>",$msg);

$msg = str_replace("[B]","<B>",$msg);

$msg = str_replace("[sub]","<SUB>",$msg);

$msg = str_replace("[SUB]","<SUB>",$msg);

$msg = str_replace("[sup]","<SUP>",$msg);

$msg = str_replace("[SUP]","<SUP>",$msg);

$msg = str_replace("[/u]","</u>",$msg);

$msg = str_replace("[/U]","</u>",$msg);

$msg = str_replace("[/i]","</i>",$msg);

$msg = str_replace("[/I]","</i>",$msg);

$msg = str_replace("[/b]","</B>",$msg);

$msg = str_replace("[/B]","</B>",$msg);

$msg = str_replace("[/SUB]","</SUB>",$msg);

$msg = str_replace("[/sub]","</SUB>",$msg);

$msg = str_replace("[/SUP]","</SUP>",$msg);

$msg = str_replace("[/sup]","</SUP>",$msg);

$msg = eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a

href=\\2>\\2</a>\\3",$msg);

$msg = str_replace("\n"," ",$msg);

$msg = str_replace("\r"," ",$msg);

Открываем файл и добавляем в него, введенную пользователем информацию:

/* создаем файл с именем вида "rec.+время добавления сообщения" */

$file = fopen("records/rec.".time(),"w");

// записываем информацию в файл, по одной строчке на каждое поле

fputs($file,$name."\n");

fputs($file,$city."\n");

fputs($file,$email."\n");

fputs($file,$url."\n");

fputs($file,$msg."\n");

// закрываем файл

fclose($file);

Вызываем скрипт index.php, ответственный за отображение сообщений:

print "<HTML><HEAD>\n";

print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";

print "</HEAD></HTML>\n";

}

}

Добавляем код вывода сообщений об ошибках и HTML-код формы добавления сообщения:

if (empty($action))

{

<?

<HTML>

<HEAD>

<TITLE>Гостевая книга - добавление записи</TITLE>

</HEAD&tg;

<BODY>

<H3>

<? print "<center>"; ?>

<font color=#1E90FF>Добавление записи</font>

</H3>

<?

if (!empty($error))

/* если есть ошибки, выводим сообщение об ошибках */

{

print "<P><font color=green>Во время добавления записи произошли

следующие ошибки:</font></P>\n";

print "<UL>\n";

print $error;

print "</UL>\n";

}

?>

<!-- пишем HTML-код формы добавления сообщений !-->

<center>

<table width=1 border=0>

<form action=addrec.php method=post>

<input type=hidden name=action value=post>

<tr>

<td width=50%>Имя:<font color=red><sup>*</sup><font></td>

<td align=right>

<input type=text name=name maxlength=32 value='<? echo $name; ?>'>

</td>

</tr>

<tr>

<td width=50%>Город:</td>

<td align=right>

<input type=text name=city maxlength=32 value='<? echo $city;; ?>'>

</td>

</tr>

<tr>

<td width=50%>E-Mail:</td>

<td align=right>

<input type=text name=email maxlength=32 value='<? echo $email; ?>'>

</td>

</tr>

<tr>

<td width=50%>URL:</td>

<td align=right>

<input type=text name=url maxlength=36 value='<? echo $url; ?>'>

</td>

</tr>

<tr>

<td colspan=2>Сообщение:<font color=red<sup>*</sup></font><br>

<textarea cols=50 rows=8 name=msg><? echo $url; ?>

</textarea>

</td>

</tr>

<tr>

<td colspan=2><input type=submit value='Добавить'></td>

</tr>

</form>

<tr>

<td colspan=2><font color=red><sup>*</sup></font> - поля,

обязательные для заполнения

</td><td align=left>

</table>

</center>

</BODY>

</HTML>

<?

}

?>

После окончания работы с кодом, размещенным в файле addrec.php, форма для добавления сообщений должна иметь следующий вид:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]