Анимация
JavaScript
|
Главная Библионтека Наше предложение □Ьельдь маринованная [ВгнаныВ шоколаде {Вход в магазин Рис. 19.1. Первая страница элеронного магазина Полный каталог товаров Е] Щучьи головы Потроха куриные Почки заячьи • Уши слоновьи Ба) 131-!Ь! шоколаде IЗаказтовара) Рис. 19.2. Каталог электронного магазина Оформление покупок Фамилия Адрес Скрыто: бананы в шоколаде Щучьи головы Захаэаг«> Рис. 19.3. Форма оформления покупок Следует знать о некоторых проблемах, сопровождающих использование скрытгх полей на HTML-странице Во-первых, значения в скрытых полях может увидеть кто угодно. Для этого пользователям достаточно просмотреть исходный HTML-код данной страницы, а в большинстве Web-броузеров такая возможность предусмотрена. Во-вторых, удаленные пользователи при большом желании могут изменить значения в скрытых полях. Это можно сделать, используя специальный Web-броузер или передавая данные формы вручную с помощью протокола HTTP. Поэтому при создаНИИ электронного магазина не слелует хранить цены на товары в скрытых нолях. Для идентификации товаров и иен иснользуйте снециальные коды. Учтите, что CG1- программа должна "заглядывать" в ценник только при отображении списка товаров. При разработке форм имеет смысл поинтересоваться, как это делают другие, и перенять некоторый опыт использования скрытых полей для сохранения информации. При этом следует воспользоваться возможностью просмотра исходного кода страницы, которая предоставляется большинством Web-броузеров в вще команды View=?Page Source. (В броузере Internet Explorer эта команда называется В виде HTML.) И не забывайте, что перенимать опыт можно лишь на уровне идей: вы не должны копировать чужую форму, поскольку копирование означает нарушение авторских прав. Многостраничная форма для сбора информации Проведение опросов и сбор информации в Internet - прекрасные примеры многостраничных форм. Как правило, объем содержимого таких форм слишком велик, чтобы вся информация смогла уместиться на одной странице, поэтому его делят на несколько страниц по некоторому принципу, например по категориям. Ниже рассматриваются примеры форм для проведения простого опроса, предназначенного для выяснения некоторых аспектов индивидуальности пользователей. Этот опрос состоит из четырех различных форм, но при желании их число можно легко изменить. Итак, вот как распределены функции между этими четырьмя формами. 1 Ряд вопросов общего характера, которые иногда используются для выясне-, ния типа личности. 2. Некоторые конкретные вопросы о привычках и вопрос, основанный на ответах, содержащихся на первой странице исследования. 3. Форма, позволяющая ввести имя и комментарии относительно данного исследования. •4. Сообщение, содержащее благодарность, которое выводится по завершении исследования. Для реализации всех четырех функций используется одна и та же CGI-программа. Именно она (в зависимости от номера текущей страницы) принимает решение о том, какая страница будет открыта следующей. Ядро программы представлено в листинге 19.1. Включение в текст программы директивы use CGI.-jCarp qw(fatalsroBrowEer); заставляет CGI-программу выдавать сообщения, являющиеся частью Web-страницы, но которые обычно относятся к файлу системного журнала Web-сервера. При написании больших CGt-программ подобные директивы могут облегчить процесс отладки. Результаты опроса сохраняются в текстовом файле, но не отображаются этой программой. Данная программа просто собирает ответы и сохраняет их в файле для дальнейшего использования. А для отображения результатов вам придется написать другую CGI-программу. Лис1У«-19.1.Перваячас1ьС01-программы, вьпотяоцэдсбор 1иформа»*1 : ll/usr/bin/perl -w 2: Fcntl qw(;flock); 3: СИ qw(:all); A: use CGlJiCarp q¥(fatalsToBrowser); 5: ияэ strict; 6: ny $surveyfile="/tiBp/survey.tKt"; 7: w *surve y answerB=qw(pettype daytype dcttes 9: realname oomeits) ; 10: ny $seniaphore file="/tn!p/survey.seffl"; 11: print header Г 12: if (1рагзш ) { 13: page one()} I Orpoc только начался 14: } elsif (definsd param(pageone)) { 15: page twD{); \ Шгчеты слвеяи на первую страницу, k ВЕЛВОД ВТСРСЙ 16: } elsif (definsd param(pagetwo)) { 17: page three(); ♦ йлвсд последаэй слранкщвл. 18: } else { 191- .-urvey done() Вывсд биагсяэдяюсти и схяфанение данных-------- 20: ) \ Проведем анализ программы. • Строка Во время проведения опроса каждая HTML-форма содержит поля ввода. Имена всех полей собраны в используемом здесь массиве. Этот массив имен позже будет использован в функциях save{) и repeat hidden(). • Строка 13. Если эта COl-программа вызывается без параметров, т.е. не для обработки данных формы, вызывается функция page one(), предназначенная для вывода первой формы для проведения опроса. • Строка 17. Если этой COI-программе передается параметр HTML-формы, именуемый pageone, вызывается функция page two(). Если же передается параметр pagetwo, вызывается функция page three(). • Строка 19. Если этой COI-программе передаются параметры HTML-формы, но они не являются параметрами pageone или pagetwo, то это означает, что нужно завершить выполнение опроса. В этом случае с помощью функции сохраняются результаты опроса, и его участнику выводится сообщение с благодарностью. На каждой странице предусмотрены кнопки, обеспечивающие загрузку следующей формы, как показано на рис. 19.4. Поскольку имя кнопки передается COI-программе как параметр, его можно использовать для отображения номера страницы, данные которой были только что переданы программе. Web-броузер Web-броузер Далее Далее 1. Посылает CGI-программе q Вызов без параметр параметров. выводится первая страница \ 2. CGI-программа выводит страницу 3. Посылает CGI-программе параметр pagetwo 6. Выводится последняя страница Рис. 19,4. Схема действий, выполняемых в результате использования кнопок на страницах ML-формl В листинге 19.2 вы найдете продолжение COI-программы для проведения опроса. Лист19.2. орая чть CGI-)оrраl, выгзщей сбор кформа 21: fBcpjue { 22: print«END PAGEONE; 23: <FORM> 24: й>1 лео&ше кп1кк или СЕ&к?<ВЕЪ- 25: <INPOT type=radio name=pettype value=dog>Co6aK<BR> 26: <INPUT type=radio naine=pettype value=cat>KoffleK<BR> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 [ 92 ] 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |