
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Добавляем адреса в список рассылки
Следующий вопрос, который я хотел бы рассмотреть в данной статье, - механизм добавления новых адресов в тот или иной список рассылки. Для обеспечения такой возможности нам необходимо создать PHP-файл с формой ввода адресов, а также скрипт, обрабатывающий эту информацию. Сначала приведу текст файла addnames.php, результат работы которого представлен на рисунке 2.
<html><head><title>Добавление адреса в список рассылки</title></head>
<body>
<center><H2>Добавление адреса в список рассылки</H2></center>
<form method=post action="sevemail.php">
<table>
<tr>
<td align="left">
<b>Выберите список:</b>
</td>
<td align="left">
<select name="List" size=1>
<?
$groups = file("data/lists.txt");
for ($index=0; $index < count($groups); $index++)
{
$grouplist = split("\|", chop($groups[$index]));
?>
<option value="<? print $grouplist[1] ?>"
<? if ($index==0)
{print " selected ";}
?>
>
<?
print $grouplist[0]
?>
</option>
<?
}
?>
</select>
</td>
</tr>
<tr>
<td align="left">
<b>Добавляемый e-mail:</b>
</td>
<td align="left">
<input type=text name="Email" size="40">
</td
</tr>
</table>
<input type="submit" name="Submit" value="Добавить адрес">
</form>
<a href="newlist.php">Создание нового листа списка рассылки.</a>
<br><a href="picklist.php">Модификация/удаление адресов</a>.
<br><a href="data/log.txt">Просмотр журнала</a>.
<br><a href="autoresponder.php"> Просмотр/редактирование автоответчика</a>.
</body></html>
Единственным отличием данного файла от index.php является отсутствие полей ввода, характерных только для рассылки писем, а также имя скрипта, которому передается управление после нажатия на кнопку "Добавить адрес". Ниже приводится текст скрипта savemail.php.
<html><head><title>Записываем файл...</title></head><body>
<br><br>
<?
if(file_exists("data/$List"))
{
$myfile = file("data/$List");
$fh = fopen("data/$List","w");
for ($index=0; $index < count($myfile); $index++)
{
if ($Email != chop($myfile[$index]))
{fputs($fh,$myfile[$index]);}
}
fputs($fh,$Email."\n");
fclose($myfile);
}
else
{
$myfile = fopen("data/$List","w");
fputs($myfile,$Email."\n");
fclose($myfile);
}
?>
<br>
<? echo $Email ?> записан в <? echo $List ?>
<br><br>
<a href="index.php">На главную</a>.
</body></html>
Рассмотрим задачи, выполнение которых должен обеспечить данный скрипт. Во-первых , проверка существования файла со списком адресов. Это делается с помощью функции file_exists. Если файла с указанным именем не существует, это означает, что добавляемый нами адрес - первый в списке. В этом случае просто создаем новый файл и записываем в него e-mail-адрес. В противном случае после чтения уже сформированного списка в массив следует добавить переданный из формы e-mail адрес, однако прежде стоит посмотреть, не введен ли он раньше, т.к. ни один из адресов не должен дублироваться. Это, в частности, может быть осуществлено в цикле по всем элементам массива. В данном случае файл со списком будет открыт на чтение, и в него будут записаны все адреса, не совпадающие со вновь записываемым. Обратите внимание, что функция открытия файла fopen в качестве второго параметра использует значение "w". Это означает, что файл открывается для записи в него данных. Значение "r" означало бы открытие файла на чтение, "a" - для добавления информации к существующим данным. Формат вызова функции fopen выглядит следующим образом:
fopen (filename, mode)
Обратите внимание на следующий нюанс: если вы собираетесь открывать файл одновременно для чтения и записи, вам следует предусмотреть возможность некорректного завершения работы скрипта. После открытия файла следует прочитать все его содержимое в массив и все модификации осуществлять с данными в памяти. Только после обработки всех данных можно снова открыть файл, теперь уже на запись, и поместить в него модифицированную информацию.
Рассмотренный нами механизм добавления e-mail адресов во многом неидеален. Например, вместо одного адреса можно обеспечить ввод сразу нескольких. Для этого достаточно лишь изменить описание формы в файле addnames.php, а также немного подкорректировать код обработки передаваемых в savemail.php данных. Кроме того, можно осуществлять проверку корректности ввода e-mail адреса по некоторому шаблону (например, наличие символа "@" внутри строки). Я не буду углубляться в детали, т.к. это может занять много времени, тем более что моей целью на данный момент является демонстрация возможностей языка PHP, а также того, что задача создания такого мощного механизма, как система управления списками рассылок, не так уж и сложна. Однако предлагаю перейти к следующему этапу - созданию новых списков рассылки. Как и в предыдущем случае, для этого необходимо создать два файла, первый из которых будет содержать форму ввода исходных данных, а второй будет эти данные обрабатывать. Назовем эти файлы newlist.php и makenewlist.php соответственно.
newlist.php:
<html><head><title>Создание нового списка рассылки</title></head>
<body>
<center><H2>Создание нового списка</H2></center>
<form method=post action="make-newlist.php">
<table>
<tr>
<td align="left">
<b>Название списка:</b>
</td>
<td align="left">
<input type=text name="Listname" size="40">
</td>
</tr>
<tr>
<td align="left">
<b>Описание(одно слово):</b>
</td>
<td align="left">
<input type=text name="Filename" size="40">
</td>
</tr>
</table>
<input type="submit" name="Submit" value="Записать">
</form>
<br><a href="addnames.php">Добавить адреса в список</a>.
<br><a href="picklist.php">Модификация/удаление адресов</a>.
<br><a href="data/log.txt">Просмотр журнала</a>.
<br><a href="autoresponder.php"> Просмотр/редактирование автоответчика</a>.
</body></html>
makenewlist.php:
<html><head><title>Создание файла...</title></head><body>
<?
$Filename = $Filename.".lst";
$myfile = fopen("data/lists.txt","a");
fputs($myfile,$Listname."|".$Filename."\n");
fclose($myfile);
?>
Создан список рассылки <? echo $Listname ?>.<br>
<br>
<a href="index.php">На главную</a>.
</body></html>
Легко заметить, что скрипт makenew-list.php выполняет только одну функцию - добавление названия списка и имени соответствующего файла в lists.txt.