Здесь
необходимо создать пакет программ по созданию простой базы данных(БД),
ее дополнению, распечатке в алфавитном порядке выбранного поля(например
всех имен сотрудников), поиску записи, удалению записи и ее редактированию.
Пакет программ должен содержать общее меню по выполняемым действиям в котором
должен быть установлен счетчик его посещения. Пакет программ должен оперировать
с графическими объектами (например, фотографии сотрудников). Все программы,
включая счетчик посещений, должны быть написаны на языке Perl. Вызов программы
счетчика посещений должен выполняться из главного меню с использованием
технологии SSI - server side includes. После изучения представленных ниже
текстов программ студент должен разработать подобный пакет программ для
БД, заданной преподавателем. Например, БД может включать в себя поля:
1.Название изделия
2.Время выпуска
3.Краткая характеристика
изделия
4.Фотография изделия
В качестве изделия
могут рассматриваться автомобили, самолеты, суда и др.
Тексты HTML документов для формирования форм:
index_l3.shtml
<html>
<head>
<title>Menu</title>
</head>
<body>
<b>
<a href="http://www.tup.km.ua:8082/~ismm25/form1_l3.html">
1.Добавить запись
в базу данных </a><br>
<a href="http://www.tup.km.ua:8082/ismm25/form2_l3.pl">
2.Распечатать базу
данных </a><br>
<a href="http://www.tup.km.ua:8082/~ismm25/form3_l3.html">
3.Найти запись по
Ф.И.О. </a><br>
<a href="http://www.tup.km.ua:8082/~ismm25/form4_l3.html">
4.Удалить запись
</a><br>
<a href="http://www.tup.km.ua:8082/~ismm25/form5_l3.html">
5.Редактировать
запись</a>
</b>
<!--#include
virtual="/ismm25/count.pl"-->
</body>
</html>
form1_l3.html
<html>
<head>
<title>form1_l3</title>
</head>
<body>
<form method=post
action="/ismm25/form1_l3.pl">
<br><b>Введите
Ваше имя:</b>
<br><input
name="user_name" value="" size=20>
<br><b>Введите
номер Вашего телефона:</b>
<br><input
name="phone" value="" size=10>
<br><b>Введите
Ваш адрес и краткую характеристику:</b>
<br><textarea
name="address" rows=10 cols=60>
</textarea>
<br><b>Введите
имя фото лат.буквами:</b>
<br><input
name="img" value="babich.jpg" size=20>
<br><input
type="submit" value="Зарегистрировать">
</form>
</body>
</html>
form3_l3.html
<html>
<head>
<title>form3_l3</title>
</head>
<body>
<form method=post
action="/ismm25/form3_l3.pl">
<b>Введите нужную
фамилию:</b><br>
<input name="user_name"
value="" size=30>
<input type="submit"
value="Послать!">
</form>
</body>
</html>
form4_l3.html
<html>
<head>
<title>form4_l3</title>
</head>
<body>
<form method=post
action="/ismm25/form4_l3.pl">
<b>Введите фамилию,
запись по которой будет удалена:</b><br>
<input name="user_name"
value="" size=30>
<input type="submit"
value="Послать!">
</form>
</body>
</html>
form5_l3.html
<html>
<head>
<title>form5_l3</title>
</head>
<body>
<form method=post
action="/ismm25/form5_l3.pl">
<b>Введите фамилию,
запись по которой будет отредактирована:</b><br>
<input name="user_name"
value="" size=30>
<input type="submit"
value="Послать!">
</form>
</body>
</html>
Тексты программ на языке Perl:
form1_l3.pl
#!/usr/bin/perl
#
#Этот скрипт предназначен
для создания базы данных и ее дополнения
#
# Загружаем модуль
CGI
use CGI qw/:standard/;
use strict;
# Присваиваем локальным
переменным значения, переданные формой
my $user_name=param('user_name');
my $phone=param('phone');
my $address=param('address');
my $img=param('img');
my $len;
# Определяем длину
введенного поля user_name
$len=length($user_name);
# Заменяем символ
новой строки на пробел и удаляем символ возврата
# Это необходимо,
если ввод данных проводится через форму
# с дескриптором
<TEXTAREA>
$address=~s/\n/
/g;
$address=~s/\r//g;
# Если len больше
0 добавляем запись в файл
if ( $len > 0 )
{
open (FIL,">>names.txt");
# При записи в качестве
разделителей используем :::
print FIL $user_name,":::",$phone,":::",$address,":::",$img,"\n";
close(FIL);
}
# Формируем HTML
страничку
print
header(-charset=>'Windows-1251'),
start_html('form1_l3.pl'),
a({href=>'http://www.tup.km.ua:8082/~ismm25/index_l3.shtml'},"Возврат
в меню"),
hr,
end_html;
form2_l3.pl
#!/usr/bin/perl
# Этот скрипт выводит
все имена, находящиеся в базе данных
# Перед выводом
производит сортировку базы данных
use strict;
use CGI qw /:standard/;
my ($user_name,$user,@file,@newfile);
# Чтение базы данных
в массив @file, сортировка этого массива,
# запись отсортированных
строк из массива @newfile в файл БД names.txt
open(OLD,"names.txt");
@file=<OLD>;
close(OLD);
@newfile=sort(@file);
open(NEW,">names.txt");
print NEW @newfile;
close(NEW);
# Формирование документа
HTML
print
header(-charset=>'Windows-1251'),
start_html('form2_l3.pl'),
"<pre>";
open (FIL,"names.txt");
while (<FIL>)
{
($user_name)=split(':::');
$user=$user_name;
# Замена пробелов
в Ф.И.О. на символ "_" , т.е. например Иванов И.И. будет
# представлен как
Иванов_И.И..Если это не сделать, методом GET будет
# передано "Иванов",
т.е. без имени и отчества. Это может привести к
# некорректной работе
программы, если фамилия встречается несколько раз
# с различными именем
и отчеством.
$user_name=~s/ /_/g;
print a({href=>"http://www.tup.km.ua:8082/ismm25/forma_l3.pl?name=$user_name"},$user),"\n";
}
close(FIL);
print "</pre>",
a({href=>"http://www.tup.km.ua:8082/~ismm25/index_l3.shtml"},"Возврат
в меню"),
end_html;
form3_l3.pl
#!/usr/bin/perl
#
# Скрипт предназначен
для поиска записи в базе данных по введеному
# имени. Причем
имя может быть не полным.
#
use strict;
use CGI qw /:standard/;
my $user_name_form=param('user_name');
my $user_name_form_len=length($user_name_form);
my ($user_name,$phone,$address,$img,$user);
print header(-charset=>'Windows-1251'),
start_html('form3_l3.pl');
# Если имя введено
в форму, происходит обращение к базе данных
if ($user_name_form_len
!= 0)
{
open(FIL,"<names.txt");
# Чтение всех записей
из базы данных до обнаружения конца файла
while(<FIL>)
{
($user_name,$phone,$address,$img)=split(':::');
# Сохранение в переменной
$user_name первых символов в количестве,
# равному числу
символов, введенных в форме поиска. Запись их в $user.
$user=substr($user_name,0,$user_name_form_len);
# Если введенное
значение в форму совпадает с $user, сформировать HTML
# документ с полным
выводом в броузер найденной записи
if($user_name_form
eq $user)
{
print qq[<center><IMG
SRC='http://www.tup.km.ua:8082/~ismm25/pics/$img' HEIGHT=100></center>],
"<br>",
hr(),
"<u>Имя:</u><br>",$user_name,
hr(),
"<u>Номер телефона:</u><br>",$phone,
hr(),
"<u>Адрес и краткая
характеристика:</u><br>",$address,
hr();
}
}
close(FIL);
}
print qq[<a href='http://www.tup.km.ua:8082/~ismm25/index_l3.shtml'>Возврат
в меню</a>],
end_html;
form4_l3.pl
#!/usr/bin/perl
# Скрипт предназначен
для удаления записи по имени
use strict;
use CGI qw /:standard/;
my $user_name1=param('user_name');
my $len_user_name1=length($user_name1);
my ($user_name,$phone,$address,$img);
my $i=0;
# Если имя введено
в форму, происходит обращение к базе данных
if ($len_user_name1
!= 0)
{
open(FILUP,"names.txt");
open(FILOUT,">names1.txt");
while(<FILUP>)
{
($user_name,$phone,$address,$img)=split(':::');
# Если имя, введенное
в форму, соответствует имени записи БД,
# данная запись
не записывается в новый файл names1.txt БД.
if ($user_name1
eq $user_name) {$i=1;}
if ($user_name1
ne $user_name)
{
print FILOUT $user_name,":::",$phone,":::",$address,":::",$img;
}
}
close(FILUP);
close(FILOUT);
# Удаляется старая
БД (файл names.txt)
unlink("names.txt");
# Переименовывается
новая БД (файл names1.txt) в файл старой БД ( names.txt)
rename("names1.txt","names.txt");
}
#
print
header(-charset=>'Windows-1251'),
start_html('form4_l3.pl');
if ( $i == 0 ) {
print "Запись не найдена<br>"; }
print
qq[<a href='http://www.tup.km.ua:8082/~ismm25/index_l3.shtml'>Возврат
в меню</a>],
end_html;
form5_l3.pl
#!/usr/bin/perl
# Скрипт предназначен
для формирования формы редактирования записи,
# удаления из БД
редактируемой записи и передачи новых данных
# скрипту для формирования
БД с внесенными изменениями
use strict;
use CGI qw /:standard/;
my $user_name1=param('user_name');
my ($user_name,$phone,$address,$img);
# Открывается файл
БД и формируется документ HTML
open(FIL,"names.txt");
print header(-charset=>'Windows1251'),
start_html('form5_l3.pl');
while(<FIL>)
{
# Если имя записи
БД совпадает с введенным, формируется форма для
# редактирования
записи
($user_name,$phone,$address,$img)=split(':::');
if($user_name1 eq
$user_name)
{
print "<IMG SRC='http://www.tup.km.ua:8082/~ismm25/pics/$img'
HEIGHT=100>";
print qq[<form
method=post action="/ismm25/form6_l3.pl">];
# Тип hidden не
высвечивает поле user_name, но позволяет передать его
# значение программе
form6_l3.pl
print "<input
type=hidden name='user_name' value='$user_name'>";
print '<b>Телефон:</b><br>';
print "<input
name='phone' value='$phone' size=10>","<br>";
print '<b>Адрес
и характеристика:</b><br>';
print "<input
name='address' value='$address' size=30>","<br>";
print '<b>Фотография:</b><br>';
print "<input
name='img' value='$img' size=20>","<br>";
print "Обязательно
нажми на кнопку, иначе запись будет утеряна!";
print '<br><input
type="submit" value="Ввести!">';
print '</form>';
}
}
close(FIL);
# Считывается файл
БД names.txt и удаляется из него редактируемая запись
open(FILUP,"names.txt");
open(FILOUT,">names2.txt");
while(<FILUP>)
{
($user_name,$phone,$address,$img)=split(':::');
# Если имя, введенное
в форму, соответствует имени записи БД,
# данная запись
не записывается в новый файл names2.txt БД.
if ($user_name1
ne $user_name)
{
print FILOUT $user_name,":::",$phone,":::",$address,":::",$img;
}
}
close(FILUP);
close(FILOUT);
# Удаляется старая
БД (файл names.txt)
unlink("names.txt");
# Переименовывается
новая БД (файл names1.txt) в файл старой БД ( names.txt)
rename("names2.txt","names.txt");
print end_html;
form6_l3.pl
#!/usr/bin/perl
# Скрипт предназначен
для внесения изменений в БД после редактирования
# записи
use strict;
use CGI qw /:standard/;
my $user_name=param('user_name');
my $img=param('img');
my $address=param('address');
my $phone=param('phone');
# Добавление в файл
БД отредактированной записи
open (FIL,">>names.txt");
# При записи в качестве
разделителей используем :::
print FIL $user_name,":::",$phone,":::",$address,":::",$img,"\n";
close(FIL);
# Формирование документа
HTML
print
header(-charset=>'Windows1251'),
start_html('form6_l3.pl'),
a({href=>'http://www.tup.km.ua:8082/~ismm25/index_l3.shtml'},"Возврат
в меню"),
end_html;
forma_l3.pl
#!/usr/bin/perl
# Скрипт предназначен
для распечатки параметров записи по конкретной Ф.И.О.
use strict;
use CGI qw /:standard/;
my $name=param('name');
my ($user_name,$phone,$address,$img);
# Замена символа
"_" на пробел для преобразования переданного значения
# параметром 'name'
в действительное значение Ф.И.О.
$name=~s/_/ /g;
# Формирование документа
HTML
print header(-charset=>'Windows-1251'),
start_html('forma_l3.pl');
# Чтение файла с
распечаткой параметров записи, для которой $user_name
# совпадает с переданным
значением Ф.И.О.
open(FIL1,"names.txt");
while(<FIL1>)
{
($user_name,$phone,$address,$img)=split(':::');
if($name eq $user_name)
{
print qq[<center><IMG
SRC='http://www.tup.km.ua:8082/~ismm25/pics/$img' HEIGHT=100></center>],
"<br>",
hr(),
"<u>Имя:</u><br>",$user_name,
hr(),
"<u>Номер телефона:</u><br>",$phone,
hr(),
"<u>Адрес и краткая
характеристика:</u><br>",$address,
hr();
}
}
close(FIL1);
print qq[<a href="http://www.tup.km.ua:8082/~ismm25/index_l3.shtml">Возврат
в меню</a>],
end_html;
Текст программы
счетчика посещений
#!/usr/bin/perl
open (FIL1,"<count.dat");
$count=<FIL1>;
close(FIL1);
$count=$count+1;
open (FIL2,">count.dat");
print FIL2 $count;
close(FIL2);
print "Content-Type:text/html\n\n";
print "<br><br>","Страницу
посетили ";
print $count;
print " раз";
В этом же каталоге
должен первоначально существовать файл
count.dat с содержимым
"0"
К каталогу cgi-bin
должна быть применена команда chmod 0777
cgi-bin .
Причем Вы должны
находиться в каталоге public_html
. Иначе не создасться файл базы данных names.txt
Для просмотра, как работает рассмотренный комплект программ, нажми сюда.