Искусство программирования на Си (984073), страница 71
Текст из файла (страница 71)
СОРБ 1ИРО Сира1п(о = (0)Г написания сетевых ТОР('!Р-приложении на различных рованием. Оказывается, с использованием абстрактно- СОИИКСт1ОИ С1зепсеоппесггоп = (0)1 компьютсрал. Попеле тщательного исследования внут- го слоя не только теоретически, но и практически можсЬаг бага[255]м(0); реннего процесса ыл прс б . дложсн относительно перено- но упростить процесс переноса программ. Это не всегда гк (агдс Г= 2) симы з спосо написа б аписания одного приложения, которое простая задача, но, в конце концов, мы получаем суше( на многих системах.
компилируется и запускается огненные преимушества от устойчивости базового кола Наьягаьяе СИ-лрахххтехяд ни Г г! Глава 23 нее, ниже рассматриваются спсциазьныс тсги, ко~орые будут использоваться в приводимых примерах. А теперь приступим. Методы ввода данных в НТМ~ В ЭТОЙ ГЛАВЕ ° Что такое СС! ° Основы СО! Чед Диксон Тег <ПОЙМ> Для получения данных от пользователя в НТМС используется концепция формы. Форма НТМС начинается с теса <РОЕМ> и заканчивается тетом </РОВМ>. !Тети х ць "'" к„'зьч,,'и тч тх;,.рр "'ц"' '" ° 'е х юь:."::";.жх Написание Сб!-приложений на С ° Методы ввода данных в НТМ1.
° Среда СС! ° Получение данных ° Синтаксический разбор строки запроса ° Пример приложения: поиск прототипа функции ° Вопросы безопасности В настоящей главе рассмотрен слнный шлюзовой интер- рования. Он облегчает выв л ет вывод на экран текста и рисун фене, или, как его часто,,надьдваюьт..,..ГЯ.,ГСзхд1рзшь, ...рата, -иин;:,, чеп и-:..- ""..; --.--*"-----:. ном) вхолному и выходному потокам и к среде главнои вычислительной машины, называемой далее хост-машиной). Более того, можно (и даже желательно) писать СО1-программы на полностью переносимом языке стандарта А1КЯ С. В некоторых случаях используются базы данных ЬЯ), в которых отдельные части программ нс будут переносимыми, но можно обойтись и без использования таких баз данных.
Все СО1-коды в настояшеи главе написаны на А)х)Б! С. В НТМ) имеется несколько различных механизмов ввода данных, большинство из которых знакомо любому человеку, который использовал современные опсраци. онные системы с графическил1 инзсрфейсом пользователя. Для формирования вводимых пользователем исходных данных имеются выпадающие списки, рааиокнопки, кнопки выбора, поля ввода зскста, многосзрочные поля ввода текста и кнопки управления. Гтонноан Тег <!МРЕТ> <1«вцт тттк="Аквкт"> н(": ."' ."~'-" ' ' "'» з' е <к "; '> :"',;,В>.',м >Г' ...Ьн:.:,„"Т> Мнннн Д-'.;в!',)ч.'...,.-,Рь:.;;,".;:"",:;:,.г,." ъ-'.",!.;:.~':.„-~..дн'' ":-'Э;"'Ла.;:;,,".,„;: н;: ~-: ..Т Л<.:.,„~',йа;"=-.:„;ЭГТ,':,; -".!:.."., З!Ц' е, '" '»;' 'й>1 е ' 1'„Р;я„" ~>она !- н,":н«';и хаю ;:".:'и Кг:онл" '" м "~*:- гк, '~'"'.''"-'- ' "Г' ° ' н ° .'е) ','" 'Ь . '""" ' ."""' %."н' ' о) юм Дони но итон<не т он о тон егно е роз доз н ИИ ч.,~ ш Те~ и <!ХР()Т> являются основными тогами, использующимися в формах.
Этот тег сообщает браузсру, что мы хотим получить от пользователя какие-то данные. Тети <БХРЕТ> имеют несколько атрибутов, из которых наиболес часто используются ХАМЕ, УА).()Е и ТУРЕ. Атрибут ХАМЕ используется для присваивания данным имени, которое можно было бы распознавать. Например, сели мы хотим, чтобы пользователь ввел свой возраст, то такие данные можно назвать АОЕ.
По сути, это имя переменной, которое используется (как и лкм бос имя переменной в С) для обозначения определенного значения, имеющего определенный смысл. При передаче пользователем формы УУ<Ь-серверу в запросе бупет содержаться "АОЕ=23" (или любое пругое значение, введенное пользователем). (Строки запроса будут рассмотрены далее.) Атрибут ХАМЕ, как вы увидите, может также выполнять еще одну функцию: он может использоваться лля группировки элементов управления, ~'„й>; ' и ',"..ей"'','*',;:,." з,'.„.г б еу '«'" э» ен,,"', "'"; '",, ~„,е '"„й "ф„„,, ') "" ь'",и : 'й.'.'"-"' .«н. '",:нл г ' хмкт,":%',; <1«РПТ ТХРКнвлвк«ОАП «Л«хнкааааа<Е Э1ХК=10 «ЛХЪК«етвнзз> Если вы считаете, что такая возможность маскировки вводимых данных обеспечивает безопасность, не торопитесь с вывопами. Данные, защищенныс типом РАЯБУУОКП, передаются как простой текст.
Браузер просто нс отображает данные в форме, но, тем не менее, данные перепаются УуеЬ-серверу в незашифрованном виде. Поэтому не считайте тип РАЯБзУОИ) средством защиты с помощью пароля. Тнп Н)ППЕХ кажется лишним, но на самом деле он довольно полезен. Своей способносзью содержать текстовую строку он несколько напоминает тип ТЕХТ, но принцип его работы несколько иной.
Браузср не отображает для пользователя содержимого поля тица НН) ОЕХ, и пользователь ничего не знает о наличии на странице такого поля (сели, конечно, он нс просмотрит исходный НТ)(П.-код, что совсем несложно сделать). Если пользователь нс может даже видеть поле, не кнопки. Их можно расположить и так, как зто обычно делается, — в отдельных строках с подписями справа: <1«ЕПТ ТХВК=ААПТО «х«К=«ъгеепрс ТАЪЦК Е овкпкйо>1) охеаа <т> <1«РВТ Ттввнкхп10 КАКА «Ь(гепрх ЧАЬВЯ=К>2) «11Х <Р> <1«тпт тхтк=влпго «лмк «ъзееоре згхьвк к>з) ' В1аек Тег Р начинает новую строку. Он не требует ответного тета <гР> закрытия строки, поскольку начало новой строки обязательно является концом старой.
Радиокнопки используются для выбора одной альтернативы из небольшого списка взаимно исключающих друг друга альтернатив. Если список достаточно длинный, использовать рапиокнопки не совсем удобно, поэтому в таком случае вместо них лучше использовать выпадающие списки. Процесс создания выпадающих списков будет рассмотрен далее в этой главе. Тип СНЕСКВОХ очень похож по синтаксису на тип ВАП(У).,Я«иГппддз>тетГян,нлянгоздкячя.,пррнтызе о„-, =;,. и, '". ";„'. 'е;" ву;, ' ", '" '"„н,н Га ";Г,зт низе( Переключатели можно объединить в группу путем простого присвоения всем переключателям одного и того же имени.
Обратите внимание, что при объединении переключателей в группу по имени СО1-приложению будет передаваться одно поле для кажаого установленного псреклкзчателя, поэтому приложение должно иметь возможность обрабатывать данные такого вида. Пример использования переключателей, объединенных в группу, может выглядеть следующим образом: ведая <1«тпт тхтк=скксккох «июа-вмеее тльцк=ва скксккп> Соек)а <1«РВТ ПРИ= СВКСКВОХ КАКА= Яяеее Чдьпвнее> сия<озава <1«вцт тхтк= скксквох «я«к в ае чхьпк~ь свксккп> Если эти данные будут передаваться %еЬ-серверу без изменения, то СО1-программа получит два поля, и оба с именем Б«ееп Я«ее(=Ив и Я«ее(=СЬ. 'ЗЫ"'Пн»ч «'., „Г>1 ' ' ' ' ,"',„,."» '"Х,,ЬЧ':.,"Гн,„,"Ь.
„..~ ',„. ",>' 1 ...„ЧЕЕ>1 ' " ' „- "„".' 'н,,': Ь'~.," '".,А ~„;е "(н--"ф„„;",:,ла 'ее.',",;то>з< е ""Г с,,'~.',",;;..."„." ' ';н',мхе тай<1«) Доно«мите ыснштеиат<тесни<ли>)еоы Нанисс<ние СО/-ори <отенш< ни С 1! а Часть П1 Глава 23 <ЯВЬНСт ЫАИН=СО1О Яьгвтэ ИОЬтгРЬН> АВ51 С Яеапаагп ЬЭЬгагу Рппсегоп /« Этот код моает напомнить вам фувклвю ру в части предоставления надежной среды, то лучше РгоСоСуреа агбар(), поддерваваемую мвогвма всего.
наверное, использовать функцию 5(гсо)О или даже Это позволит полшоватслю выбирать одновременно </тьтьв> * компвляторамв; однако яеаор() не входат в несколько пунктов в списке. В большинстве графичес- </ППАО> стандартаую бвблнотеку АИЯ1 С. Поэтому, для 5(г(оп)(),что позволит вам самостоятельно проверить ких у<<сЬ-браузсров это можно сделать путем выбора <вову> « того чтобм код был полностью переносвмым, правильность сз льтата.) р р уз ') пунктов при нажатой клавише С<<1. В текстовом У«сЬ<Рдг> ПРВХОдатСя Чта-тО ПрапуМЫаата. Эта фУВКПВЯ Сситпвт ЬЯИОТНтЭ2 <РОад ИЯТЯОО= РОЯТ АСТ10В=*/сдг-Ьгп/ возвраяает ВОЬЬ, если строку нельзя браузсре )упх выбор нескольких пунктов из списка осу- * скопвровать влв длл калан недостаточно СОЙТЕМТ ТУРЕ шсствляется с полюшью кзавиши Енсе<. При использо- рьеаяе Суре 1п Сье паве ос Сье (иасегов * памяти.
В лротввном случае она возвращает ванин атрибута )>(СЕТ!РСЕ следует иметь в пилу, по мьояе ргососуре уоп ы)аь со яее. * указатель аа копию. Этот конкретный тип М!МЕ в явной форме информи- 'нйеЬ-сервер получит несколько (т.е. нуль и более) зна- Првмечавве. После Успеввого завервевна Руст пользователя о точном формате его данных. Из * фуакпвн веобходвмо с помояью фувклвв (гее() чений одной и той жс переменной.