metoda / Ml_ITIn_2013
.pdf161
Открыть. Диалог Выбор файла закроется, а имя выбранного файла с полным путем будет помещено в поле ввода Файл для загрузки (рис. 3.133).
Нажмите кнопку Загрузить на сервер(рис. 3.133).
Рис. 3.133. HTML форма на экране.
По окончании загрузки в рабочем окне браузера появится сообщение об успешном ее завершении (Рис. 3.134).
Рис. 3.134. Сообщение об успешном завершении загрузки файла.
Чтобы убедиться, что файл действительно был загружен, выполните следующие действия:
Выберите команду меню браузера Файл/Открыть. На экране появится диалог Открыть (рис. 3.135)
Рис. 3.135. Диалог Открыть
162
В поле ввода Открыть введите полный путь к загруженному файлу, в нашем случае это w:/tmp/footer.jpg, и нажмите клавишу Enter.
Или в поле Адрес браузера укажите file://localhost/W:/tmp/footer.jpg и
на экране получите следующее (рис. 3.136) Окно браузера отобразит загруженный на ваш Web-сервер файл.
Рис. 3.136. Файл, который был загружен с использованием созданного сценария
Если в программе Lab9_0.php указать другой обработчик (например, Lab9_2.php, рис. 3.137) и переслать этот же файл: "W:\home\localhost\www\php\img\footer.jpg"
<?PHP
$myfile_size = $_FILES["myfile"]["size"];//Размер файла $myfile_type = $_FILES["myfile"]["type"];//Тип файла $error_flag = $_FILES["myfile"]["error"];
$myfile_name = $_FILES["myfile"]["name"];//Имя файла if ($myfile_name !="")
{
echo "Можно копировать файл myfile=".$_FILES["myfile"]["tmp_name"]." <br> ";
if(@copy($_FILES["myfile"]["tmp_name"], "w:/tmp/".$_FILES["myfile"]["name"]) )
{
echo("Файл успешно загружен <br>"); $myfile = $_FILES["myfile"]["tmp_name"];
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile)); fclose($fp);
// Вывод содержимого файла на экран print($content);
}
else
{
echo("Ошибка. Невозможно скопировать файл!!");
}
}
else
163
{
die ("Файл не обнаружен !!");
}
?>
<html>
<head>
<title>Lab9_2 Загрузка файла</title>
</head>
<body>
<h2>Загрузка файла завершена успешно</h2>
<p>Вы отправили файл <? echo "$myfile_name"; ?> </p> <p>Размер файла: <? echo "$myfile_size"; ?> байт </p>
<p>Тип файла: <? echo "$myfile_type"; ?> </p> <p>Результат получен в обработчике Lab9_2.php </p> </body>
</html>
Рис. 3.137. Файл, который был загружен с использованием созданного сценария
Запуск модифицированной программы Lab9_0.php приводит к следующему результату (рис. 3.138).
Рис. 3.138. Файл, который был загружен с использованием созданного сценария Lab9_2.php
Задание 2. Автоматическая отправка данных по электронной почте. Lab9_4.php.
Вывести пользовательские данные в браузере несложно, но вряд ли это можно назвать содержательной обработкой пользовательского ввода. Один из способов обработки информации заключается в ее отправке по электронной почте -- например, администратору сайта.
В следующем разделе, создается небольшая форма (рис. 3.139), в которой пользователь вводит информацию и комментарии по поводу сайта.
После ввода информации данные форматируются соответствующим образом (рис. 3.140) и передаются стандартной функции PHP mail( ).
Функция mail( ) отправляет сообщение заданному адресату по электронной почте.
164
Рис. 3.139. Форма ввода
Синтаксис функции mail( ).
boolean mail (string получатель, string тема, string сообщение [, string
доп_заголовки])
Впараметре тема передается тема сообщения. Параметр сообщение содержит текст сообщения, а необязательный параметр доп_заголовки предназначен для включения дополнительной информации (например, атрибутов форматирования HTML), пересылаемой с сообщением.
Всистеме UNIX функция mail( ) использует утилиту sendmail. В Windows эта функция работает лишь при наличии установленного почтового сервера или если функция mail( ) связана с работающим сервером SMTP. Эта задача решается модификацией переменной SMTP в файле php.ini.
Если вы сделали все необходимое и функция mail( ) работает в вашей системе, попробуйте выполнить следующий фрагмент (конечно, адрес webserver@example.com заменяется вашим настоящим адресом электронной почты).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Lab9_4 Отправка по Email</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#cbda74" vlink="#808040" alink="#808040"> <p>Lab9_4.php</p>
165
<?
function sendMail($name,$email,$feedback)//пользовательская функция, //используюшая стандартную функцию Email
//$name |
- Фамилия, имя клиента |
|
- |
Email клиента |
|
//$feedback |
-мнение клиента |
|
{ |
|
|
$toaddress = 'feedback@example.com'; $subject = 'Обратная связь от Web-сайта'; $mailcontent = 'ФИО клиента: '.$name."\n"
.'Email-адрес клиента: '.$email."\n"
."Комментарии клиента: \n".$feedback."\n"; $fromaddress = 'From: webserver@example.com';
echo ("<br>Сообщение на Mail <br>".$mailcontent."<br>"); // кому тема сообщение отправитель mail($toaddress, $subject, $mailcontent, $fromaddress) or die("Could not send email!");
|
// |
|
echo ("После вызова функции nl2br<br>"); |
|
//функция nl2br заменяет в переданной ей строке все |
|
//символы новой строки (\n) на символ <br/>. |
|
echo ("Сообщение <br>".nl2br($mailcontent).""); |
return |
true; |
} |
// конец тела функции |
// тело основной пограммы $name = $_POST['name']; $seenform=$_POST['seenform']; $email=$_POST['email']; $feedback=$_POST['feedback'];
// Создать форму $form = "
<form action=\"Lab9_4.php\" method=\"post\">
<input type=\"hidden\" name=\"seenform\" value=\"z\">
<b>Пожалуйста, сообщите Ваше мнение о нашей работе.</b><br> Фамилия, имя:<br>
<input |
type=\"text\" |
name=\"name\" |
size=\"20\" |
maxlength=\"20\" |
value=\"$name\"><br> |
|
|
|
|
Ваш Email:<br> |
|
|
|
|
<input |
type=\"text\" |
name=\"email\" |
size=\"20\" |
maxlength=\"40\" |
value=\"$email\"><br>
Ваше мнение:<br>
<textarea name=\"feedback\" rows=\"3\" cols=\"30\"></textarea><br> <input type=\"submit\" value=\"Отправить мнение\">
166
</form>";//конец создания формы
if ($seenform != "z"): // Заполнялась ли форма ранее? print "$form"; // Первая прорисовка формы
else: // Пользователь заполнил форму. Проверить введенные данные. $error_flag = "n"; //признак что ошибок при заполнении формы нет
if ($name == ""): //поле имени не содержит информацию
print "<font color=\"red\"> Вы забыли ввести Ваше имя </font><br>"; $error_flag = "y";//признак наличия ошибки
else:
if ($email == ""):// поле адреса не содержит информацию $error_flag = "y";
print "<font color=\"red\">Укажите правильный email address! Он не должен быть пустым.</font><br>";
else:
//Преобразовать все алфавитные символы в адресе электронной почты $email = strtolower(trim($email));// к нижнему регистру
endif; //if ($email == "") endif; //if ($name == "")
if(!empty($_POST['email'])):
//Убедиться в правильности синтаксиса адреса электронной почты //Будем считать, что стандартный адрес электронной почты выглядит так:
//admin@mail.ru
//Адрес состоит из двух частей это:
// |
admin - имя пользователя. |
// |
mail.ru - домен, доменное имя. |
//Их разделяет знак @(собака).
//Имя пользователя - может состоять из букв разного регистра, //цифр, знаков подчѐркивания, точек, минусов.
//Доменное имя - так же может состоять из букв разного //регистра, цифр, знаков подчѐркивания, точек, минусов.
if(preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email'])): echo $_POST['email']. " Email - Правильный.";
$error_flag = "n"; sendMail($name,$email,$feedback); //отсылка почты
else:
$error_flag = "y";
echo $_POST['email']. " Email - НЕправильный.<br>";
print "<font color=\"red\"> Пример правильного возможного email: admin@mail.ru</font><br>";
endif;
else:
//echo "Вы не ввели email.".$error_flag; if ($error_flag == "y"):
167
//Если флаг ошибки $error_flag установлен, то
//echo "заново отобразить форму.";
print "$form";
else: // Обработать данные пользователя
print "<br>Данные введены правильно<br>"; sendMail($name,$email,$feedback);
endif;
endif; //if(!empty($_POST['email'])) endif;
?>
</body>
</html>
Рис. 3.140. Файл Lab9_4.php для создания формы ввода и отправки данных по электронной почте.
Пусть пользователь ввел в форму (рис. 3.139) следующую информацию
(рис. 3.141).
Рис. 3.141. Заполненная форма (файл Lab9_4.php).
Если пользователь использует кнопку , то программа проверит исходные данные и в случаи их правильности вызовет пользовательскую функцию sendMail(), которая подготовит данные для пересылки и вызовет стандартную функцию mail( ) и пользовательские данные отправляются по адресу, определяемому переменной $toaddress. Затем в браузере выводится сообщение для пользователя.
Рис. 3.142. Сообщение для пользователя (файл Lab9_4.php, функция sendMail()).
168
В теле функции sendMail() использована стандартная функция nl2br, которая заменяет в переданной ей строке все символы новой строки (\n) на символ <br/>.
Таким образом после оператора
echo ("Сообщение <br>".nl2br($mailcontent)."");
будет выведено сообщение вида (рис. 3.143)
Рис. 3.143. Сообщение для пользователя (файл Lab9_4.php, функция nl2br() ).
Задание 3. Сохранение пользовательских данных в текстовом файле
Lab9_5.php
Пользовательские данные сохраняются в текстовом файле для последующего статистического анализа, поиска и т. д. -- короче, любой обработки по вашему усмотрению. В листинге 3.144, как и в предыдущих примерах, данные формы обрабатываются в одном сценарии. Пользователю предлагается ввести четыре объекта данных: имя, адрес электронной почты, язык и профессию. Введенная информация сохраняется в текстовом файле lab9_5.txt. Элементы данных разделяются символами «вертикальная черта»
(|).
Листинг 9.18. Сохранение пользовательской информации в текстовом файле.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Lab9_5 Запись в текстовый файл</title>
</head>
<body>
<p>Lab9_5.php Запись ввода в текстовый файл lab9_5.txt</p>
<?PHP //тело основной программы
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
//Например, DOCUMENT_ROOT= W:/home/localhost/www $name = $_POST['name'];
$seenform=$_POST['seenform']; $email=$_POST['email'];
169
$job=$_POST['job']; $language=$_POST['language'];
// Создать форму |
|
|
|
|
$form = " |
|
|
|
|
<form action=\"Lab9_5.php\" method=\"post\"> |
|
|
||
<input type=\"hidden\" name=\"seenform\" value=\"z\"> |
|
|||
<b>Укажите Ваши данные!<br> |
|
|
||
<?php /*?> <?php Внимание! Тег b не закрываем */?> |
|
|||
Фамилия, имя:<br> |
|
|
|
|
<input |
type=\"text\" |
name=\"name\" |
size=\"20\" |
maxlength=\"20\" |
value=\"$name\"><br> |
|
|
|
|
Ваш Email:<br> |
|
|
|
|
<input |
type=\"text\" |
name=\"email\" |
size=\"20\" |
maxlength=\"40\" |
value=\"$email\"><br>
Ваш предпочитаемый язык:<br>
<select name=\"language\"> <option value=\"\">Выберите язык:
<option value=\"English\">Английский <option value=\"Spanish\">Испанский <option value=\"Italian\">Итальянский <option value=\"French\">Французкий </select><br>
Ваше занятие:<br> <select name=\"job\">
<option value=\"\">Кто Вы?: <option value=\"student\">Студент
<option value=\"programmed\">Программист <option value=\"manager\">Менeджер <option value=\"slacker\">Пенсионер </select><br>
<input type=\"submit\" value=\"Зафиксировать в файле\"> </form>";
if ($seenform != "z"): // Заполнялась ли форма ранее?
print "$form"; // echo " Первая прорисовка формы"; //exit;
else://Заполнили форму. Проверить введенные данные. $error_flag = "n"; //признак что ошибок нет
if ($name == ""):
// Убедиться в том, что поле имени содержит информацию
print "<font color=\"red\"> Вы забыли ввести Ваше имя</font><br>"; $error_flag = "y";//признак наличия ошибки
else:
170
//Убедиться в том, что поле адреса содержит информацию if ($email == ""):
$error_flag = "y";
print "<font color=\"red\">Укажите правильный email address! Он не должен быть пустым.</font><br>";
else:
//Преобразовать все алфавитные символы в адресе
//электронной почты к нижнему регистру
$email = strtolower(trim($email)); endif; //if ($email == "")
endif; //if ($name == "")
if(!empty($_POST['email'])and $error_flag == "n"):
//Убедиться в правильности синтаксиса адреса электронной почты //Будем считать, что стандартный адрес электронной почты выглядит так:
// admin@mail.ru
//Адрес состоит из двух частей это:
// |
admin - имя пользователя. |
// |
mail.ru - домен, доменное имя. |
//Их разделяет знак @(собака).
//Имя пользователя - может состоять из букв разного //регистра, цифр, знаков подчѐркивания, точек, минусов. //Доменное имя - так же может состоять из букв разного //регистра, цифр, знаков подчѐркивания, точек, минусов.
if(preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email'])): //echo $_POST['email']. " Email - Правильный.<br>";
$error_flag = "n";
echo "Данные введены. Можно формировать файл lab9_5.txt<br>";
$fd = fopen($DOCUMENT_ROOT."/../lab9_5.txt", 'ab'); echo 'Открыть файл для добавления<br>Путь='
.$DOCUMENT_ROOT."/../lab9_5.txt".'<br>Результат открытия='.$fd.'<br
/>';
if (!$fd): // ошибка открытия файла
echo '<p><strong> Файл lab9_5.txt не доступен. <br></strong> </p></body></html>';
exit;//выход из программы
endif;
//Убедиться, что во введенных данных не встречается вертикальная черта.
$name = str_replace("|", "", $name); $email = str_replace("|", "", $email);
// Построить строку с пользовательскими данными