- •Переменные
- •Внешние переменные
- •Константы
- •Типы данных в рнр. Преобразование типов
- •Операторы
- •2. Операторы языка php Операторы выбора/ if...Else
- •Операторы выбора/ Переключатель switch
- •Операторы цикла
- •Операторы цикла/ While
- •Операторы цикла/ Do…while
- •Операторы цикла/ For
- •3. Строковые функции php
- •Функция htmlspecialchars
- •Функции поиска в тексте
- •Функции strlen(), chr() и ord()
- •Trim-функции (функции удаления пробельных символов)
- •Функции форматного вывода. Спецификаторы преобразования
- •Функция sscanf()
- •Функции преобразования кодировки
- •Функции работы с бинарными данными
- •Функции работы с блоками текста
- •Функции объединения/разделения строк
- •Функции сравнения строк
- •Функции работы с url
- •Функции преобразования регистра
- •Заключение к главе 3
- •4. Массивы Инициализация массивов
- •Цикл foreach для обхода массивов
- •Многомерные массивы
- •Функция count()
- •Функция in_array()
- •Функция reset()
- •Функции сортировки массивов
- •Работа с курсором (указатель) массива
- •Функция array_walk()
- •Функции Определения и вызовы функций
- •Время жизни переменной
- •Что такое рекурсия
- •Работа с файлами Открытие файлов
- •Отображение файлов
- •Закрытие файлов
- •Чтение из файлов и запись в файлы Чтение из файлов
- •Запись в файлы
- •Копирование, переименование и удаление файлов
- •Атрибуты файлов
- •Перемещение по файлам
- •Работа с каталогами
- •Методы put и post
- •7. Регулярные выражения
- •Базовый синтаксис и создание регулярных выражений
- •Групповой символ
- •Исключающее выражение
- •Квалификаторы
- •Границы
- •Подвыражения
- •Соответствие началу и концу строки
- •Сопоставление со специальными символами
- •Классы символов
- •Функции для работы с регулярными выражениями
- •Perl-совместимые регулярные выражения
- •8. Сессии и cookie в php Сессии (сеансы) в php
- •Открытие сессии
- •Регистрация переменных сессии
- •Закрытие сессии
- •Пример простой сессии
- •Установка cookies
- •Пример простого приложения с cookies
- •Установка срока годности cookies
- •Удаление cookie
- •Проблемы безопасности, связанные с cookies
- •Установка области видимости cookie
- •Шифрование
- •Ограничение доступа для доменов
- •Отправка cookies по защищенному запросу
- •9. Работа с ftp средствами php Основные возможности php при работе с ftp
- •Соединение с ftp-сервером
- •Регистрация на ftp-сервере
- •Закрытие соединения
- •Загрузка файлов с сервера
- •Другие возможности при работе с ftp
- •Переход в родительский каталог
- •Работа через брандмауэр
- •10. Проверка корректности данных Проверка корректности данных
- •Проверка на пустоту поля
- •Проверка допустимости вводимых данных
- •Удаление html - тегов и обратных слешей
- •11. Пишем гостевую книгу на php
- •Добавление записи
- •Реляционные базы данных
- •Индексы
- •Первичные ключи
- •Способы задания первичного ключа
- •Нормализация базы данных
- •Работа с сервером MySql
- •Язык sql
- •Команды sql
- •Типы полей базы данных
Проверка допустимости вводимых данных
Пусть нам надо проверить данные формы для отправки сообщения гостевой книги. Как правило, такая проверка осуществляется при помощи регулярных выражений. Рассмотрим пример, в котором создается регулярное выражение для проверки адреса электронной почты.
Будем исходить из того, что адрес должен иметь вид 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, форма для добавления сообщений должна иметь следующий вид: