Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

web - tec / PHP 5 для начинающи

.pdf
Скачиваний:
69
Добавлен:
12.06.2015
Размер:
26.79 Mб
Скачать

PHP, HTML и состояние сеанса 143

пользователя. Остаток от деления (если он есть) возраста пользователя на 10 удаляет+ ся путем округления в меньшую сторону до ближайшего целого числа. Для вычисле+ ния остатка используется оператор Modulus (%). После этого из полученного числа вычитается единица, и результат присваивается переменной. Последняя строка воз+ вращает 0, если пользователь ввел возраст от 0 до 19 лет; 1, если введенный возраст по+ падает в промежуток 20++++29 лет; 2, если возраст попадает в промежуток 30++++39 лет, и т.д. Результат вычислений хранится в новой переменной $AgeAllowance:

$AgeAllowance = ($_POST['Age']/10 - ($_POST['Age']%10)/10)-1;

Следующая строка значительно короче. В ней два только что вычисленных значе+ ния перемножаются и результат сохраняется в новой переменной $LoanAllowance, которая представляет собой окончательное число, ограничивающее размер возмож+ ного займа.

$LoanAllowance = $SalaryAllowance * $AgeAllowance;

Следующие две строки выводят на Web+странице подтверждение введенного поль+ зователем размера займа и сумму допустимого займа:

echo "Запрашиваемая ссуда:$_POST[Loan]<br>"; echo "Допустимая ссуда:$LoanAllowance<br><br>";

В двух последующих строках используется оператор <= (меньше или равно), кото+ рый позволяет принять решение на основе полученной информации. Данный опера+ тор определяет, не превышает ли необходимый пользователю размер ссуды сумму, допустимую банком, и если не превышает, то на Web+странице отображается сообще+ ние, подтверждающее принятие заявки. Данная структура детально обсуждается в следующей главе, поэтому здесь она рассмотрена очень кратко.

Отображаемое сообщение содержит персональную информацию (имя и фамилию), введенную пользователем в форму:

if ($_POST['Loan'] <= $LoanAllowance) echo "Да, $_POST[FirstName] $_POST[LastName], мы удовлетворим Вашу заявку";

В последней строке PHP+сценарий обрабатывает ситуацию отклонения заявки ++++++ ко+ гда сумма, которую пользователь хочет занять в банке, превышает допустимую банком сумму. В этом случае на Web+странице отображается сообщение об отклонении заявки:

if ($_POST['Loan'] > $LoanAllowance) echo "Извините, $_POST[FirstName] $_POST[LastName], в настоящее время мы не можем принять Вашу заявку";

Это практически все, что касается данных программ. Есть еще одна деталь: ин+ формация в реальном приложении такого рода конфиденциальна, поэтому для пере+ дачи данных формы следует использовать метод POST. При этом следует помнить, что этот метод скрывает информацию от рядового пользователя, однако хакеры легко могут похитить информацию, передаваемую с помощью данного метода. Чтобы обес+ печить реальную безопасность, необходимо применять SSL+сертификат для шифро+ вания обмена данными между пользователем и Web+сервером.

Возможные усовершенствования приложения

Рассмотренное выше приложение нельзя называть идеальным. Если приложить некоторые усилия, его работу можно нарушить или заставить его отображать нело+ гичные значения. Это возможно, потому что корректность значений, полученных от пользователя, никак не проверяется. Как можно предотвратить ввод абсолютно непра+ вильных значений, например, 965 в поле возраста? Очевидно, что такое значение не

144 Глава 3

может быть верным, но помешать вводу такого числа невозможно. В последующих главах рассматриваются способы доработки подобных приложений путем проверки значений и передачи на обработку только тех значений, которые находятся в преде+ лах определенного диапазона.

Понятие состояния

В общих чертах многие пользователи компьютеров представляют себе работу та+ ких настольных приложений, как Excel, Word, Dreamweaver и др. Пользователь запус+ кает приложение, оно появляется на экране и дает возможность работать с докумен+ тами посредством пунктов меню, диалоговых окон, элементов управления и полей форм. Может показаться, что нет никакого разделения между логикой обработки данных в приложении и пользовательским интерфейсом. На самом деле всякий раз, когда пользователь выбирает какой+либо пункт меню, нажимает кнопку или вводит какие+либо данные в поле формы, он фактически использует пользовательский ин+ терфейс, а пользовательский интерфейс обменивается данными с программной логи+ кой внутри приложения. Затем приложение отвечает, выполняя обработку и выводя какой+либо ответ в пользовательском интерфейсе. Некоторые действия пользователя могут не иметь отклика, тогда как другие, очевидно, приводят к выполнению огром+ ного объема скрытой от пользователя обработки данных.

Как только пользователь посредством пользовательского интерфейса вводит ка+ кие+либо данные в приложение, изменяется общее состояние данного приложения. Состояние приложения можно описать как точное мгновенное состояние всех дан+ ных и переменных в приложении. Приложение должно отмечать изменения состоя+ ния, поскольку эти изменения могут требовать какого+либо отклика (который в свою очередь вызывает дальнейшие изменения состояния приложения).

Кроме взаимодействия пользователя с приложением, существует множество об+ стоятельств, которые могут изменить состояние приложения. Например, предполо+ жим, что пользователь играет в игру и у него в распоряжении 15 секунд для переме+ щения. Приложение отслеживает системное время и может выполнять действия, абсолютно независимые от действий пользователя (кроме самого перемещения), в за+ висимости от истекшего периода времени (еще один случай изменения состояния). Какое отношение это имеет к Web+приложениям?

Программист может не задумываться о состоянии при программировании на+ стольных приложений, потому что обычно взаимодействие между пользовательским интерфейсом и программной логикой незаметно. Однако программирование для Web вынуждает программиста учитывать эту проблему, поскольку протокол HTTP не фик+ сирует состояние соединений. HTTP ++++++ протокол без фиксации состояний, так как он не имеет встроенного механизма, отслеживающего состояние каждого объекта в пользовательском интерфейсе и информирующего программную логику об измене+ нии этого состояния.

Вместо этого обмен данными между браузером и сервером принимает форму на+ жатия на ссылки или кнопки отправки форм. Этот процесс зависит не только от поль+ зователя (иначе его можно было бы автоматизировать) ++++++ на медленных каналах или прерывистых соединениях это может занимать длительное время. Поэтому создание Internet+приложений на PHP требует использования других механизмов для контроля состояния, а программисту приходится принимать меры, чтобы справиться с тем, что пользовательский интерфейс отключился или вообще не отвечает так, как это ожидается.

PHP, HTML и состояние сеанса 145

Контроль состояния

Часто программист сталкивается с проблемой сохранения состояния в PHP+ программах, когда требуется сохранять значения переменных между запросами стра+ ниц, поскольку каждая страница является отдельной программой, а как только про+ грамма выполнила обработку, все переменные и значения теряются ++++++ программа за+ вершила работу, и все данные стерлись из памяти. В отличие от настольных приложений, которые хранят данные в памяти до тех пор, пока пользователь не за+ кроет приложение, PHP+программа запускается только после запроса, активизирую+ щего данную страницу, и работает до тех пор, пока не будет завершена обработка и/или HTML или текстовое содержимое не будет возвращено пользователю.

PHP способен заполнить пустоту между циклами запрос+ответ, обеспечивая посто+ янство данных, продлевая, таким образом, интерактивность. Этот процесс непре+ рывного обновления серверной информации обеспечивает работу большинства ин+ терактивных сайтов и жизненно необходим для поддержки сеансов. Поддержка сеансов ++++++ возможность обращаться к последовательности интерактивных операций, которая начинается при посещении или регистрации пользователя на сайте и заканчи+ вается, когда пользователь уходит с сайта или долгое время не проявляет активности.

Ключевым компонентом данного процесса обычно является cookie*файл (неболь+ шой блок данных, хранящийся на клиентском компьютере) или некоторая перемен+ ная, пересылаемая между клиентом и сервером, которая часто называется идентифи* катором сеанса. Cookie+файлы и идентификаторы сеансов используются для того, что+ бы сервер ‘‘знал’’, с каким клиентом он взаимодействует в процессе того или иного запроса. Идентификатор сеанса (или соответствующий cookie+файл) идентифицирует клиента на Web+сайте так же, как имя пользователя идентифицирует данного пользо+ вателя в операционной системе.

Сеансы также поддерживают состояние между запросами страниц (они подробно об+ суждаются далее), однако сперва рассмотрим некоторые другие доступные методы, вклю+ чая использование скрытых полей форм, строк запроса, баз данных и cookie+файлов.

Скрытые поля форм

Ранее уже освещалась работа скрытых полей форм при отправке серверу данных (жестко определенных разработчиком). Чтобы поддерживать состояние с помощью скрытых полей форм (например, сохраняя уникальное значение, представляющее продукт, с которым работает пользователь, такое как идентификатор продукта), мож+ но просто поместить значение текущего идентификатора продукта в скрытое поле формы. Идея заключается в том, чтобы дать пользователю возможность выбрать про+ дукт из выпадающего списка (дескриптора select), а затем отправить форму:

<form action="myform.php" method="post"> <select name="selected_product_id"> <option value="121">Продукт 121</option> <option value="122"> Продукт 122</option> </select>

<input type="submit" name="button" value="Выбрать продукт"> </form>

После этого пользователю можно возвратить страницу со следующим кодом:

<input type="hidden" name="chosen_product_id" value="<?php echo $selected_product_id; ?>">

146 Глава 3

До того как страница будет возвращена пользователю, его выбор будет обработан как такой код (предположим, пользователь выбрал продукт 122):

<form action="myform.php" method="post">

<input type="hidden" name="chosen_product_id" value="122">

Таким образом, когда пользователь в следующий раз отправит форму, в отправлен+ ных данных будет поле chosen_product_id, которое будет преобразовано PHP в пе+ ременную $chosen_product_id. Эту переменную затем можно будет использовать для обработки информации по выбранному продукту независимо от того, на какой странице пользователь выбрал данный продукт. Однако нельзя забывать, что каждый раз, когда пользователь запрашивает другую страницу, в коде этой страницы должно быть то же скрытое поле с тем же значением. В противном случае это значение будет потеряно.

Строки запроса

Чтобы поддерживать значения состояния между запросами страниц, можно ис+ пользовать строки запроса так же, как скрытые поля форм. Однако, как уже отмеча+ лось, пары имя/значение строк запроса будут отображаться в адресной строке брау+ зера вместе с URL. Такой способ передачи данных очень ненадежен, а, кроме того, он предоставляет злоумышленнику возможность прервать, перехватить или иным обра+ зом вмешаться в передачу информации.

Базы данных

Механизм работы баз данных и доступа к ним обсуждается в главах 9, 10 и 11, од+ нако общеизвестно, что базы данных используются для постоянного (т.е. данные со+ храняются даже после выключения сервера) хранения структурированной информа+ ции, поэтому очевидно, что базы данных можно применять для хранения данных между запросами страниц. По существу, если разработчик не против издержек созда+ ния запросов к базе данных при каждом обращении к странице, то для хранения всех постоянных данных между запросами страниц можно использовать таблицу базы данных. Такой подход, безусловно, имеет свои недостатки ++++++ издержки в соединениях с базой данных и дополнительные усилия на создание самой базы данных.

Cookie-файлы

Cookie+файлы представляют собой быстрый (и, по мнению некоторых программи+ стов, неорганизованный) метод хранения (на клиентском компьютере) небольших блоков данных, которые должны быть постоянными между отдельными визитами пользователя на Web+сайт. Этот метод нельзя назвать ни очень мощным, ни очень на+ дежным средством ++++++ cookie+файлы определенно не следует использовать для посто+ янного хранения данных, так как простая смена браузера клиентом приведет к пол+ ному уничтожению сохраненных ранее cookie+файлов. Вместе с тем во многих ситуациях cookie+файлы могут оказаться очень удобными. Ниже перечислены неко+ торые наиболее распространенные примеры использования cookie+файлов.

Хранение пользовательских настроек для определенного сайта.

Хранение ключа (или ключей), которые можно использовать для связи пользо+ вателей с их персональными данными ++++++ как это делается в бесчисленных при+ ложениях типа покупательских тележек.

PHP, HTML и состояние сеанса 147

Обеспечение квазипостоянного идентификатора сеанса, позволяющего поль+ зователю оставаться зарегистрированным на сайте до тех пор, пока он явно не покинет сайт или не закроет браузер.

Cookie+файлы являются наилучшим способом хранения небольших, полезных, но не критичных блоков данных. Один из самых лучших примеров использования cookie+файлов ++++++ хранение настроек, позволяющих изменять внешний вид сайта со+ гласно потребностям пользователя. Хотя возможность настраивать под себя цветовую схему сайта очень удобна для пользователей, те пользователи, которые не могут (или не хотят) использовать cookie+файлы, потеряют не многое.

Задуманные вначале как безвредные ‘‘помощники’’ Web+разработчиков, cookie+файлы в последние годы заслужили плохую репутацию. Часто ими злоупотребляют (например, хранят в них большие объемы данных, которые было бы лучше хранить на стороне серве+ ра), а иногда используют не по назначению (например, для накопления информации о клиентах без их на то согласия). Однако при умеренном и ответственном использовании cookie+файлы могут оказаться весьма полезными, в частности в таких ситуациях:

когда известно, что поддержка cookie+файлов включена у всех посетителей сай+ та, например, в корпоративных и образовательных интрасетях;

для добавления сайту ‘‘бантиков’’ ++++++ функций, которые делают внешний вид сайта более привлекательным, но для использования сайта фактически не требуются.

Использование cookie-файлов

Процесс реализации cookie+файлов отличается от браузера к браузеру, но можно выделить некоторые важные моменты, общие для всех cookie+файлов:

cookie+файл представляет собой небольшой блок данных, который можно ис+ пользовать для хранения имени и значения переменной наряду с информацией о сайте, с которого поступил данный cookie+файл, и сроке его действия;

cookie+файлы обеспечивают хранилище данных на клиентской стороне в виде файлов, сохраненных на жестком диске клиентской машины;

Web+сайт обычно может модифицировать только созданные им самим cookie+ файлы;

доступ к cookie+файлам и их изменение (при удовлетворении соответствующих критериев безопасности) может быть предоставлен только Web+серверу, с ко+ торого они первоначально были отправлены.

Во время визита клиента на Web+сайт, использующий cookie+файлы, Web+сервер инструктирует клиента (т.е. Web+браузер) сохранить у себя определенную информа+ цию для последующего использования. Ответственность за сохранение этой инфор+ мации ложится на клиента. Поддерживающие cookie браузеры решают эту задачу пу+ тем сохранения данных в файле, названном по имени сайта, которому принадлежит cookie, в специально зарезервированном для этой цели каталоге. При последующих обращениях к этому же сайту клиент отправляет серверу копию данных ++++++ данные на клиентской стороне остаются постоянными в течение заданного срока действия cookie, по истечении которого файл удаляется из системы. Срок действия задается сервером, когда сервер отправляет клиенту инструкцию о сохранении cookie+файла, и, по сущест+ ву, представляет собой число секунд, в течение которых клиент должен хранить этот файл. Если сервер назначает срок действия, равный нулю секунд, то браузер должен хранить такой файл только до тех пор, пока пользователь не закроет браузер.

148 Глава 3

Поскольку cookie+файлы хранятся на стороне клиента, они выходят из+под кон+ троля сервера сразу после создания. Пользователи могут удалять cookie+файлы само+ стоятельно путем нажатия определенной кнопки в Web+браузере или вручную, они также могут редактировать содержимое данных файлов, поэтому невозможно быть уверенным в том, что браузер вернет правильные данные.

По существу, cookie представляют собой сообщения сервера вроде ‘‘эти данные нужно запомнить; напомни мне, когда вернешься в следующий раз’’. ‘‘Следующий раз’’ может наступить когда угодно: когда пользователь нажмет на ссылку двумя секундами позже или когда вернется на сайт через неделю. Это и есть постоянство данных. Cookie+файлы подобны именным табличкам, которые идентифицируют делегатов кон+ ференции до тех пор, пока делегаты их носят.

Web+серверы отправляют клиентам cookie+данные в HTTP+заголовках, которые передаются раньше любого HTML+текста. Аналогично браузеры возвращают cookie+ данные, также используя HTTP+заголовки. Клиент определяет, какие cookie+файлы отправлять Web+сайту, на основании имени сервера и запрашиваемой в текущий мо+ мент страницы. Поэтому если пользователь заходит на сайт www.php.net, то браузер не отправляет этому сайту cookie, полученные от сайта www.wrox.com.

При установке cookie может устанавливаться имя сервера и путь (хотя это необя+ зательно) ++++++ это разрешает доступ к данному cookie+файлу только с заданного сервера и/или пути на этом сервере. Клиенты используют данную информацию для того что+ бы узнать, следует ли отправлять серверу определенный cookie+файл. Браузер с вклю+ ченной поддержкой cookie обычно отправляет в заголовке все cookie+файлы, которые (по мнению браузера) принадлежат этому сайту.

Запись и считывание cookie-файлов

PHP, как и подобает современному языку Web+сценариев, полностью поддержива+ ет cookie, а отправка cookie осуществляется с помощью вызова функции setcookie(). Подобно функции header(), функцию setcookie() необходимо вызывать до того, как в браузер будет выведен какой+либо HTML+текст, поскольку cookie отправляются в HTTP+заголовках, которые должны отсылаться раньше HTML+кода.

Функция setcookie() принимает шесть параметров, самыми важными из кото+ рых являются первые три:

1.Строка, используемая в качестве имени переменной.

2.Строка, используемая в качестве значения этой переменной.

3.Временная метка Unix, означающая срок действия cookie+файла.

Временная метка Unix ++++++ это длинное целое число, которое представляет коли+ чество секунд, прошедших с полуночи 1 января 1970 года. Текущее время в форме временной метки Unix можно получить с помощью функции time(). Чтобы устано+ вить cookie, срок действия которого заканчивается через один час после установки, можно вызвать функцию setcookie(), передав ей в качестве третьего параметра выражение time()+3600.

Три последние параметра функции setcookie() используются не так часто; их описания приведены ниже.

Путь, к которому относятся cookie+файлы; браузер не возвращает серверу cookie+ файлы, установленные с несоответствующих путей. Например, если значением этого параметра при установке cookie был путь /my/path/number/one, то при

PHP, HTML и состояние сеанса 149

переходе на страницу /my/path/number/two браузер не сможет отправить этот cookie+файл ++++++ cookie+файл будет отправлен только при возвращении по+ сетителя на страницу /my/path/number/one.

Домен, к которому относится cookie+файл; здесь действуют те же правила, что и в предыдущем случае. Параметр может оказаться полезным, когда Web+сервер поддерживает несколько доменов.

Параметр secure ++++++ целое число. Если оно равно 1, то cookie+файл будет пере+ даваться только через SSL+шифрованное соединение. (Cookie+файл на жестком диске клиента будет храниться в незашифрованном виде; параметр secure га+ рантирует лишь то, что cookie будет шифроваться для передачи через Internet.)

В простейшем случае последние три параметра можно опустить, поэтому типич+ ный вызов функции setcookie() может выглядеть так:

setcookie("fontprefs", "", time()+3600);

Доступ к установленным cookie+файлам осуществляется еще проще ++++++ для этого не требуется вызывать какую+либо функцию вообще. Так же как и в случае POST+ переменных, PHP автоматически помещает информацию cookie в глобальную об+ ласть, поэтому использовать значения, сохраненные в cookie, так же просто, как ис+ пользовать любые другие переменные. Например, значение полученного cookie с именем fontprefs автоматически будет доступно во всем сценарии как значение глобальной переменной $_COOKIES['fontprefs'].

Существует несколько способов удаления cookie+файлов. Конечно, если пользова+ тель знает, где искать cookie+файлы на своей машине, то он всегда может изменять или удалять эти файлы. Однако иногда необходимо заставить сервер удалить свой cookie+файл и для этого существует две возможности:

заменить дату окончания действия cookie датой в прошлом, например, setcookie ("num", "0", time()-9999);;

переустановить cookie+файл, указав только его имя, например, setcookie ("fontprefs");.

Практика Использование cookie-файлов для хранения пользовательских настроек

Ниже приведен сценарий, который сохраняет в cookie+файле выбранные пользо+ вателем размер и гарнитуру шрифта. При последующих визитах пользователя на эту страницу сценарий проверяет cookie+файл и восстанавливает сохраненные в нем на+ стройки. Сохраните следующий код как cookies.php:

<?php

//cookies.php

if ($_POST[type_sel]) {

setcookie("font[type]", $_POST[type_sel], time()+3600);

}

if ($_POST[size_sel]) {

setcookie("font[size]", $_POST[size_sel], time()+3600);

}

//Определим размер и гарнитуру шрифта, и, поскольку //пока еще можно добавить HTML-заголовок, добавим его:

$type = array("arial", "helvetica", "sans-serif", "courier"); $size = array("1","2","3","4","5","6","7");

150 Глава 3

echo "<html><head><title>Тест cookie<\/title><\/head><body><div align='center'>";

//В данной форме содержится два списка, которые можно //использовать для определения пользовательских предпочтений:

echo "<form method='POST'>";

echo "Какой шрифт Вы хотели бы использовать? ";

echo "<select name='type_sel'>";

echo "<option selected value=''>по умолчанию</option>"; foreach ($type as $var) {

echo "<option>$var</option>";

}

echo "</select><br><br>";

echo "Какой размер шрифта Вы хотели бы использовать? ";

echo "<select name='size_sel'>";

echo "<option selected value=''>по умолчанию</option>";

foreach ($size as $var) {

echo "<option>$var</option>";

}

echo "</select><br><br>";

echo "<input type='submit' value='Получить cookie'>"; echo "</form>";

//Наконец, выведем некоторую полезную информацию и отформатируем ее в //соответствии с выбранными пользователем настройками:

echo "<b> Cookie-информация:</b><br>"; echo "<font ";

if ($_COOKIE[font][type]) {

$cookie_font_type = $_COOKIE[font][type]; echo "гарнитура='$cookie_font_type' ";

}

if ($_COOKIE[font][size]) {

$cookie_font_size = $_COOKIE[font][size]; echo "размер='$cookie_font_size' ";

}

echo ">";

echo "\$font[type] = $cookie_font_type<br>"; echo "\$font[size] = $cookie_font_size<br>";

echo "</font><br>";

echo "<b> Информация переменных формы:</b><br>"; echo "<font ";

if ($_POST[type_sel]) {

$post_type_sel = $_POST[type_sel]; echo "гарнитура='$post_type_sel' ";

}

if ($_POST[size-sel]) {

$post_size_sel = $_POST[size_sel]; echo "размер='$post_size_sel' ";

}

echo ">";

echo "\$type_sel = $post_type_sel<br>"; echo "\$size_sel = $post_size_sel<br>"; echo "</font>";

echo "</div></body></html>";

?>

Откройте страницу cookies.php в браузере и поэкспериментируйте со списками (рис. 3.20).

PHP, HTML и состояние сеанса 151

Рис. 3.20.

Как это работает

Наиболее интересными являются первые две функциональные строки данного сценария. Напомним, что cookie отправляются в HTTP+заголовках, поэтому вызовы необходимо поместить до вывода какого+либо HTML+кода:

<?php

//cookies.php

if ($_POST[type_sel]) {

setcookie("font[type]", $_POST[type_sel], time()+3600);

}

if ($_POST[size_sel]) }

setcookie("font[size]", $_POST[size_sel], time()+3600);

}

Для каждого cookie+файла устанавливается срок действия в течение одного часа. Затем определяются массивы, содержащие доступные гарнитуры и размеры

шрифта, после чего для определения всех возможных вариантов в форму помещают+ ся выпадающие списки, использующие данные массивы. После отправки формы вы+ бранные пользователем значения отправляются методом POST обратно сценарию:

152 Глава 3

$type = array("arial", "helvetica", "sans-serif", "courier"); $size = array("1","2","3","4","5","6","7");

echo "<html><head><title>Тест cookie</title></head><body><div align='center'>";

//В данной форме содержится два списка, которые можно использовать для //определения пользовательских предпочтений:

echo "<form method='POST'>";

echo "Какой шрифт Вы хотели бы использовать? ";

echo "<select name='type_sel'>";

echo "<option selected value=">по умолчанию</option>"; foreach ($type as $var) {

echo "<option>$var</option>";

}

echo "</select><br><br>";

echo "Какой размер шрифта Вы хотели бы использовать? ";

echo "<select name='size_sel'>";

echo "<option selected value=">по умолчанию</option>";

foreach ($size as $var) {

echo "<option>$var</option>";

}

echo "</select><br><br>";

echo "<input type='submit' value='Получить cookie'>"; echo "</form>";

Наконец, отображаются cookie+ и POST+переменные, показывая, как изменяются их значения в зависимости от выбора пользователя. Отображаемые переменные форматируются согласно соответствующим значениям:

//Наконец, выведем некоторую полезную информацию и отформатируем ее в //соответствии с выбранными пользователем настройками:

echo "<b> Cookie-информация:</b><br>"; echo "<font ";

if ($_COOKIE[font][type]) {

$cookie_font_type = $_COOKIE[font][type]; echo "гарнитура='$cookie_font_type' ";

}

if ($_COOKIE[font][size]) {

$cookie_font_size = $_COOKIE[font][size]; echo "размер='$cookie_font_size' ";

}

echo ">";

echo "\$font[type] = $cookie_font_type<br>"; echo "\$font[size] = $cookie_font_size<br>";

echo "</font><br>";

echo "<b> Информация переменных формы:</b><br>"; echo "<font ";

if ($-POST[type_sel]) {

$post_type_sel = $_POST[type_sel]; echo "гарнитура='$post_type_sel' ";

}

if ($_POST[size-sel]) {

$post_size_sel = $_POST[size_sel]; echo "размер='$post_size_sel' ";

}

echo ">";

echo "\$type_sel = $post_type_sel<br>"; echo "\$size_sel = $post_size_sel<br>"; echo "</font>";

echo "</div></body></html>";

?>

Соседние файлы в папке web - tec