|
Программирование >> Программный интерфейс приложений
Главной особенностью здесь является то, что выборка, сделанная на первом этапе, определяет содержимое второй страницы. Но если не произвести каких-то предварительных операций, Web-страницы не будут зависеть одна от другой. Решением будет являться сценарий, генерирую-ший страницы, устанавливаюшие значения параметров, управляющие повторным запуском сценария. При первом запуске сценария параметр еше не имеет значения, это будет означать, что сценарий находится на первой странице. После того как информация задана, эта страница запускает сценарий повторно, но теперь уже параметр имеет какое-то значение, указывающее сценарию, что ему нужно делать. Есть несколько способов передачи команд из страницы обратно сценарию. Одним из них является вывод формы, которую должен заполнять сам пользователь. И когда пользователь утверждает заполненную форму, ее содержимое пересылается на Web-сервер. Сервер передает информацию сценарию, который различает, что было заказано, вызвав метод paramO. Такие манипуляции позволяет производить наш третий сценарий CGI (сценарий, позволяющий пользователю вводить ключевое слово для поиска списка членов Исторической Лиги ). Другим способом указания команд сценарию является передача информации в URL, посылаемой на Web-сервер при запросе выполнения сценария. Воспользуемся этим методом в броузере таблиц базы данных sampdb И сценариях броузера оценок учащихся. Этот метод реализуется сценарием, генерирующим страницу, содержащую гиперссылки. Выбор ссьщки не только запускает сценарий повторно, но и задает значение параметра, которое указывает сценарию, что надо делать. На самом деле сценарий запускается автоматически в различных режимах работы, выдавая различные результаты в зависимости от выбранной гиперссылки. Такой сценарий позволяет производить рекурсивный вызов самого себя посьщкой адреса страницы, содержащей гиперссылку на свой собственный URL. Например, сценарий my script возвращает управление на самого себя с помощью такой ссылки: <А HREF= /cgx-bxn/my script >Click Ме!</А> И, когда пользователь щелкает на тексте Click Me! , его броузер возвращает на Web-сервер запрос на инициализацию сценария my script (т.е. самого себя). Конечно, в этом случае произойдет активизация той же самой страницы, так как никакой другой информации нет. Однако если к URL прибавить параметр, то при повторной инициализации сценарий может вызвать метод param() для того, чтобы проанализировать параметр и в зависимости от его значения предпринять определенные действия. Параметр может быть добавлен в конец URL, если добавить символ ? с последующей парой имя/значение . Для добавления нескольких параметров такие пары необходимо разделять символами & . Например: /cgi-bin/my scrxpt?name=va.2ue Сценарий CGI рекурсивного URL с присоединенными параметрами должен начинаться с вызова метода script name О . Он позволит получить свой собственный URL. А затем добавить параметры следующим образом: $url = $cgi->script name(); # получить URL сценария $url .= >name=value ; # добавить первый параметр $url .= sname2=value2 ; # добавить второй параметр Пользуясь методом CGLpm а (), после того как URL создан, можно сгенерировать тэг гиперссьшки <А>: print $cgi->a ({-href => $url}, Click Me! ); Посмотреть, как это работает лучще всего на примере короткого CGI-сценария. Будучи вызванным, сценарий flip flop отображает страницу Page А, которая содержит единственную гиперссьшку. Выбор этой ссылки повторно активизирует сценарий, но при этом параметр установлен таким образом, что сценарий отобразит страницу Page В. В свою очередь, страница Page В также содержит гиперссьшку на сценарий, но на этот раз без значения в параметре. Поэтому выбор ссылки на странице Page В возвращает на исходную страницу. Все последующие вызовы сценария будут переключать управление между страницами Page А и Page В. use CGI; my ($cgi) = new CGI; my ($url) = ?cgi->script name ( ) ; # собственный URL этого сценария print $cgi->header (); if ($cgi->param ( page ) ne b )# отобразить страницу page A { print $cgi->start html (-title => Flip-Flop: Page A ); print Это Page A.<BR>Для выбора Page B, ; $url .= ?page=b ; # подключение параметра для выборки # страницы page В print $cgi->a ((-href => $url}, Щелкните здесь ); else # отобразить страницу page В print $cgi->start html (-title => Flip-Flop: Page B ); print Это страница Page B.<BR>Для перехода на Page A, ; print $cgi->a ({-href => $url}, щелкните здесь ); print $cgi->end html () ; Запрос на работу сценария flipflop может поступить и от другого пользователя, но и в этом случае сначала будет вызвана первая страница. Значение переменной $url в предьщущих примерах задавалось достаточно изящным способом. При кодировании имен параметров и значений при подключении их к URL лучше всего воспользоваться методом escape (). Это позволит избежать проблем в случае, когда они содержат специальные символы. Вот самый лучший способ указания URL с присоединенными к нему параметрами. $url = $cgi->script name { ) ; # получить URL для сценария $url .= sprintf ( ?%s=%s , # добавить первый параметр $cgi->escape ( name ), $cgi->escape ( value )}; $url .= sprintf ( &%s=%s , # добавить второй параметр $cgi->escape ( name2 ), $cgi->escape { value2 )); Подключение к серверу MySQL Server из Web-сценария Сценарии, работающие с командной строкой, разработанные нами в предыдущем разделе, имеют общую преамбулу, которая устанавливает связь с сервером MySQL. Наши CGI-сценарии также разделяют общий код: use DBI; use CGI; use strict; # параметры соединения по умолчанию - ничего не задано ту ($tiost name, $user name, $password) = (undef, undef, undef); my ($db name) = samp db ; # создать исходный текст my ($dsn) = DBI:mysql:$db name ; Sdsn .= :tiostname=Stiost name if Stiost name; $dsn .= ;mysql read default f ile=/usr/local/apactie/conf/samp db. cnf ; # подключиться к серверу my (%attr) = ( RaiseError => 1 ); my ($dbli) = DBI->connect ($dsn, $user name, $password, \%attr) ; Эта преамбула отличается от того, что мы использовали в сценариях, работающих в командной строке, в следующих аспектах. Первый раздел теперь содержит оператор use CGI. Аргументы, принимаемые из командной строки, больше не анализируются. Профамма по-прежнему ищет парамефы соединения в конфигурационном файле, но не пользуется файлом my.cnf, расположенном в корневом каталоге пользователя, запустившего сценарий (в данном случае это корневой каталог пользователя Web-сервера). Web-сервер может запускать сценарии, работающие с самыми различными базами данных, поэтому совершенно очевидно, что все эти сценарии могут использовать одинаковые парамефы подключения. Наоборот, будут использоваться конфигурационные файлы, располагающиеся в совершенно различных местах (/usr/local/apache/conf/samp db.cnf). В случае если вы пользуетесь другим файлом, нужно изменить путь к конфигурационному файлу.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |