Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

metoda / Ml_ITIn_2013

.pdf
Скачиваний:
29
Добавлен:
16.03.2016
Размер:
6.66 Mб
Скачать

171

$user_row = $name." ".$email."|".$language." ".$job."\n"; fwrite($fd, $user_row) or die("Could not write to file!"); fclose($fd);

print "<br>Спасибо что уделили время для ответов на вопросы"; print "<br>Строка в файле ".$user_row;

else://шаблон Email не точен $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 установлен, то заново отобразить форму.; print "$form";

endif; //if ($error_flag == "y"): endif; //if(!empty($_POST['email'])) endif;

?>

</body>

</html>

Рис. 3.144. Файл Lab9_5.php, запись данных в текстовый файл.

Обратите внимание на фрагмент: $name = str_replace("|", "", $name); $email = str_replace("|", "", $email);

В данном фрагменте мы проверяем, что пользователь не включил в имя или адрес электронной почты символы «вертикальная черта» (|). Функция str_replace( ) удаляет эти символы, заменяя их пустой строкой. Если бы это не было сделано, пользовательские символы | нарушили бы структуру файла данных и существенно затруднили (а то и сделали невозможным) его правильную обработку.

При работе с относительно малыми объемами информации вполне можно обойтись текстовыми файлами. Однако при большом количестве пользователей или объеме сохраняемой информации для хранения и обработки данных, введенных в форме, лучше воспользоваться базой данных. Эта тема подробно рассматривается далее в лабораторных.

Согласно кода программы, показанного на рис. 3.144 на экран будет выведена форма рис. 3.145.

Заполненная форма ввода показана на рис. 3.146, а результат работы программы (при условии, что пользователь ввел правильные данные) показан на рис. 3.147 и рис. 3.148.

172

Рис. 3.145. Форма ввода для кода Lab9_5.php.

Рис. 3.146. Заполненная форма ввода для кода Lab9_5.php.

Если пользователь использует кнопку , то будет создан текстовый файл по адресу:

Рис. 3.146a. Результат кода Lab9_5.php. Файл Lab9.txt

173

Рис. 3.147. Результат кода Lab9_5.php.

Вкоде программы показанной на рис. 3.144 использована функция

PHP fopen.

$fd = fopen($DOCUMENT_ROOT."/../lab9_5.txt", 'ab');

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

Первым параметром указывается файл - $DOCUMENT_ROOT."/../lab9_5.txt", который должен быть открыт. Второй параметр - 'ab' – режим открытия файла (в данном случае режим 'ab' предполагает не только открытие для добавления в конец файла, но и создание файла, если он отсутствовал по указанному пути).

Впримере для указания пути к файлу использована встроенная переменная $_SERVER['DOCUMENT_ROOT'. Эта переменная указывает на основание дерева документов используемого вами Web-сервера.

Символ .. обозначает родительский каталог корневого каталога документов. В целях безопасности этот коталог находится вне дерева документов, чтобы этот файл не был доступен в WEB, кроме как только через разработанный Вами интерфейс. Этот путь называется относительным, поскольку он описывает позицию в файловой системе относительно корня документов.

Запись в файл в PHP осуществляется функцией: fwrite($fd, $user_row).

Где $fd – номер ресурса возвращенного функцией fopen, а $user_row – значение записываемое в файл.

174

Задание 4. Сохранение пользовательских данных в текстовом файле

Lab9_6_0.php

В данном задании создается форма ввода (рис. 3.148) предназначенная для заказа товара.

Рис. 3.148. Форма ввода, реализованная в коде Lab9_6_0.php.

Листинг программы для реализации формы представлен ниже.

<!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_6_0 Запись в текстовый</title>

</head>

<body>

<p>Lab9_6_0.php Запись в текстовый файл Lab9_6_1.txt</p> <h1>Автозапчасти </h1>

<h2>Форма заказа</h2>

<form action="Lab9_6_1.php" method=post> <table border=0>

<tr bgcolor=#cccccc>

<td width=150>Товар</td>

<td width=15>Количество</td> </tr>

<tr> <td>Автопокрышки</td>

<td align=left><input type="text" name="tireqty" size=3 maxlength=3></td> </tr>

<tr>

175

<td>Машинное масло</td>

<td align=left><input type="text" name="oilqty" size=3 maxlength=3></td> </tr>

<tr>

<td>Свечи зажигания</td>

<td align=left><input type="text" name="sparkqty" size=3 maxlength=3></td> </tr>

<tr>

<td>Адрес доставки</td>

<td align=center><input type="text" name="address" size=40 maxlength=40></td> </tr>

<tr>

<td colspan=2 align=center><input type=submit value="Отправить заказ"></td> </tr>

</table>

</form>

</body>

</html>

Рис. 3.149. Код HTML (Lab9_6_0.php) для реализации формы рис. 3.148.

Обработчик формы (как показано в теле кода формы на рис. 3.149)

находится в файле Lab9_6_1.php (рис. 3.150).

Листинг обработчика. Файл Lab9_6_1.php. <?php

// создать короткие имена переменных $tireqty = $_POST['tireqty']; //Автопокрышки $oilqty = $_POST['oilqty']; //Машинное масло

$sparkqty =$_POST['sparkqty'];//Свечи зажигания $address = $_POST['address']; //Адрес доставки

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; //DOCUMENT_ROOT: W:/home/localhost/www

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Автозапчасти - Результаты заказа</title>

</head>

<body>

<h1>Автозапчасти Lab9_6_1</h1> <h2>Результаты заказа</h2>

<?php

$date = date('H:i, jS F');

echo '<p>Заказ обработан в '.$date.'</p>'; if ($oilqty<0 or $oilqty<0 or $sparkqty<0):

echo '<p><font color=\"red\">Заказ не принят!</font></p>';

echo 'Отрицательное число в элементах заказа<br></body></html>'; exit;

176

endif;

echo '<p>Список вашего заказа: </p>';

$totalqty = 0;

$totalqty = $tireqty + $oilqty + $sparkqty; echo 'Заказано товаров: '.$totalqty.'<br />';

if( $totalqty == 0): //{

echo 'Вы ничего не заказали на предыдущей странице!<br />'; exit;

//}

endif;

if ( $tireqty>0 )

echo $tireqty.' автопокрышек <br />'; if ( $oilqty>0 )

echo $oilqty.' бутылок с маслом<br />'; if ( $sparkqty>0 )

echo $sparkqty.' свечей зажигания<br />';

$totalamount = 0.00;//Итого по заказу define('TIREPRICE', 100); //стоимость автопокрышеки define('OILPRICE', 10); //стоимость бутылки с маслом define('SPARKPRICE', 4);

$totalamount = $tireqty * TIREPRICE

+$oilqty * OILPRICE

+$sparkqty * SPARKPRICE;

$totalamount=number_format($totalamount, 2, '.', ' ');

echo '<p>Итого по заказу: '.$totalamount.'</p>'; echo '<p>Адрес доставки: '.$address.'</p>';

$outputstring = $date."\t"

.$tireqty." автопокрышек\t"

.$oilqty." бутылок с маслом\t"

.$sparkqty." свечей зажигания\t\$"

.$totalamount."\t".$address."\n";

//В качестве разделителя значений использован символ //горизонтальной табуляции "\t". В качестве разделителя //строк использована управляющая последовательность "\n"

177

//открыть файл для добавления

//@$fp = fopen($DOCUMENT_ROOT."/../lab9_6_1.txt", 'ab');

//Верхний fopen откроет правильно, как и следующий оператор //но путь нахождения файла будет различен.

@$fp = fopen($DOCUMENT_ROOT."/php/lab9_6_1.txt", 'ab');

/*

echo 'Lab9_6_1 Открыть файл lab9.txt для добавления Путь='.$DOCUMENT_ROOT."/php/lab9_6_1.txt".' <br>Результат открытия='.$fp.' gettype(fp)='.gettype($fp).' <br />';

//открыть файл lab9_6_1.txt для добавления

//Путь=W:/home/localhost/www/php/lab9_6_1.txt

//Результат открытия=Resource id #3 gettype(fp)=resource

*/

if (!$fp)

{echo '<p><strong>В настоящий момент ваш запрос не может быть обработан.<br>'

'Пожалуйста, попытайтесь позже.</strong></p></body></html>'; exit;}

//запись в файл

fwrite($fp, $outputstring, strlen($outputstring)); fclose($fp);//закрытие файла

echo '<p>Заказ записан в файл (путь): '.$DOCUMENT_ROOT.'/php/lab9_6_1.txt.</p>'; ?>

</body>

</html>

Рис. 3.150. Код обработчика Lab9_6_1.php, для реализации формы рис. 3.148. Если пользователь заполнит форму информацией вида:

Рис. 3.151. Пример заполненной формы.

178

и использует кнопку , то реакция обработчика Lab9_6_1.php будет следующей (рис. 3.152).

Рис. 3.152. Реакция обработчика на ошибочные действия пользователя при заполнении формы.

Если пользователь использует кнопку и приведет форму к виду

(рис. 3.153),

Рис. 3.153. Пример заполненной формы.

реакция обработчика, после нажатия кнопки ―Отправить заказ‖ показана на рис. 3.154.

Введенная информация будет записана а текстовый файл функцией

fwrite($fp, $outputstring, strlen($outputstring));

Этот вызов указывает PHP на необходимость записи строки из переменной $outputstring в файл на который указывает $fp. Третий параметр функции strlen($outputstring) указывает на длину записи, заносимой в файл.

Например, состав текстового файла после добавления информации из формы показанной на рис. 3.153, представлен на рис. 3.155.

179

Рис. 3.154. Реакция обработчика на действия пользователя при заполнении формы.

продожение записи в файле Lab9_6_1.txt

Рис. 3.155. Состав файла Lab9_6_1.txt после заполнения формы.

Закрытие файла производится с помощью следующей функции:

fclose($fp);//закрытие файла

Вероятность ошибки при закрытии файла намного меньше, чем при открытии файла, но она существует.

180

Тема № 10. Работа с каталогами в сценариях РНР

Цель работы: Получение практических навыков по работе с деревом каталогов.

Задание 1. Создать каталог и добавить в него файл.

Пусть необходимо создать каталог Users1 по пути: W:/home/localhost/www/php/Lab/Users1

и сформировать в этом каталоге файл с именем users10.txt на основе информации показанной в форме на рис. 3.156.

Рис. 3.156. Форма ввода и результат работы файла Lab10.php.

Форма показанная на рис. 3.156, создается с помощью листинга программы Lab10.php, приведенной на рис. 3.157.

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Lab10 Создание каталога</title></head>

<body>

<p>Lab10 Создание каталога</p>

<?PHP

// тело основной программы

echo 'Текущий каталог realpath(.)='.realpath(".").'<br>';//выводит имя текущего каталога W:\home\localhost\www\php

//т. е. имя рабочего каталога в котором //находится исполняемый скрипт.

$pos = strpos($_SERVER['PHP_SELF'],"/php/"); // //Например $_SERVER['PHP_SELF']=/php/Lab10.php

Соседние файлы в папке metoda