- •Министерство образования и науки Республики Казахстан
- •Лабораторная работа №3 Ввод-вывод. Управляющие конструкции. Условный оператор. Оператор выбора.
- •Задание № 1
- •Задание № 1
- •Задание № 2
- •Задание № 3
- •Задание № 1
- •Задание № 2
- •Задание № 3
- •Задание № 4
- •Лабораторная работа 7. Многомерные массивы
- •Задание № 1
- •Задание № 2
- •Задание № 3
- •Задание № 4
- •Задание № 5
- •Задание № 1
- •Задание № 2
- •Задание № 3
- •Задание № 4
- •Лабораторная работа №10. Тема: «Взаимодействие php и MySql»
- •Лабораторная работа №11. Авторизация доступа. Сессии. Строки. «Сборка» сайта.
- •Практическая часть
- •Практическая часть
- •Практическая часть
Задание № 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»
Цель:
Изучить теоретические основы разработки PHP-сценариев с использованием сервера баз данных MySQL
Получить практические навыки в области разработки PHP-сценариев для решения пользовательских задач с использованием СУБД MySQL
Ход работы:
создать БД согласно варианту задания. заполнить таблицу данными
создать HTML-документ с формой, служащей для ввода исходных данных и передачи их PHP-скрипту
создать PHP-скрипт для получения из БД информации согласно указанным в задании запросам.
Организовать в скрипте вывод результата в Web-браузер пользователя.
Предусмотреть операторы диагностики и обработки исключительных ситуаций
Функции взаимодействия с 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']."
  </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. Базы данных: Автомобили ={Модель автомобиля, цена, название завода-изготовителя}
В РНР – сценариях необходимо реализовать следующие запросы к таблице из этой базы данных:
Найти автомобили, цена которых не превышает введенное пользователем значение;
Найти заводы-изготовители, количество выпускаемых моделей которых не меньше, чем число, введенное пользователем;
Найти информацию по автомобилям, в названии которых присутствует строка, введенная пользователем.