metoda / Ml_ITIn_2013
.pdf171
$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
