Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь

Поиск по сайту



PHP Поиск



Работа с формами

Для передачи данных от пользователя 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_ADDRIP-адрес 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

Читать дальше: Работа с файлами

Популярное:


Содержание:


Новое за неделю



Сейчас на сайте: 489