Анимация
JavaScript
|
Главная Библионтека 29: 30: 31: 27: <Р> 28: ЕЫ сгахите сйбя к яавсрзка! или к CEBai?<m> <IHPUT typ&radio name=daytype value=early>K жаворонкам<ВК> <INPCJT type=radio name=daytype value=late>K СЕВахкШ> <P> 32: Bern, ui si мзпи сави рашть, как ОЕвагься та работу-<НЬ- <INPUT typ&radio ran&<d£ttes value=casual>B свободной стипе<ВЯ> 34 Mie=clothes value=buBiness>B деловом CTHJieBR 35: <P> 36: ЕЬги ui SI ццЕуг очутились на безгкдгм острове, 37: Kai уолвнею si предпочлв?<ВК> 38: <mPUT typ&radio nane=castaway 30: value=ginger>BacHnHE Теркнн<ВЯ> 39: <INPUT type=radlo naffle=caBtaway ¥а1ае=шагуа>Дева Кария<ВК> 40: <INPUT tzp&radio name=castaway уа1ие=рго£>Профессор<ВК> 41: <INPUT type-Tadio name==caEtaway value=skipper>KanHTaB корабля<вн> 42: <INPUT type=Eub!nit rame:pagecne value=" Далее "> 43: </FOM> 44: EKD PAGE OIIE 45: } • Строка 44 представляют собой новую конструкцию языка Perl, с которой вы еще не встречались. Она называется встроенным документом (inline document). Эта конструкция позволяет определить текстовую строку, которая служит признаком конца документа в программе. Примечательно то, что встроенные документы можно помещать прямо в программы на Perl, располагать их на нескольких физических строках, включать в них переменные Perl, которые замещаются как и в обычных строках, заключенных в двойные кавычки. Чтобы начать встроенный документ, используйте символы «, за которыми должно следовать любое слово или текстовая строка. Документ продолжается до тех пор, пока не встретится следующее вхождение указанного слова, расположенного в начале строки, как показано в следующем примере: $a=«END OF QUOTE; Все этс считается встроенным дскументсм. END OF QUOTE За словом, идентифицирующим начало встроенного документа (в предгду-щем примере - это строка а в листинге 19.2 - должна стоять точка с запятой. В конце встроенного документа это слово должно начинаться с первой колонки и не должно иметь "в хвосте" никаких символов типа пробелов или точек с запятой. Внутри встроенного документа переменные ведут себя так же, как и в обычных строках, заключенных в двойные кавычки ("")- Таким образом, во встроенных документах нужно осторожно использовать символы $ и С помощью встроенных документов в программы на можно встраивать большие фрагменты HTML-кода, что избавит вас от необходимости возиться с символами двойных кавычек, множеством операторов PINT и т.п. Функция, представленная в листинге 19.2, просто выводит HTML-форму. В дескрипторе <FORM> не указан какой бы то ни было метод или сценарий обработки данных формы. Поэтому при нажатии кнопки запроса сервер повторно запустит ту же CGI-программу, которая сгенерировала форму. Если не задан атрибут method, используется стандартный метод G, Обратите внимание, что кнопке запроса в форме присвоено имя pageone. При передаче данных этой формы CGI-проГрамме будет послан параметр с именем pageone; в данном случае его значение не важно. Именно сам передаваемый параметр является определяюшим фактором для загрузки СО I-программой второй страницы. Следующий фрагмент CGI-программы сбора информации нриведен в листин- 19.3 19.3. Тр ча CGa-Зfрмы, выгз сбор форма 46: №цает стве пользователя в кр 47: sub repeatjiiddiai { 48: foreach my $answer ( gsurvey answers ) { 49: if (defined param($answ)) { 50: print <INPUT 1YEE=hidden"; 51: print " nane=5answer "; 52: print " value=\"", param($answer),"\">\n"; 53: } 54: } 55: } 56: sub page two { 57: $pet=param{pettYpe); 58: if (! defined $pet) { 59: $pet="goldfiS"; 60: } 61: print«END PAGE TWO; 62: <FORM> 63: ЙЛ бы Предпочли... <BR> 64: <IRPUT type=radio name=travel value=travel>IIyTeHecTBOBaTb<BR> 65 ype=radio name=tiave Осгаваться floua< 66: <P> 67: Вы считаете себя.. .<BR> 68: <INPUr type=radio name=riaky value=yes>Be3paccyflHHii<BR> 69: <INPOT type=radio name=ris)cy уа1ие=по>Осторожным<Вй> 70: <P> 71: У вас есть $pet?<BR> 72: <INPaT type=radio name=ownpet value=$pet>na<BR> 73: < INPUT type=radio naiiie=ownpet value=nD>Hsfr<B[?> 74: <P> 75: <INPUT iraE=siihnit name=pagettfo value="flanee"> 76: ED PAGE TWO 77: ~ repeat hidden(); 78: print •</FORM>"; • Строка 47. Как ясно из комментария в строке 46, функция в этой строке помешает значения всех полей предыдущей формы в скрытые поля текущей формы. Массив gsurvey answers содержит все возможные значения атрибута "name=" в HTML-формах. Нри первом выполнении CGI-программы большинство из этих полей еще не определено, поскольку относящиеся к ним части опроса еще не проведены. • Строка 49. Проверяются все возможные параметры формы, которые перечислены в массиве §survey answers. Если параметр определен, то его значение помещается в скрытое поле. При этом используется дескриптор HTML< INPUT TCPE=Hdden>. • Строка 60. Эта функция вызывается для вывода второй страницы формы. Если первая страница была заполнена правильно, параметр pa( pettype) будет иметь значение dog или cat, которое помешается в переменную $pet. Если же участник исследования проигнорирует этот вопрос и параметр param( pettype) останется неопределенным, будет использовано стандартное значение goldfish. • Строки 61-76. Выводится остальная часть второй страницы формы, и параметр $pet подставляется в вопрос. Таким образом, данный вопрос зависит от ответов пользователя, которые он сделал на первой странице. • Строка 77. Все параметры HTML-формы из первой страницы переносятся в эту форму как скрытые поля. Если проанализировать форму на данном этапе (на момент формирования второй страницы), то окажется, что все ответы из первой страницы хранятся как скрытые поля в конце второй страницы формы. Программа вывода третьей страницы формы представлена в листинге 19.4. Лислу#г19.4. Чешергая часть ССачрофаум,1,вьпоги 80: sub page three { 81: print«EHD PAGE THREE; 82: <FORM> " 83: Последняя страница! Эта инфорувпет необязательна!<BR> 84: Ваше имя: 85: <1НРит TYPE=text name="realname"><BR> 86: Ваши предложения и за1(ечання;<ВН> 87: <TEXTAREa NAHE=coiDments cols=40 rows=10> 88: </TEXTARER> 89: <R> 90: <INPUT TYPE=submit name=pagetliree 91: value="Submit survey results"> 92: END PAGE THREE 93: repeat hidden{); 94: print ~</rORM>"; 95: } Функция pagethree довольно проста: она лишь выводит в форме текстовое поле и сообщение. А в конце снова вызывает функцию repeat hidden (), чтобы поместить все скрытые поля на третью страницу формы. Последняя часть CGI-программы представлена в листинге 19.5. ист 19.5. Посен чть СС11-)огра, вьгзщей сбор информа 96: rx/ey-xtr { 97: saveO;- 98: print "Спасибо!"; 100: » 101: i Все ЕВЭуОтьтапы рсслвдэвания ссзаняш в файле $surve/file 102: * 103: sub save { 104: get lock(); 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 |