Смекни!
smekni.com

Тег FORM, параметр action (стр. 5 из 5)

Рисунок 4 - Структура таблицы Messages

Содержимое файла testform.pl

#!/usr/local/perl/bin/perl

use DBI;

require "cgi-lib.pl";

&ReadParse(*input);

# Имя пользователя БД

$opt_user="root";

# Пароль доступа к БД

$opt_password="";

# Имя базы

$database="guest";

$url="http://localhost/db/form.html";

$cgi="http://localhost/cgi-bin/db/result.pl ";

# Вывод http-заголовка

print "Content-type: text/html\n\n";

# Подключение к базе

$dbh = DBI->connect("DBI:mysql:database=$database",

$opt_user,$opt_password) ||

die "Can't connect: $DBI::errstr\n";

$query="INSERT INTO messages (user_name, user_email, user_message) values ('$input{'user_name'}','$input{'user_email'}',’$input{'user_messages'}’)";

# Подготовка

$sth = $dbh->prepare($query);

$sth->execute();

# Отключение от базы

$rc = $sth->finish;

$rc = $dbh->disconnect;

print "<br><a href='$url'>Вернуться на страницу форм</a><br>";

print "<br><a href='$cgi'>Просмотреть сообщения</a><br>";

Листинг формирования результатов в таблице

В следующем скрипте показана возможность извлечения данных из таблицы и представление извлеченной информации в виде таблицы.

Фрагмент скрипта perl result.pl

#!/usr/local/perl/bin/perl

use DBI;

# Имя пользователя БД

$opt_user="root";

# Пароль доступа к БД

$opt_password="";

# Имя базы

$database="guest";

$url="http://localhost/db/form.html";

$cgi="http://localhost/cgi-bin/ ";

# Вывод http-заголовка

print "Content-type: text/html&bsol;n&bsol;n";

# Подключение к базе

$dbh = DBI->connect("DBI:mysql:database=$database",

$opt_user,$opt_password) ||

die "Can't connect: $DBI::errstr&bsol;n";

# Чтение введенных в форме данных (данный пример рассматривает случай, когда была осуществлена передача одного поля формы.) В других скриптах функция включена в библиотеку cgi-lib и вызывается &ReadParse(*input);

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {

($name, $value) = split(/=/, $pair);

$value =~ tr/+/ /;

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$value =~ s/<!--(.|&bsol;n)*-->//g;

$input{$name} = $value;

}

$query="select * from messages";

# Подготовка

$sth = $dbh->prepare($query);

$sth->execute();

$cols=$sth->{NUM_OF_FIELDS};

#Формирование таблицы и её заголовка

print "<table width=70% align=center cellspacing=0 cellpadding=1 border=1>";

print "<tr valign=middle align=center>";

@fieldname=@{ $sth->{NAME}};

for($i=0;$i<$cols;$i++)

{

print "<td><b>$fieldname[$i]</b></td>&bsol;n";

}

print "</tr>";

#Заполнение таблицы содержимым, исходя из запроса

while (my $ref=$sth->fetchrow_arrayref())

{

print "<tr align=center>";

for($i=0;$i<$cols;$i++)

{

print "<td>",$ref->[$i],"</td>";

}

print "<tr>&bsol;n";

}

print "</table>";

Листинг формирования результатов в списке

print "<SELECT name=column>&bsol;n";

# заполняем список таблиц

$sth = $dbh->prepare("show tables");

$sth->execute;

while (@line = $sth->fetchrow_array()) {

print " <OPTION>$line[0]</OPTION>&bsol;n";[1]

}

print "</SELECT>”;

Шаг 3. Тестирование скрипта

Проверив скрипт визуально на наличие ошибок - отсутствие ";" в конце строк, наличие непарных скобок и кавычек и т.п., запустите скрипт для проверки в баузере, перейдя предварительно в каталог cgi-bin (http://localhost/cgi-bin/db/testform.pl).

Если в скрипте содержатся ошибки, то вы увидите сообщение типа:

syntax error at testform.pl line 18, near "open"Execution of testform.pl aborted due to compilation errors.

В этом случае проверьте текст около указанной строки. Помните, что причина ошибки может быть выше на несколько, иногда достаточно много строк. В случае если скрипт запускался через web browser, то сообщения выводяться в файл &bsol;usr&bsol;local&bsol;Apache&bsol;logs&bsol;error.log

Исправленный скрипт сохраните, и тестируйте так до тех пор, пока он не выдаст корректных выходных данных.

Шаг 4. Тестирование скрипта с формой

Если скрипт работает сам по себе, вы можете оттестировать его с формой:

1. Убедитесь, что web-сервер запущен.

2. Запустите ваш браузер.

3. Наберите URL по которому находится ваша форма (обратите внимание, что строка должна начинаться с http://, а не с file://. В нашем случае http://localhost/bd/form.html

4. Введите ваше имя в поле формы и нажмите кнопку "Зарегистрировать".

Рисунок 5 - Результат работы скрипта testform.pl

Это и есть страница, сгенерированная скриптом "на лету". Если вы получили сообщение об ошибке сервера, проверьте правильность расположения скрипта и правильность значения параметра action в тэге form.

6. Если вы видите правильно сгенерированную страницу, нажмите на ссылку “Посмотреть сообщения”. Вы должны будете увидеть новую страницу, созданную скриптом примерно в таком виде:

Рисунок 6 -Результат работы скрипта result.pl

Если вы не видите этого, проверьте правильность URL. В противном случае форма и скрипт правильно работают вместе. Вы успешно создали первое web-приложение.

Для изучения различных переменных создайте следующий скрипт: #!/usr/local/perl/bin/perl#vars.cgisub urldecode{ #очень полезная функция декодировани local($val)=@_; #запроса,будет почти в каждой вашей CGI-программе $val=~s/&bsol;+/ /g; $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge; return $val; }print "Content-Type: text/html&bsol;n&bsol;n";print "<HTML><HEAD><TITLE>CGI-Variables</TITLE></HEAD>&bsol;n";print "<BODY>&bsol;n";print "Enter here something:<ISINDEX><BR>&bsol;n";print "Your request is:$ENV{'REQUEST_STRING'}<BR>&bsol;n";print "Decoded request is:urldecode($ENV{'REQUEST_STRING'})<BR>&bsol;n";print "<HR>&bsol;n";print "Variables:<BR>&bsol;n";print "<I><B>REQUEST_METHOD</B></I>=$ENV{'REQUEST_METHOD'}<BR>&bsol;n";print "<I><B>QUERY_STRING</B></I>=$ENV{'QUERY_STRING'}<BR>&bsol;n";print "<I><B>CONTENT_LENGTH</B></I>=$ENV{'CONTENT_LENGTH'}<BR>&bsol;n";print "<I><B>CONTENT_TYPE</B></I>=$ENV{'CONTENT_TYPE'}<BR>&bsol;n";print "<I><B>GATEWAY_INTERFACE</B></I>=$ENV{'GATEWAY_INTERFACE'}<BR>&bsol;n";print "<I><B>REMOTE_ADDR</B></I>=$ENV{'REMOTE_ADDR'}<BR>&bsol;n";print "<I><B>REMOTE_HOST</B></I>=$ENV{'REMOTE_HOST'}<BR>&bsol;n";print "<I><B>SCRIPT_NAME</B></I>=$ENV{'SCRIPT_NAME'}<BR>&bsol;n";print "<I><B>SCRIPT_FILENAME</B></I>=$ENV{'SCRIPT_FILENAME'}<BR>&bsol;n";print "<I><B>SERVER_NAME</B></I>=$ENV{'SERVER_NAME'}<BR>&bsol;n";print "<I><B>SERVER_PORT</B></I>=$ENV{'SERVER_PORT'}<BR>&bsol;n";print "<I><B>SERVER_PROTOCOL</B></I>=$ENV{'SERVER_PROTOCOL'}<BR>&bsol;n";print "<I><B>SERVER_SOFTWARE</B></I>=$ENV{'SERVER_SOFTWARE'}<BR>&bsol;n";print "<I><B>HTTP_ACCEPT</B></I>=$ENV{'HTTP_ACCEPT'}<BR>&bsol;n";print "<I><B>HTTP_USER_AGENT</B></I>=$ENV{'HTTP_USER_AGENT'}<BR>&bsol;n";print "<I><B>HTTP_HOST</B></I>=$ENV{'HTTP_HOST'}<BR>&bsol;n";print "<HR>&bsol;n";print "All enviroment:<BR>&bsol;n";foreach $env_var (keys %ENV){ print "<I>$env_var=$ENV{$env_var}</I><BR>&bsol;n"; }print "</BODY></HTML>&bsol;n"; вызов скрипта осуществляется http://localhost/cgi-bin/var.cgi

Задание

1. Создайте таблицу Messages в соответствии с предложенной структурой.

2. Получите работающее приложение, обеспечивающее внесение пользователем данных в таблицу Messages.

3. Представьте в web браузере информацию, содержащуюся в таблице Messages.

4. Внесите изменения в структуру таблицы Messages, HTML –форму, скрипты и SQL запросы для решения задач:

· Отображения даты внесения сообщения (добавьте новое поле в таблице);

· Адреса пользователя (добавьте новое поле на форму и поле в таблице)

· REMOTE_HOST (добавьте новое поле в таблице)


Учебное издание

ПОНОМАРЕВ Алексей Анатольевич

Часть 3

РАЗРАБОТКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА К БД В СУБД MYSQL

Методические указания к выполнению лабораторных работ

по курсу «Базы данных» для студентов III курса специальностей 230105 «Программное обеспечение вычислительной техники и автоматизированных систем». 230201 «Информационные системы и технологии».

Научный редактор

доктор технических наук,

профессор Г.П. Цапко

Подписано к печати 26.11.2009. Формат 60х84/16. Бумага «Снегурочка».

Печать Xerox. Усл. печ. л. 000. Уч.-изд. л. 000.

Заказ ХХХ. Тираж ХХХ экз.

Томский политехнический университет

Система менеджмента качества

Томского политехнического университета сертифицирована

NATIONAL QUALITY ASSURANCE по стандарту ISO 9001:2000

. 634050, г. Томск, пр. Ленина, 30.

[1] Если требуется заполнять список несколькими полями в строке, то команда примет вид print " <OPTION value=$line[0]>$line[0] $line[1]</OPTION>&bsol;n";[1] где 0 и 1 номера соответствующих атрибутов, возвращаемых запросом select