Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_лаб_РНР_1.doc
Скачиваний:
152
Добавлен:
01.03.2016
Размер:
948.22 Кб
Скачать

Задание № 3

Создайте скрипт z11-3.php, являющийся модификацией скрипта lab10-4.php, в котором:

1. При отображении поля birthday на экране (но не в таблице!) должна быть дата в привычном формате ДД.ММ.ГГГГ — средствами РНР.

2. Под таблицей должна стоять текущая дата в формате Сегодня понедельник 1 октября 112 года — средствами РНР.

Задание № 4

Создайте скрипт z11-4.php «Мини фотогалерея».

На сервере, в папке photo находится файл info.txt, содержащий такие строки:

ar1 Ariston MB 1167 NF ar8 Ariston AV 102 ar15 Ariston MB 212 el3 Electrolux ENB 3269 sa5 Samsung RT-29 BVMS sa20 Samsung RL-17

Каждая строка — это код графического файла в формате «точно 2 буквы и 1 или 2 цифры», а далее некое описание.

В этой же папке photo находятся и пары файлов вида ar1.jpg, ar1-b.jpg, т.е. маленькая и большая картинки. Но не для всех кодов есть файлы!

Необходимо:

1. Прочитать содержимое файла info.txt в массив info[] построчно.

2. Перебирая элементы массива info[], из каждого элемента выделить код файла и описание. Одновременно надо проверять, есть ли на сервере в папке photo для данного кода соответствующий файл (с расширением *.jpg). Также, одновременно надо формировать ассоциативные массивы: model[], в котором ключами являются коды файлов, а значениями — описание модели; ris[], в котором ключами являются коды файлов, а значениями — либо имя файла с фото, либо строка "null", если соответствующего файла нет.

3. Аналогично файлу lab5-4.htm, вывести на экран содержимое массивов ris[] и model[] в виде блоков, где слева находится маленькая картинка (или текст «Изображения нет»), а справа — описание.

При этом маленькая картинка является гиперссылкой, т.е. при щелчке мышкой по картинке должно открываться вспомогательное окошко с большой картинкой — сделать средствами JavaScript.

 

Лабораторная работа №10. Тема: «Взаимодействие php и MySql»

Цель:

  1. Изучить теоретические основы разработки PHP-сценариев с использованием сервера баз данных MySQL

  2. Получить практические навыки в области разработки PHP-сценариев для решения пользовательских задач с использованием СУБД MySQL

Ход работы:

  1. создать БД согласно варианту задания. заполнить таблицу данными

  2. создать HTML-документ с формой, служащей для ввода исходных данных и передачи их PHP-скрипту

  3. создать PHP-скрипт для получения из БД информации согласно указанным в задании запросам.

  4. Организовать в скрипте вывод результата в Web-браузер пользователя.

  5. Предусмотреть операторы диагностики и обработки исключительных ситуаций

Функции взаимодействия с MySQL mysql_connect

Эта функция устанавливает соединение с сервером server MySQL и возвращает дескриптор соединения с базой данных

<?php

$dblocation = "localhost"; // Имя сервера

$dbuser = "root"; // Имя пользователя

$dbpasswd = ""; // Пароль

$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx) // Если дескриптор равен 0 соединение не установлено

{

echo("<P>В настоящий момент сервер базы данных не доступен, поэтому

корректное отображение страницы невозможно.</P>");

exit();

}

?>

Переменные $dblocation, $dbuser и $dbpasswd хранят имя сервера, имя пользователя и пароль, и, как правило, прописываются в отдельном файле (к примеру, config.php), который потом вставляется в каждый PHP-файл, в котором имеется код для работы с MySQL:

<?

$dblocation = "localhost";

$dbname = "forum";

$dbuser = "root";

$dbpasswd = "";

?>

mysql_close

Эта функция разрывает соединение с сервером MySQL, и возвращает true при успешном выполнении операции и false в противном случае. Функция принимает в качестве аргумента дескриптор соединения с базой данных, возвращаемый функцией mysql_connect.

// устанавливаем соединение с базой данных

$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx)

{

// Выводим предупреждение

echo ("<P>В настоящий момент сервер базы данных не доступен, поэтому

корректное отображение страницы невозможно.</P>");

// Завершаем работу в случае неудачи

exit();

}

if(mysql_close($dbcnx)) // разрываем соединение

{

echo("Соединение с базой данных прекращено");

}

else

{

echo("Не удалось завершить соединение");

}

mysql_select_db

функция mysql_select_db выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Функция принимает в качестве аргументов название выбираемой базы данных database_name и дескриптор соединения resource. Функция возвращает true при успешном выполнении операции и false в противном случае. К примеру:

<?php

// Код соединения с базой данных

if (!@mysql_select_db($dbname, $dbcnx))

{

echo( "<P>В настоящий момент база данных не доступна, поэтому

корректное отображение страницы невозможно.</P>" );

exit();

}

?>

Имеет смысл помещать функции для соединения и выбора базы данных в тот же файл (config.php), где объявлены переменные с именами сервера, пользователя и паролем:

<?php

$dblocation = "localhost";

$dbname = "softtime";

$dbuser = "root";

$dbpasswd = "";

$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);

if (!$dbcnx)

{

echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому

корректное отображение страницы невозможно.</P>" );

exit();

}

if (!@mysql_select_db($dbname, $dbcnx))

{

echo( "<P>В настоящий момент база данных не доступна, поэтому

корректное отображение страницы невозможно.</P>" );

exit();

}

?>

mysql_query

Эта функция применяется для отправки серверу SQL-запросов. Функция возвращает дескриптор запроса в случае успеха и false в случае неудачного выполнения запроса.  В данном примере показан код, с помощью которого извлекается одна строка из таблицы authors базы данных forum.

<?php

include "config.php";

$ath = mysql_query("select * from authors;");

if($ath)

{

$author = mysql_fetch_array($ath);

echo "<br>имя = ".$author['name']."<br>";

echo "пароль = ".$author['passw']."<br>";

echo "e-mail = ".$author['email']."<br>";

echo "url = ".$author['url']."<br>";

echo "ICQ = ".$author['icq']."<br>";

echo "about = ".$author['about']."<br>";

echo "photo = ".$author['photo']."<br>";

echo "time = ".$author['time'];

}

else

{

echo "<p><b>Error: ".mysql_error()."</b></p>";

exit();

}

?>

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

mysql_fetch_array

Эта функция возвращает значения полей в виде ассоциативного массива, в качестве аргумента принимает дескриптор запроса возвращаемый функцией mysql_query. Вот как с помощью этой функции можно вывести все строки таблицы authors:

<?php

include "config.php";

$ath = mysql_query("select * from authors;");

if($ath)

{

// Определяем таблицу и заголовок

echo "<table border=1>";

echo "<tr><td>имя</td><td>пароль</td><td>e-mail</td><td>url</td></tr>";

// Так как запрос возвращает несколько строк, применяем цикл

while($author = mysql_fetch_array($ath))

{

echo "<tr><td>".$author['name']." </td><td>".$author['passw']."

&nbsp </td><td>".$author['email']." </td><td>".

$author['url']." </td></tr>";

}

echo "</table>";

}

else

{

echo "<p><b>Error: ".mysql_error()."</b><p>";

exit();

}

?>

Результат показан на следующем рисунке:

mysql_result

С помощью этой функции можно получить доступ к отдельному полю записи. Допустим, нам нужно вывести имя автора, который первым найдется в базе данных. Сделать это можно следующим образом:

<?php

include "config.php";

$ath = mysql_query("select name from authors;");

if($ath)

{

echo mysql_result($ath,0,'name');

}

else

{

echo "<p><b>Error: ".mysql_error()."</b><p>";

exit();

}

?>

mysql_fetch_object

Эта функция возвращает поля записи данных в виде объекта. Ниже приведен пример, в котором с помощью этой функции из таблицы authors выводятся имя, URL и e-mail авторов.

<?php

include "config.php";

$ath = mysql_query("select * from authors;");

if($ath)

{

while($row = mysql_fetch_object($ath))

{

echo "<p>name: ".$row->name."</p>";

echo "<p>url: ".$row->url."</p>";

echo "<p>email: ".$row->email."</p>";

}}

else

{

echo "<p><b>Error: ".mysql_error()."</b><p>";

exit();}

?>

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

mysql_fetch_row

В отличие от функции mysql_fetch_object, эта функция возвращает не объект, а массив, в котором содержатся значения полей:

<?php

include "config.php";

$ath = mysql_query("select * from authors;");

if($ath)

{

while($row = mysql_fetch_row($ath))

{

echo "<p>name: ".$row[1]."</p>";

echo "<p>url: ".$row[4]."</p>";

echo "<p>email: ".$row[3]."</p>";

}

}

else

{

echo "<p><b>Error: ".mysql_error()."</b><p>";

exit();

}

?>

Варианты индивидуальных заданий.

 1.Базы данных: Автозаправочные станции = {Название АЗС, объем бензина (л), город }.

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  Найти суммарный объем бензина на бензоколонках города, название которого ввел пользователь;

  Найти бензоколонки, в названии которых присутствует строка, введенная пользователем;

  Найти бензоколонки, в названии которых количество бензина больше введенного пользователем значения.

 2. Базы данных: Детские сады = {Название детского сада, количество детей, количество работников, средняя зарплата }.

Необходимо реализовать в РНР – сценариях следующие запросы к таблице из этой базе данных:

  Найти детские сады, в которых средняя зарплата меньше введенного пользователем значения

  Найти детские сады, в названии которых присутствует строка, введенная пользователем;

  Найти количество работников и количество детей в детском саду, название которого ввел пользователь.

 

3. Базы данных: Программные Продукты (ПП) ={Название ПП, стоимость , Назначение фирмы-разработки }.

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  Найти самый дорогой ПП фирмы, название которого ввел пользователь;

  Найти все программные продукты фирмы, название которой ввел пользователь;

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

 4. Базы данных: Продуктовые магазины (ПМ) ={Название ПМ, город, Год, Объем продаж (тыс. руб)}.

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

 Найти магазины, у которых объем продаж в 2009 г. превысил указанное пользователем значение;

  Найти магазины города, название города которого ввел пользователь;

  найти суммарный объем продаж в магазинах , в названии которых присутствует строка, введенная пользователем.

 5.  Базы данных: Компьютеры = ={Номер компьютера, Объем свободного места на жестких дисках, Номера дисплейного класса}.

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  найти компьютеры, у которых свободное место на жестких дисках превышает введенное пользователем значение

  найти дисплейные классы, в которых количество компьютеров больше или равно введенному пользователем числу;

  найти компьютеры дисплейного класса, номер которого задал пользователь.

 6.  Базы данных: Книги = {Название книги, Типография, Количество страниц, Год издания }

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  найти названия книг, напечатанных в том году, который ввел пользователь;

  найти типографии, которые выпустили  n и более различных книг, где n – это число, введенное пользователем;

  найти книги, имеющие количество страниц от А до В, где А и В – введенные пользователем числа.

 

7. Базы данных: Документы =  {Наименование документа, количество страниц, Название кафедры}

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  найти общее количество документов кафедры, название которой ввел пользователь

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

  Найти кафедры, на которых разработаны документы, в названии которых содержится строка, введенная пользователем.

 8. Базы данных: Изделия = {Наименование изделия, Количество входящих в него деталей, Общая трудоемкость изготовления изделия (час), Стоимость}

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

   Найти изделия, у которых количество деталей больше или равно введенному  пользователем числу;

   Найти названия и трудоемкость изготовления изделий, стоимость которых меньше введенного пользователем значения;

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

 9.  Базы данных: Кабинеты = {Номер кабинета, Номер корпуса, Количество компьютеров, Количество парт}

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  Найти кабинет, в котором количество парт и количество компьютеров превышают введенные пользователем значения;

  Найти количество компьютеров в корпусе, номер которого ввел пользователь;

  Найти корпус, в котором суммарное количество компьютеров не меньше, чем значение, введенное пользователем.

10. Базы данных: Участники конференции ={ФИО, название, доклада, город, Название секции}

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

   Найти участников, которые приехали из города, название которого ввел пользователь;

   Найти секции с количеством докладчиков большим или равными числу, введенному пользователем;

   Найти количество участников секции, для которой пользователь ввел название или его часть.

 11. Базы данных: Автомобили ={Модель автомобиля, цена, название завода-изготовителя}

В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:

  Найти автомобили, цена которых не превышает введенное пользователем значение;

  Найти заводы-изготовители, количество выпускаемых моделей которых не меньше, чем число, введенное пользователем;

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