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

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

$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:

//Убедиться в том, что поле адреса содержит информацию

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

// Построить строку с пользовательскими данными

$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.

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

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

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

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

Рис. 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 – значение записываемое в файл.