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

Задание 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>

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

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"

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

//@$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. Пример заполненной формы.

и использует кнопку , то реакция обработчика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.

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

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

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

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

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

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