Работа с формами
Для передачи данных от пользователя Web-страницы на сервер используются HTML-формы. Для работы с формами в PHP предусмотрен ряд специальных средств.
Предварительно определенные переменные
В PHP существует ряд предварительно определенных переменных, которые не меняются при выполнении всех приложений в конкретной среде. Их также называют переменными окружения или переменными среды. Они отражают установки среды Web-сервера Apache, а также информацию о запросе данного браузера. Есть возможность получить значения URL, строки запроса и других элементов HTTP-запроса.
Все предварительно определенные переменные содержатся в ассоциативном массиве $GLOBALS. Кроме переменных окружения этот массив содержит также глобальные переменные, определенные в программе.
Пример 1
<html>
<head>
<title>Просмотр массива $GLOBALS</title>
</head>
<body>
<?php
$a = "Hello!";
foreach ( $GLOBALS as $key=>$value )
echo "\$GLOBALS[\"$key\"] == $value<br>";
?>
</body>
</html>
В результате на экране появится список всех глобальных переменных, включая переменные окружения. Наиболее часто используемые из них:
| Переменная | Описание | Cодержание | |||||||||||||||||||||||||||
$HTTP_USER_AGENT| Название и версия клиента |
CCBot/1.0 (+http://www.commoncrawl.org/bot.html) | $REMOTE_ADDR | IP-адрес |
38.107.179.230 | $HTTP_X_FORWARDED_FOR | Внутренний IP-адрес клиента |
| $REQUEST_METHOD | Метод запроса (GET или POST) |
GET | $QUERY_STRING | При запросе GET закодированные данные, передаваемые вместе с URL |
| $REQUEST_URL | Полный адрес клиента, включая строку запроса |
| $HTTP_REFERER | Адрес страницы, с которой был сделан запрос |
| $PHP_SELF | Путь к выполняемой программе |
/index.php
| $_SERVER['SERVER_NAME'] | Домен | htmlweb.ru | $_SERVER['REQUEST_URI'] | Путь | /php/php_form.php
| |
Обработка ввода пользователя
PHP-программу обработки ввода можно отделить от HTML-текста, содержащего формы ввода, а можно расположить на одной странице.
Пример 2
<?php
if ( ! isset( $cardnumber ) )
$m = "Введите номер карточки";
elseif ( $cardnumber == "" )
$m = "Ваш номер пуст!";
else
$m = "Ваш номер: $cardnumber";
?>
<html>
<head>
<title>Пример обработки ввода</title>
</head>
<body>
<h1><?php echo $m?></h1>
<form name="form1" action="<?php echo $PHP_SELF?>" method="post">
<p>Номер карточки:
<input name="cardnumber" type="text" size="20">
</form>
</body>
</html>
Здесь отсутствует кнопка передачи данных, т.к. форма, состоящая из одного поля, передается автоматически при нажатии клавиши <Enter>.
При обработки элемента с многозначным выбором для доступа ко всем выбранным значениям нужно к имени элемента добавить пару квадратных скобок.
Пример 3.1
ex.htm<html> <head> <title>Список</title> </head> <body> <form name="form1" action="ex1.php" method="post"> <select name="Item[]" size=5 multiple> <option>Чай <option>Кофе <option>Молоко <option>Ветчина <option>Сыр </select> <input type="submit" value="ВВОД"> </form> </body> </html>
Пример 3.2
ex1.php<html> <head> <title>Обработка списка (файл ex1.php)</title> </head> <body> <?php echo "Ваш заказ: <p><ul>"; foreach ( $Item as $value ) echo "<li>$value"; echo "</ul>"; ?> </body> </html>
Пример 4. Прием значений от checkbox-флажков.
< ?
if (@$_REQUEST['doGo']) {
foreach (@$_REQUEST['known'] as $k=>$v) {
if($v) echo \"Вы знаете язык программирования $k!<br>\";
else echo \"Вы не знаете языка программирования $k. <br>\";
}
}
?>
<form action=\"< ?=$_SERVER['SCRIPT_NAME']?>\" method=post>
Какие языки программирования вы знаете?<br>
<input type=hidden name=\"known[PHP]\" value=\"0\">
<input type=checkbox name=\"known[PHP]\" value=\"1\">PHP<br>
<input type=hidden name=\"known[Perl]\" value=\"0\">
<input type=checkbox name=\"known[Perl]\" value=\"1\">Perl<br>
<input type=submit name=\"doGo\" value=\"Go!\">
</form>
Пример 5
< ?php ## Модель скрипта, принимающего текст от пользователя. if (@$_REQUEST['text']) echo htmlspecialchars($_REQUEST['text']).\"<hr>\"; ?> <form action=\"< ?=$_SERVER['SCRIPT_NAME']?>\" method=\"post\"> <textarea name=\"text\" cols=\"60\" rows=\"10\"> < ?=@htmlspecialchars($_REQUEST['text'])?> </textarea><br> <input type=\"submit\"> </form>
Можно обрабатывать формы, не заботясь о фактических именах полей. Для этого можно использовать (в зависимости от метода передачи) ассоциативный массив $HTTP_GET_VARS или $HTTP_POST_VARS. Эти массивы содержат пары имя/значение для каждого элемента переданной формы.
Пример 6
<html>
<head>
<title>Обработка произвольного ввода
независимо от метода передачи</title>
</head>
<body>
<?php
$params = ( $REQUEST_METHOD == "GET" )
? $HTTP_GET_VARS : $HTTP_POST_VARS;
foreach ( $params as $key=>$value )
echo "$key == $value<br>";
?>
</body>
</html>
Пример 7. Обработка нажатия на кнопку с использованием оператора '@'.
< ? if (@$_REQUEST['submit']) echo \"Кнопка нажата!\" ?> <form action=\"< ?=$_SERVER['SCRIPT_NAME']?>\"> <input type=\"submit\" name=\"submit\" value=\"Go!\"> </form>
С помощью функции header(), послав браузеру заголовок "Location", можно перенаправить пользователя на новую страницу. Например:
header ( "Location: ex2.php" );
Передача файла на сервер. Залить файл. UpLoad
PHP позволяет передавать на сервер файлы. HTML-форма, предназначенная для передачи файла, должна содержать аргумент enctype="multipart/form-data".
Кроме того в форме перед полем для копирования файла должно находиться скрытое поле с именем max_file_size. В это скрытое поле должен быть записан максимальный размер передаваемого файла (обычно не больше 2 Мбайт).
Само поле для передачи файла - обычный элемент INPUT с аргументом type="file".
Например:
<form enctype="multipart/form-data" action="<?echo $PHP_SELF?>" method="post"> <input type="hidden" name="max_file_size" value="51200"> <input type="file" name="myfile"><br> <input type="submit" value="ВВОД"> </form>
После того, как файл передан на сервер, он получает уникальное имя и сохраняется в каталоге для временных файлов. Полный путь к файлу записывается в глобальную переменную, имя которой совпадает с именем поля для передачи этого файла. Кроме этого PHP сохраняет еще некоторую дополнительную информацию о переданном файле в других глобальных переменных:
| Переменная | Описание | ||||||
$myfile| Путь к временному файлу
| $myfile_name | Имя переданного файла
| $myfile_size | Размер переданного файла
| $myfile_type | Тип переданного файла в системе MIME
| |
Пример 8
<html>
<head>
<title>Обработка переданного файла</title>
</head>
<?php
if ( ! isset( $myfile ) )
{
echo "путь: $myfile<br>";
echo "имя: $myfile_name<br>";
echo "размер: $myfile_size<br>";
echo "тип: $myfile_type<br>";
}
?>
<body>
<form enctype="multipart/form-data"
action="<?echo $PHP_SELF?>" method="post">
<input type="hidden" name="max_file_size" value="51200">
<input type="file" name="myfile"><br>
<input type="submit" value="ВВОД">
</form>
</body>
</html>
Примеры загрузки файлов на сервер
Если возникнут проблеммы с перекодировкой сервером загруженного файла, символ с кодом 0х00 заменен на пробел (символ с кодом 0х20), допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки.
<Location />
CharsetRecodeMultipartForms Off
</Location>
Ещё примеры работы с формами на PHP
Читать дальше: Работа с файлами
Популярное:
- Генератор Sitemap
- Отправить SMS
- Генератор Robots.txt
- Полезные ссылки
- Чей IP-адрес?
- Чей домен?
- Где телефон?
- Примеры Ajax
- Примеры PHP
- Примеры Javascript
- Примеры HTML, CSS
- Справочник PHP
- GIF-аниматор
- Сайт в ТОП
Содержание:
- HTML
- JavaScript
- PHP + MySQL
- Введение в PHP
- Основы языка
- Использование
массивов - $_server
- Создание функций
- Строки
- Функции работы
со строками - Объектное
программирование - Формы
- Файлы
- MySQL
- Cookie
- htaccess
- Безопасность
- Сессии
- Отправка почты
- Кэширование
- Дата, время
- Математические
функции - Дополнительные
возможности - Регулярные
выражения - Библиотека Curl
- IMAP, POP3, NNTP
- Оптимизация
- Примеры скриптов
- XML + XSLT
- AJAX
- Графика CorelDRAW
- SEO
- Сервисы
- Разное
- Шаблоны сайтов
Новое за неделю
Сейчас на сайте: 489