Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_ekzamen.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
2.49 Mб
Скачать

72.Работа с формами. Обработка ввода пользователя. Передача файла на сервер. Отправка почты с вложением из php.

Для передачи данных от пользователя Web-страницы на сервер используются HTML-формы. Для работы с формами в PHP предусмотрен ряд специальных средств.

Предварительно определенные переменные

В PHP существует ряд предварительно определенных переменных, которые не меняются при выполнении всех приложений в конкретной среде. Их также называют переменными окружения или переменными среды. Они отражают установки среды Web-сервера Apache, а также информацию о запросе данного браузера. Есть возможность получить значения URL, строки запроса и других элементов HTTP-запроса.

Все предварительно определенные переменные содержатся в ассоциативном массиве $GLOBALS. Кроме переменных окружения этот массив содержит также глобальные переменные, определенные в программе.

<html>

<head>

<title>Просмотр массива $GLOBALS</title>

</head>

<body>

<?php

$a = «Старт!!!";

foreach ( $GLOBALS as $key=>$value )

echo "\$GLOBALS[\"$key\"] == $value<br>";

?>

</body>

</html>

В результате на экране появится список всех глобальных переменных,

включая переменные окружения. Наиболее часто используемые из них:

Обработка ввода пользователя

PHP-программу обработки ввода можно отделить от HTML-текста, содержащего формы ввода, а можно расположить на одной странице.

<?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>.

При обработки элемента с многозначным выбором для доступа ко всем выбранным значениям нужно к имени элемента добавить пару квадратных скобок.

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>

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>

Прием значений от 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>

< ?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. Эти массивы содержат пары имя/значение для каждого элемента переданной формы.

<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>

Обработка нажатия на кнопку с использованием оператора '@'.

< ?PHP

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

<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 из каталога Apache(/usr/local/apache) следующие строки.

<Location />

CharsetRecodeMultipartForms Off

</Location>

Отправка почты с вложением из PHP

<?

function XMail( $from, $to, $subj, $text, $filename)

{

$f = fopen($filename,"rb");

$un = strtoupper(uniqid(time()));

$head = "From: $from\n";

$head .= "To: $to\n";

$head .= "Subject: $subj\n";

$head .= "X-Mailer: PHPMail Tool\n";

$head .= "Reply-To: $from\n";

$head .= "Mime-Version: 1.0\n";

$head .= "Content-Type:multipart/mixed;";

$head .= "boundary=\"----------".$un."\"\n\n";

$zag = "------------".$un."\nContent-Type:text/html;\n";

$zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";

$zag .= "------------".$un."\n";

$zag .= "Content-Type: application/octet-stream;";

$zag .= "name=\"".basename($filename)."\"\n";

$zag .= "Content-Transfer-Encoding:base64\n";

$zag .= "Content-Disposition:attachment;";

$zag .= "filename=\"".basename($filename)."\"\n\n";

$zag .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

if (!@mail("$to", "$subj", $zag, $head))

return 0;

else

return 1;

?>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]