Архив рубрики «Самоучитель по веб-дизайну. Книга 4»
Самоучитель по креативному веб-дизайну. Книга 4, стр.1
Глава 10. РНР4
Тем не как было упомянуто выше в этой главе, переменные
$firstName и будут считаться разными переменными. Следователь —
но, чтобы воспользоваться значением, введенным в элементе f irstName, необхо —
димо использовать переменную $firstName (в регистр символов полно — соответствует имени элемента формы).
РНР для обработки и извлечения результатов формы
В совете было показано, образом данные элементов фор — мы можно извлечь в PHP-сценарии. Как вы знаете, значение элемента фор — мы использовать через переменную имя которой соответ — значению атрибута name формы. Таким образом, будет использовать переменную $firstName для доступа к элемента формы, объявленного следующим образом:
type=»text» name=»firstName» size=»20″>
использованием РНР для результатов формы необходимо проверить, ввел ли посетитель данные во обязательные поля формы. также требуется проверка что введенные данные принадлежат к требуемому типу и не выходят за пределы допустимого диапазона. В целях достижения бо —
лее эффективности проверка введенных данных осуществляется Web-бра — k
узером перед отправкой их Web-серверу.
Выполнение всех проверок Web-сервером приведет к увеличению нагрузки на сервер и использованию пропускной способности По — сетитель может забыть ввести данные в обязательных полях и/или данные, которые выходят за диапазонов допустимых значений. результатов формы Web-сервером потребует от ожидания, пока Web-браузер неверные данные Web-серверу, только для того, чтобы получить сообщение о что введенные данные содержат ошибку.
Самоучитель по креативному веб-дизайну. Книга 4, стр.2
В передачи результатов формы может отправлять неверные несколько раз (что загружает сеть Internet), и дол — жен будет корректность результатов одной и той же формы несколько раз (а уже загружает сервер).
За счет использования внедренных на JavaScript — или VBScript — для проверки корректности данных Web-браузером вы возмож — ность предложить исправить данные перед Web-серверу результатов заполнения Таким образом, проверка результа — тов формы позволяет исключить многократную передачу данных
Web-серверу. JavaScript — VBScript-функции предупреждают посетителя об ошибках в (или незаполненных обязательных полях) и заставляет посе —
тителя перед передачей результатов формы исправить все имеющиеся ошибки.
Тем не даже после проверки результатов заполнения формы необходимо провести вторую, окончательную проверку
Глава 10. РНР4 51 5
Теоретически говоря, JavaScript — VBScript-функции, внедрен — ные в Web-страницы, предотвратят передачу неверных данных. К жалению, некоторые Web-браузеры не языки написания сценари — ев, и в безопасности некоторые посетители отключить поддержку сценариев в своих браузерах во выполнения сценариев, внедренных на Поэтому, чтобы убедиться, обрабатываться будут только «кор —
Самоучитель по креативному веб-дизайну. Книга 4, стр.3
ректные данные, они еще раз проверяются на Web-сервере.
ПРАКТИКУМ
Для проверки того, посетитель ввел данные в или многостроч — ное ввода текста, используется равенства (==), который значение элемента формы со нулевой длины, как показано в следующем примере:
if (trim($firstName) == «»)
{
echo «** He введена фамилия **«;
$formResultsValid = false;
}
того, PHP имеет встроенных функций, которые ис — пользовать для выяснения того, являются ли введенные в поле данные числом
(is_numeric(), is__reai() и is_intege r После проверки, ввел ли посетитель
в ввода текста данные возможно, числовые данные), провести дополнительные проверки, которые покажут, принадлежат ли введенные данные
к допустимому диапазону значений.
В отличие от переключателей, каждый флажок на форме является независи —
мым объектом и не входит в группы. Чтобы гарантировать, по — сетитель установил хотя бы один из флажков, которые, по мнению, дол — жны группой, присвойте каждому уникальное имя, как показано в следующем коде:
type=»checkbox» name=»windows» value=»Windows»>Windows
type=»checkbox» name=»mac» value=»Macintosh»>Mac
type=»checkbox» name=»unix» value=»UnixM>Unix
Web-браузер передает серверу имя/значения только для уста —
новленных флажков (т. е. которые посетитель отметил «галочкой» (или
крестиком), чтобы что посетитель установил хотя бы один фла —
жок, в можно использовать логические операторы И как показано ниже:
if ((!isset($windows)) && (!isset($mac)) && (!isset($unix)))
{
«Вы должны выбрать что-нибудь из набора Windows, Mac и Unix
» ;
$formResultsValid = false;
}
Встроенная РНР-функция isse t () возвращает значение true, значение переменной, передаваемой было установлено. Поскольку браузер пере —
51 6 Глава 10. РНР4
только значения установленных флажков, переменные флажков, не установ — ленных на форме, в PHP-сценарии значений содержать не будут.
Web-браузер работает с переключателями по группам на основании имени
группы, присвоенного в name дескриптора
Самоучитель по креативному веб-дизайну. Книга 4, стр.4
реключателей С именем giveOutEmailAddr:
type=»radio» value=MYes» name=»giveOutEmailAddr»>fla Ifl
Web-браузер в группе переключателей позволяет всего один переключатель. Тем не менее, браузер вовсе не чтобы был установ — лен хотя бы переключатель. Поэтому, чтобы что посетитель выбрал один переключатель из группы переключателей, в используется встроенная функция isset() :
if (!isset($giveOutEmailAddr))
{
«Пожалуйста, сообщите, разрешаете ли вы использовать».
«свой адрес электронной почты» ;
$formResultsValid = false;
}
передает серверу только пару имя/значение для ус — тановленного переключателя. этом используется имя Таким обра — зом, если посетитель не установил ни одного переключателя в группе, браузер
не передавать серверу значение PHP-переменной, соответствующей группе переключателей.
И, предположим, что список выбора объявлен в HTML-коде страни — цы следующим образом:
Windows 98
Windows ME
Windows XP
Macintosh
Unix
Linux
Обратите внимание на квадратные скобки ([]) , которые находятся за списка выбора. Если выбора назвать просто при выборе не — опций PHP-сценарий будет иметь доступ только к одной опции (пос —
Самоучитель по креативному веб-дизайну. Книга 4, стр.5
ледней выбранной в списке выбора). Это не важно, если в дескрипторе
не атрибут multiple, что что посетитель будет возмож — ность выбирать только один элемент в Использование квадратных скобок после имени списка позволяет передавать выбранные посетителем значения в виде массива.
Глава 10. РНР4 51 7
определить, что посетитель выбрал хотя бы один элемент из списка
выбора, как и в случае, будет использоваться встроенная РНР-функ —
ция isset():
if (!isset($currentOS))
{
«Вы должны выбрать или несколько операционных систем,».
«которые используете в настоящее время. » ;
$formResultsValid = false;
}
все фрагменты кода, приведенные в этом совете, в целое, по — лучаем сценарий проверки корректности результатов формы:
$formRe suits Valid = true;
/*
которые выводят имена и элементов для элементов, со —
держащих корректные данные, и выводят имена и «сообщение об ошибке» и ус —
танавливают значение булевой $formResuitsVaiid равным fals e элементов, содержащих некорректные данные.
который обрабатывает результаты формы с пользовательс — ких и/или функций, или сценарий, либо здесь, либо
во внешней РНР-странице.
у
echo «»;
echo «Введенная вами информация передана «.
«на обработку. Спасибо!»;
}
Если форма содержит данные, вывести для посетителя
кнопку «Back» **
else
{
echo «
Самоучитель по креативному веб-дизайну. Книга 4, стр.6
сообщение. К РНР содержит встроенную функцию mail о, можно использовать для указания Web-серверу на необходимость отправки элект —
ронного сообщения с локально^ или (для Windows) удален — ного (т. е. почтового сервера). Таким образом, прибегая к услугам
сервера, при необходимости отправки сообщения по электронной почте вы уже
не будете зависеть от наличия в посетителя соответствующим образом настроенного программного обеспечения.
ПРАКТИКУМ
Перед использованием PHP-функции maii o Internet-провайдер должен ус — тановить путь к SMTP-серверу (или в использования платформы Unix,
путь к программе sendmaii) в файле php. ini. если Web-сервер ваше —
го работает под управлением операционной системы
Windows NT, должен открыть файл php. in i в каталоге winnt, а затем
установить параметры SMPT И sendmail from В mail function INI-фаЙ —
ла, как показано в следующем примере:
[mail function]
SMTP = smtp. lvcablemodem. com ; только для Win32
sendmail_from = kki@NVBizNet. com ; только для Win32
;Только для Unix. Вы также указать аргументы
; (по умолчанию: ‘sendmaii —t — i1) .
;sendmail_path =
Для отправки сообщения по почте создайте форму, аналогичную показанной на рис. 10.7, и значение атрибута action в дескрипторе
Самоучитель по креативному веб-дизайну. Книга 4, стр.7
ру возможность состояние посетителя за счет хранения следующей информации:
• Настроек для сайта и ранее просмотренных им Web-страниц.
• Ключа, ассоциирует посетителя с его данными, храня — щимися в базе данных сайта.
• Ключа который позволяет посетителю войти на сайт один раз и оставаться зарегистрированным на сайте вплоть до момента выхода с сайта закрытия Web-браузера.
• Товаров, выбранных посетителем на сайте коммерции, что
позволят все выбранные товары на странице когда посети — тель готов покинуть сайт и оплатить покупку.
К сожалению, некоторые разработчики используют для сбора информации о покупателях без их ведома что. еще хуже, переда — ют эту третьим лицам, часть запрещают прием cookie —
Web-браузерами. Если обработка сценарием Web-станиц зависит
от хранения и считывания перед входом посетителя на сайт пользуйте PHP-сценарии для того, принимает ли его Web-браузер cookie-наборы.
Глава 10. РНР4 52 1
ПРАКТИКУМ
проверки того, принимает ли Web-браузер cookie-наборы, вставь —
те следующий перед HTML-кодом Web-страницы входа на Web —
или индексной страницы записи «тестового» cookie-набора:
// Создать данных для использования в качестве
// «тестового» cookie-набора
$today = getDate();
$dateString = $today[•month'].» «.$today['mday '].» ,
$today['year'];
// Попытаться установить cookie-набор 1
setCookie(«TestCookie», $dateString);
// Остальная индексной страницы или страницы входа в систему
Если вы передаете Web-страницы только с расширением
.рпр, а индексная сайта (т. е. его страница) имеет рас —
.htm, вставьте содержимое страницы после приведенного выше
сценария в Web-страницу с расширением. рпр, например, в код страницы
LoginPage. php. Затем в дескриптор домашней страницы (как правило,
index. htm или defauit. htm) атрибут onload, как ниже, ко — торый загружает РНР-страницу:
Далее на PHP-странице, которая загружается в Web-браузер выходе посе — тителя со страницы входа на сайт индексной страницы, вставьте следующий сценарий:
// Создать строку данных, с которой будет сравниваться
// значение cookie-набора
$today = getDate();
$dateString = $today['month'].» «.$today['mday'].», «.$today['year'];
if (!empty($testCookie))
{
if ($testCookie == $dateString)
{
// Проверить имя пользователя и пароль и если данные верны
// перейти на страницу успешного входа на сайт
header(«Location: Loggedln. htm»);
exit;
}
}
// Если cookie-набор не было установлен, вывести на экран страницу, которая
// предлагает разрешить прием cookie-наборов Web-браузером
header(«Location: NeedCookies. htm»);
exit;
?>
Проверку нужно разнести по двум Web-страницам, поскольку
Web-браузер передает и принимает cookie-набор только в качестве части заголов —
ка Web-страницы. образом, вызов функции setcookie() в первом РНР —
52 2 Глава 10. РНР4
сценарии cookie-набор, который Web-сервер передает Web-браузеру в за — страницы входа на сайт его домашней страницы. Web-браузер в свою сохраняет cookie-набор (в приведенном это текущая дата)
в cookie-файле на жестком диске в компьютере При переходе посе — между страницами сайта передает все cookie-наборы (в при —
примере это Testcookie) Web-серверу в качестве HTML-запроса новой страницы.
получении Web-сервером запроса на передачу сервер пе — редает на обработку HTTP-запрос (Web-страницу) и cookie-на — бор. PHP-процессор в свою может получить доступ к значению любого cookie-набора с помощью имя которой соответствует cookie — набора с предшествующим доллара ($). Таким образом, в приведенном примере, в котором setcookie() создала cookie-набор с именем testcookie, PHP-процессор возможность проверить значение переменной
Самоучитель по креативному веб-дизайну. Книга 4, стр.8
$testcopkie и сравнить его со значением даты. Если переменная
$testcookie не определена или ее значение не соответствует дате, Web —
браузер не сохранил созданный функцией setcookie() , что чает, что Web-браузер не принимает Как результат, РНР-процес —
перенаправляет Web-сервер на Web-страницу которая предлагает посетителю изменить настройки по обработке cookie-наборов и раз — решить их прием браузером. В противном если переменная $testcookie текущую системную дату, сохранил созданный функцией setcookie() cookie-набор, и PHP-процессор страницу, которая позво — посетителю получить доступ к содержимому сайта.
Использование РНР и дискового для организации парольного доступа к Web-сайту
разработке Web-сайта с доступом для зарегистрированных пользо — необходимо обеспечить вход авторизированных пользователей на сайт и
исключить неавторизированных посетителей. Для запроса у посетителя
имени пользователя и пароля воспользоваться HTML-формой, показан — ной на рис. которая будет предоставлять доступ посетителей к ресурсам с ограниченным доступом.
Для простоты установим атрибута name первого элемента формы
равным «usemame», а второго элемента — «password». Для передачи в РНР-сце — имени пользователя и пароля, посетитель вводит в элементы необходимо установить в атрибуте actio n дескриптора формы URL-адрес PHP-страницы, как показано в следующем примере:
Самоучитель по креативному веб-дизайну. Книга 4, стр.9
if ($fp = fopen(«с:\\password. txt», «г»))
{
while (feof ($fp) — 0)
{
// Прочитать из файла одну строку длиной до 1000 символов
$line = trim(fgets($fp,1000));
// Каждая строка в файле имеет формат «имя, пароль».
$userPass = split(«,», $line);
// Проверить наличие в файле введенного имени и пароля
if (($userPass[0] == $username) and ($userPass[1] == $password))
{
header («Location: ChptlOTip05LoginSuccessful. htm»);
exit;
}
}
// Введены имя пользователя и/или header («Location: ChptlOTipO5AccessDenied. htm»); exit;
}
Если сценарий находит в файле пару имя пользователя/пароль,
вызывает функцию header о, которая браузеру Web —
52 4 Глава 10. РНР4
страницу, только зарегистрированным членам сайта (в приведенном
этой страница chptiOLoginSuccessfui. htm). В противном если процессор в файле паролей не сможет введенные имя пользователя и/или
пароль, он передаст страницу «некорректного входа на сайт»
(chptiOAccessDenied. htm) и откажет посетителю в доступе к ресурсам с ограни — ченным доступом.
Чтобы предотвратить просмотра посетителем содержимого файла
паролей, храните его каталогов Web-сайта. (В противном посетитель сможет просмотреть файла, набрав в адресной браузера URL — адрес Файл паролей можно поместить в любой каталог на жестком диске Web-сервера, к которому доступ PHP-сценарий. Более для обеспече — ния высокого уровня защищенности в имени файла паролей не используй —
те слова или username, а пользуйтесь буквами и цифрами, снизит вероятность угадывания файла посетителями.
При установке в качестве атрибута typ e элемента формы Web — браузер вводе посетителем данных все символы звездочками (*). Тем не ме — при передаче Web-браузером формы (включая поля пароля) фактически передается открытый текст в формате Таким образом, хакер возможность пере — хватить и прочитать содержимое HTTP-сообщения, в котором Web-серверу в виде текста передаются данные формы.
Для защиты чувствительной используется протокол SSL Sockets Layer,
протокол сокетов), который позволяет данные, передаваемые меж —
ду Web-сервером и Web-браузером. выполняется вне РНР, SSL-кодиро — вание прозрачно PHP-сценариев. При использовании соединения Web-брау —
зер HTTP-запросы (включая запросы которые Web-браузер передает После получения кодированного Web-сервер декодирует сообщение и передает (открытый) текст на обработку PHP-сценарию. В свою PHP-процессор нахо — дит PHP-страницу, выполняет сценарий и функции, содержащиеся на странице, и пе — редает сформированную им страницу Web-сервер помещает страницу в тело который затем кодируется и передается При получении НТТР-от — (т. е. Web-страницы, запрошенной с Web-сервера) декодирует сообщение и выводит Web-страницу на экран.
Самоучитель по креативному веб-дизайну. Книга 4, стр.10
установки защищенной обработки (при которой Web-браузер и Web-сервёр мениваются кодированными сообщениями) обсудить этот вопрос с Internet-про — вайдером, на сервере находится ваш Web-сайт. того, как провайдер получит и установит необходимые ключи и сертификаты, PHP-сценарий изменять практически
не придется. отличием будет то, защищенные URL-адреса начинаются с
префикса «https:// » вместо стандартного «http:// » для адресов. Таким
образом, использования защищенного соединения переходе между РНР-страницами следующий формат:
header(«Location:https://www. NVBizNet. com/LoginScript. php»
вместо
header(«Location:http://www. NVBizNet. com/LoginScript. php»
Глава 10. РНР4 52 5
Предотвращение перехода посетителей по ссылкам на сайт
В предыдущем совете вы узнали, образом можно использовать форму входа на сайт и текстовый для ограничения доступа к Web-сайту за счет запроса у посетителей имени пользователя и пароля. К сожалению, исполь — зовании только страницы входа на сайт могут получить доступ к со — сайта даже без имени пользователя и пароля за счет страницы входа на сайт.
например, что сценарий входа на сайт, правиль — ность введенной имя пользователя/пароль в случае, посетитель вво —
дит верные имя и пароль, Web-браузеру страницу LoginSuccess. htm. для защиты содержимого используется только страница входа на сайт, имеет возможность обойти ее и получить доступ к содержимому сайта за счет закладки для страницы с ограниченным доступом (на —