MySQL & mSQL



              

Пример приложения, использующего DBI - часть 4


my Sin = $dbh->prepare($q1); $in->execute;

# Извлечем значение ID , которое MySQL создал для нас

my $id = $in->insertid;

my $query = "create table t$id ( id INT NOT NULL,

my $def = "insert into t$id values ( 0, ";

my $total = 0;

my @qs = grep(/^q\d+$/,param);

foreach (@qs) {

$query .= $_ . " INT,\n";

my $value = 0;

$value = param($_) if param($_);

$def .= "lvalue, ";

$total += $value; }

$query .= "total INT\n)"; $def .=-"$total)";

my $in2 = $dbh->prepare($query);

$in2->execute;

my $in3 = $dbh->prepare($def);

$in3->execute;

# Обратите внимание, что мы запоминаем экзамены в отдельных файлах. Это

# полезно при работе с mSQL, поскольку он не поддерживает BLOB.

# (Тип TEXT, поддерживаемый в mSQL 2, можно использовать,

# но это неэффективно.)

# Поскольку мы используем MySQL, можно с таким же успехом

# поместить весь экзамен в BLOB.

open(TEST,">teach/tests/$id") or die("A: $id $!");

print TEST param('test'), "\n";

close TEST;

print header, start_html('title'=>'Экзамен создан', 'BGCOLOR'=>'white');

print <<END_OF_HTML;

<Н1>Экзамен создан</h1> <P>

Экзамен создан.

<р>

<А HREF=".">Перейти</а> на домашнюю страницу 'В помощь учителю'.<br>

<А HREF="test.cgi">nepeimi</a> на главную страницу экзаменов.<br>

<А HREF="test.cgi?actio,n=add">Добавить</a> следующий экзамен.

</body></html>

END_OF_HTML

}

Теперь введем информацию об экзамене в базу данных. При этом мы шагнем дальше обычного ввода данных, который видели до сих пор. Данные по экзаменам достаточно сложны, поэтому каждый экзамен лучше хранить в собственной таблице. Вместо добавления данных в существующую таблицу мы создадим совершенно новую таблицу для каждого экзамена. Сначала мы создадим ID для нового экзамена с помощью функции автоинкрементирования MySQL и введем название и ID экзамена в таблицу с именем test. Эта таблица является просто указателем на экзамены, по ней можно легко найти ID любого экзамена. Затем мы создадим одновременно два запроса. Первый будет запросом CREATE TABLE, который определит наш новый экзамен. Второй запрос будет иметь тип INSERT и запишет в нашу таблицу максимальные баллы по каждому вопросу. Эти запросы будут отправлены серверу базы данных, что завершит весь процесс (после вывода пользователю страницы с сообщением об успешном завершении). Позднее, после сдачи экзамена учащимися, для каждого учащегося будет создана запись в таблице экзамена. Эти записи могут быть сравнены с максимальными значениями для определения оценки учащегося.




Содержание  Назад  Вперед