Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

PHP: работа с формами, файлами и базой данных

 

Цель работы: изучение средств РНР, позволяющих обработать данные в формах, передать файл на сервер, проверить параметры файла, обработать данные, сведенные в таблицы БД: создать таблицу, добавить запись к таблице, выполнить запрос, проанализировать его результаты

 

Методические указания по выполнению работы

 

Общие сведения

РНР работает на самых разных платформах. Это может быть Windows, многие из версий UNIX, в том числе Linux и даже Macintosh. PHP поддерживает широкий на­бор серверов, среди которых Apache (сам по себе являющийся открытым программ­ным продуктом), Microsoft Internet Information Server, WebSite Pro, iPlanet Web Server и Microsoft Personal Web Server. Последний сервер особенно полезен тогда, когда нужно проверить свои программы под Windows, хотя нужно заметить, что и сервер Apache работает под управлением системы Windows.

При создании языка РНР учитывалось требование высокой интеграции с базами данных. Это стало одной из причин того, что РНР так популярен при создании разви­тых Web-приложений. Многие базы данных непосредственно поддерживаются языком РНР, и среди них такие, как Adabas D, InterBase, Solid, dBase, mSQL, Sybase, Empress, MySQL, Velocis, FilePro, Oracle, UNIX dbm, Informix и др. Кроме того, РНР поддер­живает стандарт ODBC.

 

Для написания PHP-программы нужно открыть текстовый редактор. Как и HTML-документы, PHP-программы состоят из простого текста, поэтому писать их можно с помощью любого текстового редактора.

Пример первой РНР-программы.

<?php

print "hello Web!";?>

 

У этого файла должно быть правильное расширение, потому что на основании этого сервер распознает файл как PHP-программу и запустит интерпретатор. По умолчанию расширение файлов программ должно быть.php. Однако это может быть измене­но с помощью файла конфигурации.

Функция print() предназначена для вывода данных. В большинстве случаев все, что выводитcя с помощью этой функции, появляется в окне броузера.

 

Взаимодействие HTML и РНР

Предыдущая программа состоит только из команд РНР. Однако можно создать смешанный документ, просто добавив HTML-текст перед открывающим и после за­крывающего тэгов. Пример.

 

<html> <head>

<title> Документ, содержащий РНР-команды и HTML-текст </title> </head> <body> <b> <?php

print "Hello world!";

?>

</b>

</body>

</html>

 

Интерпретатор игнорирует все, что находится вне тэгов РНР. Если вы отобрази­те этот документ на экране броузера, то увидите слова hello world, выделенные по­лужирным шрифтом.

В документ можно включать столько блоков РНР-команд, сколько потребуется для формирования Web-страницы. Несколько блоков команд в одном документе образуют единую программу. Это означает, что все, что вы определите в первом блоке (переменные, функции или классы), будет доступно программе в следую­щих блоках.

 

 

Программа для обработки ввода пользователя

Пример простой HTML-формы. Создадим файл form.html:

<html>

<head>

<title> Простая HTML-форма </title>

</head>

<body>

<form action="form.php" method="GET">

<input type="text" name="user”>

<br>

<textarea name="address" rows="5" cols="40">

</textarea>

<br>

<input type="submit" value=”hit it!">

</form>

</body>

</html>

 

В этой форму, в которой есть текстовое поле сименем "user", текстовая об­ласть с именем "address" и кнопка передачи данных "Submit". Элемент ACTION тэга FORM указывает на файл form.php, следова­тельно данный файл будет обрабатывать данные формы. Этот файл должен находиться в том же каталоге на сервере, что и HTML-документы.

Приведем программу, обрабатывающую данные формы из предыдущего примера.

<html>

<head>

<title> Чтение данных формы </title>

</head>

<body>

<?php

print "Welcome <b>$user</b><P>\n\n";

print "Your address is:<P>\n,\n<b>$address</b>";

?>

</body>

</html>

Программу следует сохранить под именем form.php

Для просмотра результатов работы следует указать в строке адреса броузера http://localhost/form.html

Далее необходимо ввести данные в форму и нажать на кнопку, отправляющую данные на сервер. После этого в броузере отобразится результат обработки данных программой form.php.

 

Обработка элементов с многозначным выбором

Для того чтобы программа могла иметь доступ ко всем значениям, выбранным пользователем, нужно к имени данного элемента приписать пару пустых квадратных скобок. Это и сделано в примере.

<html>

<head>

<title> HTML-форма с тэгом select </title> </head> <body>

<form action="ff.php" method="POST">

<input type="text" name="user">

<br>

<textarea name="address" rows="5" cols="40">

</textarea>

<br>

<select name= "products[]" multiple>

<option>Sony

<option>Panasonic

<option>Samsung

<option>LG

</select>

<br>

<input type="submit" value="hit it!">

</form>

</body>
</html>

Теперь в программе, предназначенной для обработки этой формы, значения, выбранные пользователем в элементе "products[ ]", будут доступны как элементы массива $products.

 

<html>

<head>

<title> Обработка данных формы </title>

</head>

<body>

<?php

print "Welcome <b>$user</b><p>\n\n>;

print "Your address is:<p>\n\n<b>$address</b><p>\n\n";

print "Your product choicee are:<p>\n\n;

print "<ul>\n\n”;

foreach { $products as $value)

{

print "<li>$value<br>\n"

print "</ul>"

?>

</body>

</html>

Тэг SELECT — не единственный элемент, который позволяет ввести несколько значений. Можно создать несколько флажков с одним именем и ввести несколько значений под этим одним именем. Если имя заканчивается пустыми квадрат­ными скобками, то все значения, переданные пользователем, становятся доступными про­грамме в виде элементов массива.

 

 

Формы и программы для передачи файлов на сервер

Рассмотрим средства РНР для передачи файлов на сервер.

В первую очередь нам нужно создать соответствующую форму. HTML-форма, предназначенная для копирования файлов и имеющая соответствующее поле, должна содержать аргумент ENCTYPE:

ENCTYPE = "multipart/form-data"

Кроме того, РНР требует, чтобы в форме перед полем для копирования файлов находилось скрытое поле. Такое скрытое поле должно называться max_file_size и в нем должен быть записан максимальный размер файла, который разрешается пере­давать. Этот размер не должен превышать размер, установленный в поле uр-load_max_filesize в файле php.ini, который обычно равен 2 Мбайтам. Теперь можно подготовить само поле для передачи файла. Это обычный элемент INPUT, у которого в аргументе TYPE записано "file". Пример.

<html>

<head>

<title> Простая форма для передачи файла </title>

</head>

<body>

<form enctype="multipart/form-data" action="<?print $PHP SELF?>" method=" POST">

<input type="hidden" name="MAX_FILE_SIZE" value="51200">

<input type="file" name="fupload"><br>

<input type="submit" value="upload!">

</form>

</body>

</html>

Обратите внимание на то, что эта форма вызывает страницу, в которой она записана.

После того как файл передан на сервер, он получает уникальное имя и сохраняет­ся в каталоге для временных файлов. Полный путь к файлу записывается в глобальную переменную с именем, совпадаю­щим с именем поля для передачи этого файла (в данном случае это будет $fupload).

PHP сохраняет еще некоторую дополнительную информацию о переданном файле в глобальных переменных. Их имена произведены от имени поля для передачи файла, за которым следует символ подчеркивания, а потом строки "name", "size" и "type". В табл. приведены описания этих переменных.

Имя переменной Описание Пример

$fupload Путь к временному файлу /tmp/php5Pq3fu

$fupload_name Имя переданного файла test.gif

$fupload_size Размер переданного фай- 6835

ла в байтах

$fupload_type Тип переданного файла в image/gif

системе MIME

 

Кроме того, в РНР есть встроенная переменная, в которой в виде массива записа­на информация о переданном файле. Если формой было передано несколько файлов, то в переменной $HTTP_POST_FILES будет содержаться массив, упорядоченный по име­нам полей формы. Каждый из элементов этого массива, в свою очередь, является ас­социированным массивом. Элементы таких массивов описаны в следующей табл.

Имя переменной Описание_____ Пример

$HTTP_POST_FlLES[fupload][name] Имя переданного файла test.gif

$HTTP_POSlr_FHES[fupload][size] Размер переданного файла 6835

в байтах

$HTTP_POST_FILES[fupload][tpe] Тип переданного файла в image-gif

системе MIME

 

Пример. Программа, выводящая информацию о переданном файле. Если переданный файл является файлом рисунка в формате GIF, то программа выводит его на экран броузера.

<html>

<head>

<title> Программа обработки переданного файла </title>

</head>

<?рhp

$file_dir = "/home/htdocs/uploads";

$file_url = "http://www.narod.ru/uploads";

if (isset ($fupload))

{

print "path: $fupload<br>\n";

print "name: $fupload_name<br>\n"; :

print "size: $fupload_size bytes<br>\n";

print "type: $fupload_type<p>\n\n";

{

copy ($fupload, "$file dir/$fupload_name") or die ("Couldn't copy");

print "<img src=\”$file url/$fupload name\"><p>\n\n"; '

}
}

?>

<body>

<form enctype="multipart/form-data" action="<?php print $PHP_SELF?>"

method="POST">

<input type="hidden" name="MAX_FlLE_SIZE" value="51200">

<input type="file" name="fupload"><br>

<input type="submit" value="Send file!">

</form>

</body>

</html>

Сначала мы проверяем, определена ли переменная $fupload. Если она определена, то можем считать, что файл передан.

Если файл передан, то путь к этому файлу на сервере записан в переменной $fupload и мы выводим этот путь на экран броузера. Кроме того, мы выводим имя файла, записанное в переменной $fupload name, размер файла, который записан в пе­ременной $fupload_size, и тип файла, записанный в переменной $fupload_type.

После этого проверяется значение переменной $fupload_type. Если оно совпадает с "image/gif", мы считаем, что это GIF-файл.

Определив, что передан рисунком типа GIF, мы копируем его из временного ка­талога в наш каталог. Функция сору() требует двух аргументов — путь к исходному файлу и новое его положение. Эта функция возвращает true, если файл скопирован успешно. Исходное размещение и имя файла записано в переменной $fupload, a новое положение — в переменной $file_dir. Приходится объединять новое по­ложение файла и его исходное имя для того, чтобы сформировать второй аргумент функции сору(). В результате файл в новом месте получает свое первоначальное имя.

Исследование файлов

 

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

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

Проверка существования файла

Для того, чтобы проверить, существует ли файл, применяется функция file_exists(). Эта функция принимает строку, содержащую полный или относительный путь к файлу. Если файл найден, то функция возвращает true, в противном случае — false.

if(file_exists("test.txt"));

print "test.txt найден";

Файл или каталог?

Чтобы убедиться, что исследуемый объект действительно является файлом, а не каталогом, применяется функция is_file(). Эта функция требует указания пути к файлу и возвращает булево значение:

if(is_file("test.txt"))

print "test.txt - это файл";

Чтобы убедиться, что исследуемый объект является каталогом, используется функция is_dir(). Эта функция требует указания пути к каталогу и тоже возвращает булево значение.

if(is_dir("/tmp"))

print "/tmp - это каталог";

Проверка статуса файла

Функция is_readable() сообщает, можно ли читать указанный файл. Функция is_readable() требует строку, содержащую имя и путь к файлу, и возвращает булево значение:

if(is_readable("test.txt"))
print ("test.txt можно читать");

 

Аналогичная функция is_writable() сообщает, открыт ли файл для записи.

Функция is_executable() сообщает, можно ли исполнять файл.

 

Определение размера файла

Функция filesize() определяет размер файла в байтах. Она возвращает значение false, если определить размер файла не удается.

 

print "Размер файла test.txt - ";

print filesize("test.txt");

 

Создание и удаление файлов

Файл можно создать с помощью функции touch(). Получив строку с именем файла, эта функция создает пустой файл с заданным именем. Если такой файл уже существует, то функция не изменяет его содержания, но изменяет дату модификации.

touch(“myfile.txt");

Существующий файл можно удалить с помощью функции unlink(). Эта функция тоже получает имя файла.

unlink ("myfile.txt");

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

Открытие файла для чтения, записи или добавления

Чтобы с файлом можно было работать, его нужно открыть для чтения, или записи, или же для того и другого. Для этого существует функция fopen(). Данной функции передаютсядва аргумента — строка с именем файла и путем к нему, а также строка, описывающая режим открытия файла. Самые обычные режимы доступа к файлу — это чтение, запись и добавление в конец файла. Соответствующие строки выглядят как 'г', 'w' и 'а'. Функция fopen() возвращает целое число, которое позже используется для доступа к открытому файлу. Это число называется указателем на файл, и его можно присвоить переменной. Для того, чтобы открыть файл для чтения, нужно написать такую конструкцию:

$fp = fopenf"test.txt", 'r');

 

Функция fopen() возвращает false, если открыть файл по какой-то причине не удалось. Поэтому перед тем как начинать работать с файлом, следует проверить зна­чение возвращенного функцией указателя. Сделать это можно таким образом:

if ($fp = fopenf"test.txt", 'w'))

{

// работа с файлом

}

 

По окончании работы файл следует закрыть. Для этого существует функция fclose(), которой нужно передать указатель на файл, полученный ранее от функции fopen():

fclose($fp);

Чтение из файла

В языке РНР есть несколько функций для чтения данных из файла.

Чтение строк с помощью fgets()

Для чтения строки из файла существует функция fgets (), и ей нужно передать указа­тель на открытый файл. Кроме того, у этой функции есть второй аргумент, указы­вающий максимальное число символов, которое можно прочесть из файла до того, как встретится конец строки или файла. Функция fgets () будет читать данные из файла до тех пор, пока не встретит символ конца строки или конца файла.

$line = fgets($fp, 1024); // $fp - это указатель на файл

С помощью описанной функции можно читать строки, но нужен способ опре­делить достижение конца файла. Для этого существует функция feof (). Данная функ­ция возвращает true при достижении конца файла и false — в противном случае. Этой функции тоже нужно передавать указатель на файл.

feof($fp); // $fp - это указатель на файл

Пример программы, читающей данные из файла строка за строкой.

<html>

<head>

<title> Открытие файла и чтение из него строк </title>

</head>

<body>

<?php

$filename = "test.txt";

$fp = fopen($filename, "r") or die("Couldn't open $filename");

while (! feof ($fp))

{

$line = fgets($fp, 1024);

print "$line<br>";

}

?>

</body> </html>

 

Мы открываем файл, указывая его имя в аргументе функции fopen(), и используем функцию die() для того, чтобы быть уверенными, что в случае невозможности открыть файл выполнение программы будет остановлено. Чаше всего это происходит в результа­те того, что файл просто не существует, но в системе UNIX это может произойти и по той причине, что права доступа к файлу не позволяют программе читать из него. Чтение файла происходит в цикле while, в проверочном выражении которого мы ис­пользуем функцию feof () для проверки того, что конец файла еще не достигнут. Други­ми словами, цикл выполняется до тех пор, пока не будет достигнут конец файла. Внутри цикла нами с помощью функции fgets() читается строка или 1024 байта, если конец строки не достигнут. Мы присваиваем прочитанную строку переменной $line и выво­дим ее на экран броузера.

 

 

Запись в файл

Для записи в файл существуют два разных режима. Разница между ними заключа­ется в способе вызова функции fopen(). Если вы откроете файл в простом режиме за­писи, т.е. напишете функцию так:

fopen("test.txt", "w"),

то в существующем файле вся информация будет уничтожена и новые данные за­писаны в начало файла. Если такого файла не существует, то он будет создан. Если вы откроете файл в режиме добавления, т.е. напишете функцию так: fopen("test.txt", "a"), то все новые данные будут добавлены в конец файла.

Запись в файл с помощью fwrite() или fputs()

У функции fwrite() есть два аргумента— указатель на файл и строка. Функция fwrite()записывает строку в файл. Функция fputs()делает в точности то же самое.

Пример.

<html>

<head>

<title> Запись в файл и добавление в его конец </title>

</head>

<body>

<?php

{filename = "test.txt";

print "Writing to $filename<br>";

$fp = fopen ($filename, "w") or die("Couldn't open $filename");

fwrite($fp, "Hello world\n");

fclose($fp);

print "Appending to $filename<br>";

$fp = fopenf $filename, "a") or die("Couldn't open Sfilename");

fputs ($fp, "And another thing\n");

fclose($fp);

</body> </html>

 

Подключение к серверу базы данных

Перед тем как начинать работать с базой данных, нужно подключиться серверу. Для этого в языке РНР есть функция mysql_connect(). Функция mysql_connect() возвращает идентификатор подключения, если все прошло ус­пешно. Этот идентификатор можно сохранить в переменной и в дальнейшем пользоваться им для работы с сервером базы данных.

Пример. Подключение к серверу базы данных:

$link= mysql_connect("localhost", “root", "serg");

if (! $link)

die("Couldn't connect to MySQL");

 

Выбор базы данных

После того как соединение с сервером MySQL установлено, нужно выбрать базу данных, с которой собираетесь работать. Для этого существует функция mysql_select_db().

Пример. Выбираем базу данных с именем sample.

$database = "sample";

mysql_select_db($sample) or die ("Couldn't open'' $sample);

 

Создание БД

Мы создаем в базе данных sample таблицу с именем domains. Таблица содержит 4 поля: поле первичного ключа с именем id, значение которого будет автоматически увеличивать­ся при добавлении новых записей, поле domain, куда записана строка переменной длины типа VARCHAR, поле sex, состоящее из одного символа, и поле mail, содержащее адрес пользователя. Для создания этой таблицы была использована такая инструкция SQL:

create table domains (id INT NOT NULL AUTO INCREMENT,
PRIMARY KEY(id),

domain VARCHAR(20),

sex CHAR(l),

mail VARCHAR(20));

Для добавления данных в эту таблицу нам нужно сконструировать и выполнить запрос SQL. Для этого в языке РНР есть функция mysql_query(). Этой функции нужно передать строку с запросом и необязательный идентификатор подключения. Если данный идентификатор опущен, то будет использоваться последнее полученное под­ключение. Функция возвращает положительное число, в случае успешного выполне­ния запроса, и false, если в запросе содержится ошибка или если вы не имеет права на выполнение такого запроса.

Пример.

<html>

<head>

<title> Добавление записи в таблицу </title>

</head>

<body>

<?php

$user = "serg";

$pass = "rgrgrrg";

$db = "sample";

$link = mysql_connect("localhost", $user, $pass);

if (! $link)

die("Couldn't connect to MySQL");

mysql_select_db($db, $link)

or die ("Couldn't open $db: "mysql error());

$query = "INSERT INTO domains (domain, sex, mail)

values('123xyz.com', 'F', 'sharp@adomain.com')";

mysql_query($query, $link)

or die ("Couldn't add data to \”domains\" table: "

mysql_error());

mysql_close($link);

?>

</body> </html>

 

Результат запроса

После выполнения запроса SELECT и получения его идентификатора можно в цикле просмотреть все записи, найденные в результате запроса. РНР создает внутренний указатель, в котором записана позиция в наборе записей результата. Этот указатель авто­матически перемещается на следующую позицию после обращения к текущей записи.

С помощью функции mysql_fetch() можно для каждой записи получить массив, состоящий из ее полей. Этой функции нужно передать идентификатор запроса, а вер­нет она массив. По достижении конца запроса функция mysql_fetch() вернет значение false.

Программа выводит на экран всю таблицу domains.

<html>

<head>

<title> Вывод всех записей таблицы </title>

</head>

<body>

<?php

$user = "serg";

$pass = "rgrgrgr";

$db = "sample";

$link = mysql_connect("localhost", $user, $pass);

if (! $link) :

die("Couldn't connect to MySQL");

mysql_select_db($db, $link)

or die ("Couldn't open $db: "mysql_error());

$result = mysql_query ("SELECT * FROM domains" );

$num_rows = mysql_num_rows($result);

print "There are currently $num_rows rows in the table<P>";

print "<table border=l>\n";

while ($a_row = mysql_fetch_row($result_y)

{

print "<tr>\n";

foreach ($a_row as $field)

print "\t<td>$field</td>\n";

print "</tr>\n";

}

print "</table>\n";

mysql_close($link);

?>

</body>

</html>

 

 

Порядок выполнения работы

 

1. Запустить D:\www\etc\run.exe – пакет Денвер, включающий Apache, интерпретатор РНР и MySQL.

2. Убедиться в том, что в файле php.ini присутствует директива register_globals = On

3. Рабочие файлы размещаем по адресу D:\www\home\localhost\www

4. Для работы с РНР-файлами можно пользоваться редактором PHP Expert Editor.

5. Для создания БД и таблицы в БД используйте утилиту phpMyAdmin (ее можно вызвать, указав в строке броузера http://localhost).

6. Для просмотра результатов работы следует указать в строке адреса броузера http://localhost/xxx.html

 

ЗАДАНИЯ.

 

1. Отправить данные формы (4-5 полей разного типа) на сервер и обработать их.

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

3. Создать таблицу (3-4 поля) согласно своей предметной области. Добавить записи.

4. Выполнить запрос к таблице и проанализировать результаты.

5. Изменить данные в таблице

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...