Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ые (хоть это и не совсем осмысленно, но выполняем 
// сразу для всех POST-данных, не разбивая их на параметры) 
UrlDecode(Data); 
// выводим заголовок 
printf("Content-type: text/html\n\n"); 
// выводим документ 
printf(""); 
printf("

Здравствуйте. Мы знаем о Вас все!

"); printf("Ваш IP-адрес: %s
",RemoteAddr); printf("Количество байтов данных: %d
", NumBytes); printf("Вот параметры, которые Вы указали: %s
",Data); printf("А вот то, что мы получили через URL: %s", QueryString); printf(""); } Обратите внимание на строки, выделенные жирным шрифтом. Теперь мы используем промежуточный буфер для хранения QUERY_STRING. Зачем? Попробуем поставить все на место, т. е. не задействовать промежуточный буфер, а работать с переменной окружения напрямую, как это было в листинге 3.5. Тогда в одних операционных сис- темах этот код будет работать прекрасно, а в других — генерировать ошибку общей защиты, что приведет к немедленному завершению работы сценария. В чем же дело? Очень просто: переменная QueryString ссылается на значение переменной окруже- ния QUERY_STRING, которая расположена в системной области памяти, а значит, дос- тупна только для чтения. В то же время функция UrlDecode(), как я уже замечал, помещает результат своей работы в ту же область памяти, где находится ее параметр, что и вызывает ошибку. Чтобы избавиться от указанного недостатка, мы и копируем значение переменной окружения QUERY_STRING в область памяти, доступной сценарию для записи — на- пример, в какой-нибудь буфер, а потом уже преобразовываем его. Что и было сделано в последнем сценарии. Часть I. Основы Web-программирования 56 Несколько однообразно и запутанно, не так ли? Да, пожалуй. Но, как говорится, "это даже хорошо, что пока нам плохо" — тем больше будет причин предпочитать PHP другим языкам программирования (так как в PHP эти проблемы изжиты как класс). Формы До сих пор из всех полей формы мы рассматривали только текстовые поля и кнопки отправки (типа submit). Давайте теперь поглядим, в каком виде приходят данные и от других элементов формы (а их существует довольно много). Все элементы формы по именам соответствующих им тэгов делятся на 3 категории: r r ... r ...... Каждый из этих тэгов, конечно, может иметь имя. Ранее уже упоминалось, что пары имя=значение перед тем, как отправятся сценарию, будут разделены в строке пара- метров символом &. Кроме того, следует учитывать, что для тех компонентов формы, у тэгов которых не задан параметр name, соответствующая строка имя=значение передана не будет. Это ограничение введено для того, чтобы можно было в форме определять служебные элементы, которые не будут посылаться сценарию. Например, в их число входят кнопки (подтверждения отправки или обычные, используемые при программировании на JavaScript) и т. д. Так, создадим форму:
... какие-то поля ...
Несмотря на то, что кнопка Go! формально является полем ввода, ее данные не будут переданы сценарию, поскольку у нее отсутствует параметр name. Чаще все же бывает удобно давать имена таким кнопкам. Например, для того, чтобы определить, каким образом был запущен сценарий — путем нажатия на кнопку или как-то еще (например, просто набором его URL в браузере). Создадим следующую форму:
 
<<-[Весь Текст]
Страница: из 287
 <<-