Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ТОБД.doc
Скачиваний:
24
Добавлен:
13.04.2015
Размер:
8.25 Mб
Скачать

Создание сценария загрузки.

Перед началом создания сценария запомните список переменных, которые создаются автоматически после успешной загрузки файла. Основная часть имени переменных - myfile - является именем поля ввода созданной в предыдущей форме (см. строку 15, рис 3.131).

$myfile - значение ссылается на временный файл на Web-сервере.

$myfile_name - значение является действительным именем файла, который был загружен. Например, если имя файла было me.jpg, то значение $myfile_name будет me.jpg.

$myfile_size - значение является длиной загруженного файла в байтах.

$myfile_type — значение является типом загруженного файла, таким как, например, image/jpg.

Созданный вами файл должен выглядеть так, как показано на рис. 9.3.

Рис. 3.131. Код HTML формы.

Целью создаваемого сценария является следующее:

взять загруженный файл, скопировать его в папку для документов Web-сервера и вернуть подтверждающее сообщение пользователю, содержащее все переменные из указанного выше списка.

Создайте с помощью текстового редактора новый файл с именем Lab9_1.php (рис. 3.131).

Сохраните созданный файл с именем Lab9_1.php в папке для документов вашего Web-сервера.

Загрузкa файла с помощью формы и сценария

Теперь, когда вы создали форму и сценарий для загрузки файла, проверим, как все это работает.

Запустите свой Web-браузер, в поле ввода Адрес введите

http://localhost/php/Lab9_0.php

и нажмите клавишу Enter. Браузер загрузит страницу Загрузка файла (рис. 3.130). Нажмите кнопку Обзор. На экране появится диалог Выбор файла. В качестве файла пересылки укажите файл "W:\home\localhost\www\php\img\footer.jpg" (рис. 3.132).

Рис. 3.132. Выбор файла для отсылки на сервер.

Используя этот диалог, найдите на своем компьютере любой файл с изображением размером не более 2 Мбайт, выберите его и нажмите кнопку Открыть. Диалог Выбор файла закроется, а имя выбранного файла с полным путем будет помещено в поле ввода Файл для загрузки (рис. 3.133).

Нажмите кнопку Загрузить на сервер(рис. 3.133).

Рис. 3.133. HTML форма на экране.

По окончании загрузки в рабочем окне браузера появится сообщение об успешном ее завершении (Рис. 3.134).

Рис. 3.134. Сообщение об успешном завершении загрузки файла.

Чтобы убедиться, что файл действительно был загружен, выполните следующие действия:

Выберите команду меню браузера Файл/Открыть. На экране появится диалог Открыть (рис. 3.135)

Рис. 3.135. Диалог Открыть

В поле ввода Открыть введите полный путь к загруженному файлу, в нашем случае это 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

{

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( ) отправляет сообщение заданному адресату по электронной почте.

Рис. 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>

<?

function sendMail($name,$email,$feedback)//пользовательская функция,

//используюшая стандартную функцию Email

//$name - Фамилия, имя клиента

//$email - 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=\"Отправить мнение\">

</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"):

// Если флаг ошибки $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()).

В теле функции sendMail() использована стандартная функция nl2br, которая заменяет в переданной ей строке все символы новой строки (\n) на символ <br/>.

Таким образом после оператора

echo ("Сообщение <br>".nl2br($mailcontent)."");

будет выведено сообщение вида (рис. 3.143)

Рис. 3.143. Сообщение для пользователя (файл Lab9_4.php, функция nl2br() ).