
- •В.С. Романчик
- •Глава 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 и обработка различных форм
Создание простой формы:
<form method="post" action="/my/action.php">
</form>
Теги <form> и </form> задают начало и конец формы. Стартовый тег <form> содержит два атрибута: action и method. Атрибут action содержит адрес URL сценария, который должен быть вызван для обработки сценария. Атрибут method указывает браузеру, какой вид HTTP запроса POST или GET необходимо использовать для отправки формы.
В формах используются различные элементы ввода, которые перечислены ниже.
TEXT- Поле ввода текста.
<TEXTAREA>- Область ввода текста.
SELECT- Выбор из списка.
RADIO- Используется для выбора одного из предложенных вариантов.
CHECKBOX- Кнопка-флажок. Используется для выбора варианта.
SUBMIT- Кнопка, которая инициирует вызов обработчика формы.
IMAGE- Изображение. Используется как кнопка типа SUBMIT
Теперь рассмотрим, как значения и состояния этих элементов передаются в обработчик.
IMAGE - В обработчик передаются два значения: имя.x и имя.y, которые представляют собой координату указателя мыши относительно верхнего левого угла изображения. В скрипте устанавливаются переменные $имя_x и $имя_y.
При пересылки строковых значений они перекодируются специальным образом. Все символы, кроме алфавитно-цифровых и знака подчеркивания "_" заменяются знаком процента "%" и двумя шестнадцатеричными цифрами кода. Пробелы заменяются на знак "+". При установке переменных в скрипте производится обратное декодирование.
1)Текстовые поля (text)
Под текстовыми полями в понимаются элементы, создаваемые тегам input со значением параметра type равным text или textarea. Введенное значение передается в виде: Имя_поля =значение. Позволяет пользователям вводить информацию. Пример:
<input type="text" name="txtName" size="10" maxlength="5" value="Текст по умолчанию">
Ниже приведен пример с html-разметкой для такой формы.
<form action='pr1form.php' method='post'>
<input type='text' name='txt[0]' size=’10’ value=''><br>
<input type='text' name='txt[1]' size=’10’ value=''><br>
<input type='text' name='txt[2]' size=’10’ value=''><br>
<input type='text' name='txt[3]' size=’10’ value=''><br>
<input type='text' name='txt[4]' size=’10’ value=''><br>
<input type='submit' value='Отправить'>
</form>
PHP-сценарий будет воспринимать все множество текстовых полей этой формы как единый массив. К отдельным элементам можно обращаться по индексам или использовать перечисление при помощи команд list и each, как это сделано в следующем примере.
<?php //pr1form.php
while(list($key,$val) = each($_POST[txt]))
echo "ключ - $key, значение - $val<br>\n";
?>
Результат:
ключ-0,значение-раз ключ-1,значение-два ключ-2,значение-три ключ-3,значение-четыре ключ - 4, значение – пять
PHP позволяет использовать в формах и ассоциативные массивы. Рассмотрим пример:
<form action="formmail.php" method="post">
Ваше имя:<input type="text" name="user[name]"><br>
Электронный адрес:<input type="text" name="user[email]"> <br>
Сообщение:<textarea name="user[message]"></textarea><br>
<input type="submit" value="Отправить">
</form>
Теперь все введенные пользователем данные будут находиться в массиве $user, что удобно для больших форм.
2) Многострочное поле ввода текста (textarea)
<textarea name="Имя поля" cols="Ширина поля " rows="Число строк">Текст</textarea>
Многострочное поле ввода текста позволяет отправлять сразу несколько строк. По умолчанию тег создает пустое поле шириной в 20 символов и состоящее из двух строк.
Многострочное поле ввода текста начинается с парных тегов <textarea></textarea>. Тэг name задает имя многострочного поля. Также можно указать ширину поля(cols) и число строк(rows). При необходимости можно указать атрибут readonly, который запрещает удалять и изменять текст, который предназначен только для чтения. Пример:
<textarea name="txtArea" cols="15" rows="10" readonly>
Текст, который будет отображен в многострочном поле ввода и который нельзя изменять, т.к. указан атрибут readonly </textarea>.
3) Поле для ввода пароля (password)
Полностью аналогичен текстовому полю, за исключением того что символы, набираемые пользователем, не будут отображаться на экране. Пример:
<input type="password" name="txtName" size="10" maxlength="5">
4) Скрытое текстовое поле(hidden)
Позволяет передавать сценарию какую то служебную информацию, не отображая её на странице:
<input name="email" type="hidden" value="spam@nospam.ru">
Рассмотрим пример
<html >
<head>
<title>Документ без названия</title>
</head>
<body>
<form action="pr2form.php" method="post">
Ваше имя:<BR>
<input type="text" name="name" size="20" maxlength="20">
<P>
Ваш пароль:<BR>
<input type="password" name="password" size="20" maxlength="20">
<p>
Подтвердите пароль:<BR>
<input type="password" name="confirmpassword" size="20" maxlength="20">
<p>
Ваш адрес email:<BR>
<input type="hidden" name="email" size="20" maxlength="20" value="spam@nospam.ru">
<p>
<textarea name="msg" cols="20" rows=”10” ></textarea>
<input type="submit" value="Зарегистрироваться!">
</form>
</body>
</html>
Обработчик на PHP pr2form.php
<?php
$name=$_POST['name'];
$password=$_POST['password'];
$email=$_POST['email'];
$msg = $_POST['msg'];
echo $name;
echo $password;
echo $email;
echo $msg;
?>
Результат:
valera12345rvs@bsu.byaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Если вы хотите, чтобы в многострочном текстовом поле соблюдалось html-форматирование, то используйте функцию nl2br():
<?php
$text = nl2br($_POST['mytext']);
?>
5) Флажок (checkbox)
<input name="Имя переключателя" type=" checkbox" value="Значение">
Если флажок checkbox установлен, то передается значение on, если флажок не установлен, то переменная не передается вообще. Таким образом, установку флажка в скрипте можно проверить, сравнив значение переменной $имя с "on".
Группа флажков состоит из элементов <input>, имеющих одинаковые атрибуты name и type(checkbox). Чтобы элемент был отмечен по умолчанию необходимо пометить его как checked. Если элемент выбран, то сценарию поступит строка имя=значение, в противном случае в обработчик формы не придет ничего. Пример:
<input name="mycolor" type="checkbox" value="red" checked> Красный (выбран по умолчанию)
<input name="mycolor" type="checkbox" value="blue">Синий
<input name="mycolor" type="checkbox" value="black">Черный
<input name="mycolor" type="checkbox" value="white">Белый
Форма для использования переменного количества переключателей строится аналогично. Пример приведен ниже:
<form action='pr3form.php' method='post'>
<input type='chekbox' name='chb[0]' value='1'><br>
<input type='chekbox' name='chb[1]' value='1'><br>
<input type='chekbox' name='chb[2]' value='1'><br>
<input type='chekbox' name='chb[3]' value='1'><br>
<input type='chekbox' name='chb[4]' value='1'><br>
<input type='submit' value='Отправить'>
</form>
Для обработки необходимо определить, включил или нет посетитель сайта тот или иной переключатель. Если включил - то соответствующий элемент массива существует, если нет - то отсутствует. В следующем листинге приведен пример PHP сценария, который распечатывает включенные переключатели:
<?php
echo "выбранные значения<br>\n";
while(list($key,$val) = each($_POST['chb']))
echo "ключ - $key<br>\n";
?>
Элемент checkbox отличается от других элементов тем, что если не один из элементов checkbox’a не выбран, то суперглобальная переменная $_POST вернет пустое значение:
<form action="file.php" method=post>
<input name="mycolor" type="checkbox" value="blue">Синий
<input name="mycolor" type="checkbox" value="black">Черный
<input name="mycolor" type="checkbox" value="white">Белый
<input name="Submit" type=submit value="Выбрать">
</form>
<?php
if (!empty($_POST['mycolor'])) echo $_POST['mycolor']; // Если выбран хоть 1 элемент
else echo "Выберите значение";
?>
6) Переключатель(radio)
Переключатели radio предлагают пользователю ряд вариантов, но разрешает выбрать только один из них.
<input name="Имя переключателя" type=" radio" value="Значение">
Если пользователь выберет переключатель, то сценарию будет передана строка имя=значение. При необходимости можно указать параметр checked, который указывает на то, что перключатель будет иметь фокус при загрузке страницы. Переключатели можно объединять в группы, для этого они должны иметь одно и тоже имя. Пример:
<input name="mycolor" type="radio" value="white"> Белый
<input name="mycolor " type="radio" value="green" checked> Зеленый (выбран по умолчанию)
<input name="mycolor " type="radio" value="blue"> Синий
<input name="mycolor " type="radio" value="red"> Красный
<input name="mycolor " type="radio" value="black"> Черный
Суть радио-кнопок заключается в том что, выбирая одну кнопку, пользователь автоматически снимает выделение с другой кнопки из этого же набора. Кнопки объединяются в набор очень просто: у всех кнопок в наборе одно и тоже имя. А вот значения (то есть параметры value) у кнопок в наборе - разные. И на сайт будет отправлено значение выбранной кнопки с именем набора. Так же как и в случае с текстовыми полями и переключателями имена наборов радио-кнопок должны оформляться как имена элементов массива в PHP. Пример:
<form action='do.html' method='post'>
// первый набор кнопок
<input type='radio' name='rdi[0]' value='1'>
<input type='radio' name='rdi[0]' value='2'>
<input type='radio' name='rdi[0]' value='3'><br>
// второй набор кнопок
<input type='radio' name='rdi[1]' value='1'>
<input type='radio' name='rdi[1]' value='2'>
<input type='radio' name='rdi[1]' value='3'><br>
// третий набор кнопок
<input type='radio' name='rdi[2]' value='1'>
<input type='radio' name='rdi[2]' value='2'>
<input type='radio' name='rdi[2]' value='3'><br>
<input type='submit' value='Отправить'>
</form>
Обработка радио-кнопок объединяет идеи, использование при обработке, как текстовых полей, так и переключателей. Если кнопка выбрана, то соответствующий элемент массива будет содержать ее значение как для текстовых полей. Иначе данный элемент будет отсутствовать в массиве. Ниже приведен листинг примера, обрабатывающего форму с несколькими наборами радио-кнопок.
<?php
while(list($key,$val) = each($rdi))
echo "ключ - $key, значение - $val<br>\n";
?>
7) Выпадающий список (select)
Тэг <select> представляет собой выпадающий или раскрытый список, при этом одновременно могут быть выбраны одна или несколько строк.
Список начинается с парных тегов <select></select>. Теги <option></option> позволяют определить содержимое списка, а параметр value определяет значение строки. Если в теге <option> указан параметр selected, то строка будет изначально выбранной. Параметр size задает, сколько строк будет занимать список. Если size равен 1, то список будет выпадающим. Например для <SELECT> такого вида:
<SELECT NAME="mySelect">
<OPTION VALUE="test1">test1</OPTION>
<OPTION VALUE="test2">test2</OPTION>
<OPTION VALUE="test3">test3</OPTION>
</SELECT>
Cтрока будет содержать mySelect=test1, в случае выбора первого элемента списка. Переменная в скрипте будет выглядеть так: $mySelect.
Задача: Пусть необходимо создать выпадающий список с годами с 2000 по 2050.
Решение: Необходимо создать HTML форму c элементом SELECT и PHP – сценарий для обработки формы.
Обсуждение:
Для начала создадим два файла: form.html и action.php. В файле form.html будет содержаться html-форма с выпадающим списком.
<select class="input" type=text name=years>
<?php
$year = 2000;
for ($i = 0; $i <= 50; $i++) // Цикл от 0 до 50
{
$new_years = $year + $i; // Формируем новое значение
echo '<option value='.$new_years.'>'.$new_years.'</option>'; //Формируем новую строчку
}
?>
</select>
Как видно, второй пример с циклом, более компактный. Думаю, не стоит приводить скрипт обработчика данной формы, потому что он обрабатывается точно так же как текстовое поле, т.е. значения списка можно извлечь из суперглобального массива $_POST.
Элемент <SELECT> может иметь атрибут MULTIPLE, что позволяет выбирать несколько значений из списка. В этом случае к имени элемента <SELECT> необходимо добавить пару квадратных скобок: имя[]. Строка будет выглядеть так: имя[]=значение&имя[]=значение..., а в скрипте доступ к выбранным значениям можно осуществить, как к элементам массива $имя.
В случае, если не заданы атрибуты VALUE, то передаваться будет то, что содержится между тэгами <OPTION> и </OPTION>.
Если указан атрибут multiple, то разрешено выбирать несколько элементов из списка(при size = 1 не имеет смысла).
<select name="Имя списка" size = “Размер” multiple>
<option value=”Значение”>Отображаемый текст в списке</option>
</select>
При передаче данных выпадающего списка сценарию передается строка имя=значение, а при раскрытом списке передается строка имя=значение1&имя=значение2&имя=значениеN.
Задача: Загрузка файла на сервер
Создадим HTML-форму для отправки файла на сервер.
<FORM ENCTYPE="multipart/form-data" ACTION="action.php" METHOD=POST>
<INPUT NAME="myfile" TYPE="file">
<INPUT TYPE="submit" value="Передать файл">
</FORM>
В данной html-форме присутствует элемент browse, который открывает диалоговое окно для выбора файла для загрузки на сервер. При нажатии на кнопку "Передать файл", файл передается сценарию-обработчику.
Затем необходимо написать сценарий обработчик action.php. Перед написанием обработчика необходимо определиться в какой каталог мы будет копировать файл:
<?php
if(isset($_FILES["myfile"])) // Если файл существует
{
$catalog = "../image/"; // Наш каталог
if (is_dir($catalog)) // Если такой каталог есть
{
$myfile = $_FILES["myfile"]["tmp_name"]; // Времменый файл
$myfile_name = $_FILES["myfile"]["name"]; // Имя файла
if(!copy($myfile, $catalog)) echo 'Ошибка при копировании файла '.$myfile_name // Если неудалось скопировать файл
}
else mkdir('../image/');
// Если такого каталога нет, то мы его создадим
}
?>
8) Кнопка сброса формы(Reset)
<input type="reset" name="Reset" value="Очистить форму">
При нажатии на кнопку reset, все элементы формы будут установлены в то состояние, которое было задано в атрибутах по умолчанию, причем отправка формы не производиться.
9) Кнопка отправки формы (submit)
Служит для отправки формы сценарию.
<input type="submit" name="Имя кнопки" value="Текст кнопки">
Атрибут name необходим если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=значение. Кнопка SUBMIT тоже может передавать значение из атрибута VALUE в обработчик.
10) Кнопка для загрузки файлов (browse)
Служит для реализации загрузки файлов на сервер. Объект browse начитается с парных тегов <form></form>. Начинающий тэг <form> содержит необходимый атрибут encrypt. Атрибут encrypt принимает значение multipart/form-data, который извещает сервер о том, что вместе с обычной информацией посылается и файл. При создании текстового поля также необходимо указать тип файла – “file”.
<form enctype="multipart/form-data" action="upload.php" method="post">
Загрузить файл: <input name="my_file" type="file">
<input type="submit" value="Отправить">
</form>
При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида: <input type="image" src="image.gif" name="sub" /> . Когда пользователь щелкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными - sub_x и sub_y. Они содержат координаты нажатия пользователя на изображение. Рассмотрим пример:
<html><head>
<title>Simpleform.html </title>
</head>
<body>
<form action="form.php" method="GET">
Имя:<input type="text" name="fio"><p>
<input type="image" src="image.gif" name="sub" />
</form>
</body>
</html>
<?php //form.php
$fio=$_GET['fio'];
echo "Hello, $fio<br>";
print_r ($_GET);
?>
Hello, valera Array ( [fio] => valera [sub_x] => 83 [sub_y] => 64 )