Лабораторная работа №5

    Здесь необходимо создать пакет программ по созданию простой базы данных(БД),ее дополнению, поиску записи, удалению записи и ее редактированию. Пакет программ должен содержать общее меню по выполняемым действиям в котором должен быть установлен счетчик его посещения. Пакет программ должен оперировать с графическими объектами (например, фотографии сотрудников). Текст программ должен быть написан на языках HTML и php. Непосредственная работа с базой данных должна осуществляться с помощью пакета СУБД MySQL. Сервер MySQL должен находиться на машине cel.tup (там же где и Web-сервер Apache). Программы на php должны взаимодействовать с сервером MySQL посредством включенных в php функций взаимодействия с MySQL. После изучения представленных ниже текстов программ студент должен разработать подобный пакет программ для БД, заданной преподавателем. Например, БД может включать в себя поля:
1.Название изделия
2.Время выпуска
3.Краткая характеристика изделия
4.Фотография изделия
В качестве изделия могут рассматриваться автомобили, самолеты, суда и др.
    Каждый студент должен иметь свой username в СУБД MySQL. Ниже рассмотрен пример создания пользователя с username ismm25.
Создание пользователя ismm25 (Выполняет преподаватель!):
> mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 72 to server version: 3.22.32

Type 'help' for help.

mysql>use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from user;
+-----------+-------+------------------+-------------+-------------+-----------+
| Host      | User  | Password         | Select_priv | Insert_priv | Update_pri|
+-----------+-------+------------------+-------------+-------------+-----------+
| localhost | root  | 3aa3ee1e1d77f653 | Y           | Y           | Y         |
| cel       | root  |                  | Y           | Y           | Y         |
| localhost |       |                  | N           | N           | N         |
| cel       |       |                  | N           | N           | N         |
| ikc1.tup  | alex  | 75cbfbdb376c43a9 | N           | N           | N         |
| ikc1.tup  | admin | 12ad110a21defd86 | Y           | Y           | Y         |
+-----------+-------+------------------+-------------+-------------+-----------+
6 rows in set (0.00 sec)

mysql>insert into user values ('cel.tup','ismm25',password('ismm25'),
    -> 'y','y','y','y','y','n','y','n','n','n','n','n','n','n');
Query OK, 1 row affected (0.00 sec)
mysql> select * from user;
+-----------+--------+------------------+-------------+-------------+----------+
| Host      | User   | Password         | Select_priv | Insert_priv | Update_pr|
+-----------+--------+------------------+-------------+-------------+----------+
| localhost | root   | 3aa3ee1e1d77f653 | Y           | Y           | Y        |
| cel       | root   |                  | Y           | Y           | Y        |
| localhost |        |                  | N           | N           | N        |
| cel       |        |                  | N           | N           | N        |
| ikc1.tup  | alex   | 75cbfbdb376c43a9 | N           | N           | N        |
| ikc1.tup  | admin  | 12ad110a21defd86 | Y           | Y           | Y        |
| cel.tup   | ismm25 | 7f6731414c9c046a | Y           | Y           | Y        |
+-----------+--------+------------------+-------------+-------------+----------+
7 rows in set (0.00 sec)

mysql> quit
Bye
>
Перегружаем сервер MySQL:
> mysqladmin -u root -p reload
Enter password:
>
----------------------------------------------------------------------------------
    Далее студент должен создать свою базу данных и таблицу в ней с которыми будет работать созданный пакет программ на php. Для их создания необходимо подключиться к машине cel.tup через telnet (telnet cel.tup).
Пример создания базы данных ismm25 и таблицы в ней с именем tabismm25 (Выполняет студент!):
> mysql -u ismm25 -p -h 'cel.tup'
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 75 to server version: 3.22.32

Type 'help' for help.

mysql> create database ismm25;
Query OK, 1 row affected (0.02 sec)

mysql> use ismm25;
Database changed
mysql> create table tabismm25(user_name VARCHAR(25),phone VARCHAR(10),
    -> job BLOB,img VARCHAR(20));
Query OK, 0 rows affected (0.05 sec)

mysql> quit
Bye

Пароль входа в базу данных у всех одинаковый и соответствует username. Для его замены необходимо выполнить команду (введя старый пароль):
> mysqladmin -u ismm25 -h 'cel.tup' -p password 'ismm25'
Enter password:
>
Затем перегрузить MySQL (введя новый пароль):
> mysqladmin -u ismm25 -h 'cel.tup' -p reload
Enter password:
>

    Приведенные ниже программы расположены в каталоге ../public_html/php/
Фотографии - ../public_html/php/pics/



Тексты HTML документов для формирования форм:

index.html
<html>
<head>
<title>Menu</title>
</head>
<body>
<b>
<a href="../php/form1.html">
1.Добавить запись в базу данных </a><br>
<a href="../php/form2.html">
2.Найти запись по Ф.И.О. </a><br>
<a href="../php/form3.html">
3.Удалить запись </a><br>
<a href="../php/form4.html">
4.Отредактировать запись </a>
</b>
<h5><p>Число посещениий:
<?PHP
    $filename = "counter.dat";
    $fp = fopen($filename,"r");
    if ($fp) {
        $counter=fgets($fp,10);
       fclose($fp);
    } else {
        $counter=0;
    }
    $counter++;
    print $counter;
    $fp = fopen($filename,"w");
    if ($fp) {
        $ii=fputs($fp,$counter);
        fclose($fp);
    }
?>
</h5>
</body>
</html>
Файл counter.dat целесообразно предварительно создать и открыть доступ к нему для всех пользователей с помощью команды:
>chmod 0777 counter.dat

form1.html
<html>
<head>
<title>form1</title>
<body>
<form method=post action="form1.php">
<br><b>Введите Ваше имя:</b>
<br><input name="user_name" value="" size=30>
<br><br><b>Введите номер Вашего телефона:</b>
<br><input name="phone" value="" size=10>
<br><br><b>Введите краткую характеристику:
<br><TEXTAREA NAME="job" ROWS=10 COLS=40></TEXTAREA>
<br><br><b>Введите имя фото лат.буквами:</b>
<br><input name="img" value="nofoto.jpg" size=20>
<br><br><input type="submit" value="Зарегистрировать">
</form>
</body>
</html>

form2.html
<html>
<head>
<title>Выборка данных</title>
<body>
<form action="form2.php" method="post">
<b>Введите Ф.И.О.<b>
<input type="text" name="user_name" size=30>
<input type="submit" value="Ввести!">
</form>
</body>
</html>

form3.html
<html>
<head>
<title>Выборка данных</title>
<body>
<form action="form3.php" method="post">
<b>Введите Ф.И.О. для удаления:<b>
<input type="text" name="user_name" size=30>
<input type="submit" value="Ввести!">
</form>
</body>
</html>

form4.html
<html>
<head>
<title>Корректировка данных</title>
<body>
<form action="form4.php" method="post">
<b>Введите Ф.И.О., данные для которой необходимо изменить:<b>
<br><input type="text" name="user_name" size=30>
<input type="submit" value="Ввести!">
</form>
</body>
</html>

Тексты программ на языке Perl:

form1.php
<?
/* Определяем значения переменным */
$hostname="cel.tup";
$username="ismm25";
$password="ismm25";
/* Имя базы данных */
$dbName="ismm25";
/* Таблица MySQL */
$usertable="tabismm25";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$img')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>";
print "<a href='../php/'>Назад в меню</a>";
?>

form2.php
<?php
$hostname="cel.tup";
$username="ismm25";
$password="ismm25";
$dbName="ismm25";
$usertable="tabismm25";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Выбрать сотрудников, имена которых начинаются на $usr_name */
$query="select * from $usertable where user_name like '$user_name%'";
$result=mysql_query($query);
/* Сколько нашлось таких сотрудников? */
$number=mysql_numrows($result);
/* Распечатка выбранных сотрудников */
$i=0;
if ($number == 0)
{
{
print "Нет данных о $user_name в БД <br>";
}
elseif ($number > 0)
{
while ($i < $number)
{
/* Присвоение переменным значений полей user_name, phone, job, img для i-й
строки */
$user_name=mysql_result($result,$i,"user_name");
$phone=mysql_result($result,$i,"phone");
$job=mysql_result($result,$i,"job");
$img=mysql_result($result,$i,"img");
/* Вывод найденных значений */
print "<br><img src='pics/$img' height=130><br>";
print "<u> Ф.И.О.:</u> <br>";
print "$user_name <br><br>";
print "<u> Телефон: </u><br>";
print "$phone <br><br>";
print "<u> Характеристика: </u><br>";
print "$job <br>";
$i++;
print "<hr>";
}
}
print "<a href='../php/'>Назад в меню</a>";
 ?>

form3.php
<?php
$hostname="cel.tup";
$username="ismm25";
$password="ismm25";
$dbName="ismm25";
$usertable="tabismm25";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Удаление записи для поля user_name */
$query="delete from $usertable where user_name='$user_name'";
$result=mysql_query($query);
print "Запись удалена <br>";
print "<a href='../php/'>Назад в меню</a>";
 ?>

form4.php
<?php
$hostname="cel.tup";
$username="ismm25";
$password="ismm25";
$dbName="ismm25";
$usertable="tabismm25";
mysql_connect($hostname,$username,$password) or die("No connect");
mysql_select_db("$dbName") or die("No select DB");
/* Выбор записи по полю user_name */
$query="select * from $usertable where user_name='$user_name'";
$result=mysql_query($query);
/* Определение существования выбранной записи */
$number=mysql_numrows($result);
if ($number==0)
{
print "Нет такой записи!<br>";
print "<a href='../php/'>Назад в меню</a>";
}
else
{
/* Если запись выбрана из базы данных, вывести все ее поля в форму для
редактирования и удалить ее */
$phone=mysql_result($result,0,"phone");
$job=mysql_result($result,0,"job");
$img=mysql_result($result,0,"img");
print "<img src='pics/$img' height=130><br>";
/* Удаление записи */
$query="delete from $usertable where user_name='$user_name'";
$result=mysql_query($query);
/* Создание формы для редактирования */
print "<form method=post action='form5.php'>";
print "<br><b>Введите Ваше имя:</b>";
print "<br><input name='user_name' value='$user_name' size=30>";
print "<br><br><b>Введите номер Вашего телефона:</b>";
print "<br><input name='phone' value='$phone' size=10>";
print "<br><br><b>Введите краткую характеристику:";
print "<br><TEXTAREA NAME='job' ROWS=10 COLS=40>$job</TEXTAREA>";
print "<br><br><b>Введите имя фото лат.буквами:</b>";
print "<br><input name='img' value='$img' size=20>";
print "<br><br><input type='submit' value='Зарегистрировать'>";
print "</form>";
}
?>

form5.php
<?
/* Определяем значения переменным */
$hostname="cel.tup";
$username="ismm25";
$password="ismm25";
/* Имя базы данных */
$dbName="ismm25";
/* Таблица MySQL */
$usertable="tabismm25";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$img')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>";
print "<a href='../php/'>Назад в меню</a>";
?>

Для просмотра, как работает рассмотренный комплект программ, нажми
сюда.