Лекция: Обработка форм
Все данные, которые вы хотите получить из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.
Задача: Вам необходимо получить данные из текстового поля и многострочного поля ввода и передать их сценарию.
Решение: Необходимо создать HTML форму и PHP – сценарий для обработки формы.
Обсуждение:
Создадим два файла: form.html и action.php. В файле form.html будет содержаться html-форма с текстовым полем mytext и текстовой областью msg:
<form action=«action.php» name=«myform» method=«post»>
<input type=«text» name=«mytext» size=«50»>
<textarea name=«msg» cols=«20» rows=”10” ></textarea>
<input name=«Submit» type=submit value=«Отправить данные»>
</form>
В этой html-форме нас интересует 3 атрибута: action который указывает путь к обработчику формы, имя текстового поля (mytext) и имя многострочного поля вода (msg). Также в форме присутствует кнопка, при нажатии на которую происходит передача данных.
После того как html-форма готова нам необходимо создать обработчик формы action.php:
<?php
$text = $_POST['mytext'];
$msg = $_POST['mytext'];
echo $text;
echo "";
echo $msg;
?>
После того как мы введем любые значение в текстовые поля и нажмем на кнопку «Отправить данные» html-форма отправить значения сценарию action.php.
После этого в переменных $text и $msg будут содержаться значения текстового поля и многострочного поля ввода соответственно, значения которых взяты из суперглобальных переменных $_POST.
Если вы хотите, чтобы в многострочном текстовом поле соблюдалось html-форматирование, то используйте функцию nl2br():
<?php
$text = nl2br($_POST['mytext']);
?>
Задача: Пусть необходимо создать выпадающий список с годами с 2000 по 2050.
Решение: Необходимо создать HTML форму c элементом SELECT и PHP – сценарий для обработки формы.
Обсуждение:
Для начала создадим два файла: form.html и action.php. В файле form.html будет содержаться html-форма с выпадающим списком. Причем значения в списке можно указать двумя способами:
I. Ввод данных вручную:
<select class=«input» type=text name=years>
<option value='2000'>2000</option>
<option value='2001'>2001</option>
<option value='2002'>2002</option>
……………………………………………
<option value='2050'>2050</option>
</select>
II. Ввод данных через цикл:
<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.
Задача: Загрузка файла на сервер
<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/');
// Если такого каталога нет, то мы его создадим
}
?>
Данный пример демонстрирует создание каталога и копирование файла в этот каталог на сервер.
Элемент 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 «Выберите значение»;
?>
Более сложные переменные формы
<?php//form5.php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .
'">Попробуйте еще раз</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=«post»>
Имя: <input type=«text» name=«personal[name]» /><br />
Email: <input type=«text» name=«personal[email]» /><br />
Пиво: <br />
<select multiple name=«beer[]»>
<option value=«аливария»>аливария</option>
<option value=«криница»>криница</option>
<option value=«речицкое»>речицкое</option>
</select><br />
<input type=«hidden» name=«action» value=«submitted» />
<input type=«submit» name=«submit» value=«Go!» />
</form>
<?php
}
?>
После выполнения PHP получим следующую страницу HTML
<form action="/myphp/form5.php" method=«post»>
Имя: <input type=«text» name=«personal[name]» /><br />
Email: <input type=«text» name=«personal[email]» /><br />
Пиво: <br />
<select multiple name=«beer[]»>
<option value=«аливария»>аливария</option>
<option value=«криница»>криница</option>
<option value=«речицкое»>речицкое</option>
</select><br />
<input type=«hidden» name=«action» value=«submitted» />
<input type=«submit» name=«submit» value=«Go!» />
</form>
Результат:
Array
(
[personal] => Array
(
[name] => val
[email] => rom
)
[action] => submitted
[submit] => Go!
)
При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида: <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 )