Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 


<ТР><ТН><ТН>Имя<ТН>Отчество/Инициал
<ТН>Фамилия<ТН>мл.,ст.,III,и т.д.

END_OF_'HTML
for $i (1.,$size) {
print <
END_OF_HTML
}
print <

 

END_OF_HTML
} } }
Обратите внимание, что функция использовала три копии параметра name. Для 
использования в составе URL все специальные символы должны быть заменены особым 
образом. Для этого в коде примера используется функция cgi_encode . Кроме того, 
чтобы ввести строку в базу данных mSQL, вместо некоторых символов нужно 
использовать управляющие символы. Интерфейс MsqlPerl предоставляет для этого 
функцию quote, доступную через любой описатель базы данных. Наконец, при выводе 
на экран используется непреобразованный вариант переменной.
При добавлении класса в базу данных удобно использовать такую функцию mSQL, как 
последовательности. Вспомним, что в таблице class была определена 
последовательность. Ее значения используются в качестве уникального 
идентификатора для каждого класса. Благодаря этому два класса могут иметь 
одинаковые названия (или одного и того же учителя и т. д.) и все же быть 
различными. Это также окажется удобным при дальнейших изменениях в классе. Пока 
между формами передается уникальный ID, все прочие данные о классе можно 
свободно изменять.
Наконец, отметим, что выводимая этой функцией форма для ввода учащихся 
генерируется динамически. Для вывода формы с правильным числом записей 
используется введенное раньше число учащихся. Помните, что CGI-программа 
полностью управляет генерируемым HTML. Любая часть, включая формы, может быть 
создана программным образом.
Если пользователь не ввел никаких учащихся, то работа на этом закончена. 
Позднее для добавления учащихся можно воспользоваться функцией модификации. 
Однако если требуется ввести учащихся, данные о них передаются функции add3, 
как показано ниже:
sub add3 {
if (not param('id')) { &end("Требуется числовой ID"); }
my $id = param( 'id');
my ©list = &find_last_student;
my ($ref_students,$ref_notstudents) = &find_matching_students(@list);
@students = @$ref_students 
if $ref_students; 
@notstudents = @$ref_notstudents 
if $ref_notstudents;
if (@notstudents) {
# Вывести форму, говорящую пользователю, что в списке
# есть несуществующие учащиеся. Пользователь может автоматически
# создать учащихся или вернуться и исправить опечатки.
} else {
&update_students($id,@students);
#Вывести форму успешного завершения работы.
} }
В этой функции основная часть работы выполняется другими функциями. Это 
обусловлено тем, что в других частях CGI-программы возникают сходные задачи, 
которые полезно решать с помощью совместно используемых функций. Первая такая 
функция - f ind_last_student , которая изучает данные формы и возвращает список 
имеющихся в форме номеров, не связанных с ID в базе данных, всех введенных 
пользователем учащихся. Это необходимо, поскольку, как упоминалось раньше, 
предыдущая форма генерируется динамически и нет возможности непосредственно 
узнать, сколько учащихся включено.
sub find_last_student {
my @params = param; my @list = (); foreach (@params) {
next if not param($_); 
# Исключить все 'пустые' поля 
if (/-(first|middle|last|ext)(\d+)/) {
my $num = $2;
if (not grep(/"$num$/,@list)) { push(@list,$num); } } }
@list = sort { $a <=> $b} @list; return @list; 
}
Обратите внимание, что функция возвращает все числа, а не только последнее, 
которое, предположительно, будет числом введенных учащихся. Хотя предыдущая 

		
		
$i
 
<<-[Весь Текст]
Страница: из 157
 <<-