Июнь 2010

Самоучитель по креативному веб-дизайну. Книга 4, стр.11

пример, для страницы LoginSuccess. htm) или ввода URL-адреса страницы в ад — ресной строке браузера.



ПРАКТИКУМ

Для предотвращения возможности извлечения посетителем страниц из области с ограниченным доступом (без регистрации на сайте) поместите все содержимое сайта, доступное только для зарегистрированных членов сайта, в РНР-страницы,

т. е. Web-страницы с расширением .php. Затем перед HTML-кодом каждой стра — ницы с ограниченным доступом поместите PHP-сценарий, аналогичный пока- занному ниже:



// Определить URL-адрес Web-страницы с гиперссылкой,

// которая использовалась для доступа к данной странице

$fromPage = getEnv (‘rHTTP REFERER») ;

// Убедиться, что страница со ссылкой содержит URL-адрес, с которого

// допускается переходить на страницы из раздела с ограниченным доступом

// Web-сайта

if ((substr($?romPage,0,30) !~

«http://www. nvbiznet. com/hwdtt/») and

(substr($fromPage/0,26) !=

«http://nvbiznet. com/hwdtt/»))



// Если переход выполняется с недопустимой страницы, вывести сообщение

// об ошибке или просто передать Web-браузеру вместо запрошенной

// страницы страницу входа на сайт

header

exit;

‘}’»:

Затем Web-браузер передает URL-адрес Web-страницы с гиперссылкой, ис- пользованной для перехода на данную Web-страницу, в качестве страницы ссыл — ки в заголовке HTTP-запроса, передаваемого Web-браузером Web-серверу Если посетитель открывает данную страницу со страницы входа на сайт или путем на —

52 6 Глава 10. РНР4





жатия на гиперссылку, находящуюся на любой странице в каталоге «/hwdtt»

Web-сайта NVBizNet. com, функция getenv() вернет строку, которая начинается с

http://www. NVBizNet. com/hwdtt/ ИЛИ http://NVBizNet. com/hwdtt/.

Для применения приведенного выше сценария на своих Web-страницах ис — пользуйте в операторе if свой адрес сайта и путь к каталогу, в котором находит —

ся содержимое ограниченного доступа. Кроме того, замените URL-адрес в вызове

функции header о в предпоследней строке сценария URL-адресом вашей стра- ницы входа на сайт.



Использование PHP-сеанса для установки постоянного соединения между посетителем и Web-сервером

Термин сеанс (session) в отношении World Wide Web представляет собой се — рию связанных между собой взаимодействий между посетителем сайта и Web —

сервером, занимающую определенный и достаточно продолжительный период времени. Сеанс может состоять из серии транзакций, производимых посетите — лем при переводе денег с одного банковского счета на другой, при оплате с по — мощью Web-служб или обновлении пакета акций. В течение сеанса посетитель может сделать несколько запросов на выполнение одного и того же или различ- ных сценариев, содержащихся на отдельных Web-страницах. Другими словами, сеанс начинается, когда посетитель извлекает одну их страниц Web-сайта, и за — канчивается, когда посетитель закрывает Web-браузер или переходит на другой

Самоучитель по креативному веб-дизайну. Книга 4, стр.12

сайт. . Н | Один из методов обеспечения долговременного хранения данных, т. е. обеспе —

чения сохранения переменными их значений от запроса к запросу, — передача

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

Еще один метод создания переменных длительного хранения предполагает запись значений переменных с помощью PHP-процессора в файл сеанса на Web — сервере. При установке РНР программа установки запрашивает путь к файлам переменных сеансов, т. е. к каталогу, в котором РНР будет создавать файлы сеан- сов. Как правило, файлы сеансов РНР находятся в каталоге \PHP\sessiondata на том же диске, на котором был установлен сам РНР. Таким образом, если РНР

установлен на диске D, файлы сеансов РНР будут создаваться в каталоге

D:\PHP\sessiondata.

Используя переменные сеансов вместо cookie-наборов, вы исключаете необхо- димость передачи значений переменных между Web-сервером и Web-браузером в каждом HTTP-запросе. Вместо нескольких значений Web-сервер передает браузе —

ру только одно «ключевое» значение — идентификатор сеанса — cookie-набор с именем PHPSESSID. После этого браузер передает идентификатор сеанса Web-сер — веру при передаче каждого HTTP-запроса, а PHP-процессор использует иденти — фикатор для определения файла (находящегося на жестком диске сервера), со — держащего значения переменных длительного хранения, доступные для сценариев, которые посетитель может запустить в данном сеансе.

Самоучитель по креативному веб-дизайну. Книга 4, стр.13

Глава 10. РНР4 5 2 7





ПРАКТИКУМ

Для установки сеанса вызовите в PHP-сценарии функцию session s tar t о, ко — торая создаст cookie-набор со случайно сгенерированным идентификатором сеан —

са (PHPSESSID). Web-сервер должен передать Web-браузеру все cookie-наборы

(включая PHPSESSID) В заголовке Web-страницы. Следовательно, РНР-процессор

должен вызвать функцию session__start(), которая создает и вставляет cookie — набор с идентификатором сеанса в заголовок Web-страницы, до генерации сцена- рием другого содержимого страницы.

Таким образом, если вы планируете использовать переменные длительного

.хранения (сеансовые переменные), вставьте в начале-сценария входа на сргг или

в начале первой PHP-страницы, открываемой посетителем при входе на сайт,

следующий код:





Если посетитель уже начал сеанс на Web-сайте и не закрыл Web-браузер,

вызов функции session_start( ) продолжит или восстановит сеанс с ранее сге- нерированным идентификатором сеанса. В противном случае функция

session__start() сгенерирует новый случайный идентификатор сеанса и вставит его в заголовок Web-страницы в виде cookie-набора с именем PHPSESSID. ЕСЛИ посетитель в настройках своего Web-браузера указал, что браузер должен запра — шивать посетителя при необходимости приема cookie-набора, при получении браузером Web-страницы с cookie-набором (PHPSESSID), содержащим идентифи — катор сеанса, Web-браузер на экран выведет диалоговое окно, показанное на рис.

10.9.





52 8 t Глава 10. PHP4





После вызова функции session_start( ) для генерации идентификатора

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

в кавычки и без начального знака доллара ($), функции session_registerO, как показано в следующем коде, регистрирующем четыре сеансовые перемен —

ные ($s_firstName, $s_lastName, $s_address И $s_phoneNumber):





session_register («$s firstName» , «$s lastName» , «$s_address» ,

11 $s_phoneNumber») ;

?>

После регистрации переменной ее значение, которое должно сохраняться в течение сеанса, можно присвоить в любой момент времени. Тем не менее, функ —

цию session__register () нужно вызывать до передачи PHP-процессором любого

содержимого (даже одного единственного пробела) в выходную Web-страницу.

(Вызов функции session_registe r о для регистрации сеансовой переменной не изменяет и не устанавливает текущее значение этой переменной.)

Пример сценария установки и использования значений сеансовых перемен —

ных на Web-страницах сайта можно найти в файле chptiOTipO7.zip, который доступен для выгрузки на сайте http://www. diasoft. kiev. ua. Сценарий, содер —

жащийся в начале PHP-страницы chptiOTipO7.php, вызывает функцию

sessionjstarto, которая генерирует уникальный идентификатор сеанса. Затем

ближе к концу сценария входа на сайт в файле chptiOTip07Login. php вызывается

функция session_register() , которая регистрирует несколько сеансовых перемен —

ных и присваивает двум из них имя пользователя и пароль, введенные в элементах

формы (на Странице ChptlOTipO7.php). И, Наконец, СТранИЦЫ ChptlOGetPI. php И

chptiOGetPi2.php содержат формы, которые позволяют ввести посетителю лич —

ные данные, выводимые на экран сценарием страницы chptioshowinfo. php.



Создание базы данных MySQL и таблиц

В предыдущих советах в этой главе вы научились использовать встроенную

функцию fopen о для открытия текстового файла, находящегося на жестком

диске Web-сервера. Кроме того, было рассмотрено, каким образом встроенная

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

А теперь давайте предположим, что имеется текстовый файл, содержащий список товаров, продаваемых вашей компанией. С помощью уже полученных знаний вы можете написать PHP-сценарий, который для построчного считыва — ния списка товаров многократно вызывает функцию fgets() . Затем, после каждого очередного считывания, можно вызывать оператор echo или встроенную функцию

Самоучитель по креативному веб-дизайну. Книга 4, стр.14

print() . В результате будет создана Web-страница, содержащая список предлагае —

мых товаров. Таким образом, РНР и текстовые файлы можно использовать для со —

Глава 10. РНР4 52 9





здания содержимого Web-страницы «на лету». В приведенном примере Web-страни —

ца с перечнем предлагаемых вашей компанией товаров не существует, пока посети — тель не вызовет PHP-страницу со сценарием, генерирующим список товаров.

База данных SQL, как и текстовый файл, представляет собой всего лишь на — бор данных. Тем не менее, в отличие от текстовых файлов, в которых приложе- ния хранят данные в виде неструктурированных фрагментов, СУБД управляет

всеми операциями с данными в базе данных SQL и организует данные опти — мальным образом для обеспечения быстрого и легкого доступа к данным и ма — нипулирования ими. Как результат, поиск по текстовому файлу, содержащему не — сколько тысяч пар имен пользователей и паролей, занимает недопустимо длительное время. В то же время СУБД позволяет выполнить поиск такого же объема (среди десятков тысяч записей) в течение долей секунды. Аналогично, СУБД дает возможность вывести на экран список товаров или одного товара

(выбранного из длинного списка) гораздо быстрее, чем при использовании тек — стового файла со списком товаров.

РНР содержит встроенные функции, которые позволяют не только считывать,

но и редактировать данные, хранящиеся в нескольких наиболее популярных ба —

зах данных, в частности DB2, FrontBase, Informix, InterBase, mSQL, MS SQL Server, MySQL, Oracle, ODBC, PostgreSQL и Sybase. Для определения форматов баз данных, доступных для использования в ваших PHP-сценариях свяжитесь со своим Internet-провайдером или администратором баз данных. Если не установ — лена поддержка ни одной СУБД, вас, возможно, заинтересует MySQL. MySQL представляет собой многопользовательскую СУБД, которую можно бесплатно выгрузить и установить из сайта http://www. MySQL. com. Эта СУБД поставляет как для платформы Windows, так и для Unix.

Самоучитель по креативному веб-дизайну. Книга 4, стр.15





Независимо от типа используемой СУБД, для хранения таблиц, которыми будут пользоваться PHP-сценарии, необходимо создать базу данных.

Для создания базы данных воспользуйтесь SQL-оператором CREATE

DATABASE, Предположим, например, что необходимо создать базу данных, в ко — торой будут содержаться таблицы данных, используемых в примерах данной кни —

ги. В качестве имени базы данных можно выбрать аббревиатуру оригинального названия книги (HTML & Web Design Tips & Techniques — HWDTT). Таким обра — зом, для создания базы данных с таблицами для примеров данной книги необ- ходимо выполнить следующий оператор SQL:



CREATE DATABASE hwdtt;

Синтаксис оператора CREATE DATABASE ВЫГЛЯДИТ следующим образом:



CREATE DATABASE



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

53 0 Глава 10. РНР4





час важно понимать, что SQL-таблица состоит из строк связанных данных, орга —

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

Самоучитель по креативному веб-дизайну. Книга 4, стр.16

лей и паролей каждая строка в таблице будет содержать пару имя пользователя/

пароль, при этом имя пользователя будет находиться в одном столбце, а его па —

роль — в другом столбце одной и той же строки. Для создания такой таблицы сначала необходимо указать СУБД, какую базу данных использовать, а затем вы- полнить следующий оператор SQL:



USE hwdtt;

CREATE TABLE webSiteUsers

(username VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL) ;

Синтаксис оператора CREATE TABLE имеет следующий вид:



CREATE TABLE

(столбца> [] ,



последнего столбца> столбца> [

последнего столбца>]) Ц

Очевидно, что таблица должна содержать данные, которые в нее можно запи —

сать с помощью SQL-оператора INSERT, например, для вставки имен пользовате — лей и паролей в таблицу webSiteUsers можно выполнить следующие операторы INSERT:



INSERT INTO webSiteUsers (username, password)

VALUES («Konrad», «abcl25″);

INSERT INTO webSiteUsers (username, password)

VALUES («Gracie», «157WXY3″);

Синтаксис оператора INSERT ВЫГЛЯДИТ следующим образом:



INSERT INTO (столбец2, …, столбецЫ>)

VALUES{значение1,значение2,…fзначение!*);

Далее, для использования таблицы базы данных из примера этого совета СУБД можно передать запрос в виде SQL-оператора SELECT. Например, для счи — тывания из таблицы имен пользователей и паролей можно воспользоваться сле — дующим оператором:



SELECT username, password FROM webSiteUsers;



Для проверки ввода посетителем верного имени пользователя можно восполь — зоваться конструкцией WHERE, который указывает СУБД вернуть только те стро —

ки, в которых имя пользователя и пароль соответствуют данным, введенным по — сетителем в элементы формы входа на сайт. Например, если посетитель ввел в поле имени пользователя слово Konrad и слово wrongPass в поле ввода пароля, запрос будет выглядеть следующим образом:



SELECT COUNT(*) FROM webSiteUsers

WHERE username=»Konrad» AND password^»wrongPass»

Глава 10. РНР4 53 1





Если приведенный запрос возвращает значение «1″ , введенная посетителем пара имя пользователя/пароль является верной. В противном случае, если вве — денная посетителем пара в таблице отсутствует (как в приведенном случае), зап —

рос возвращает значение «0м, которое означает, что в таблице не содержится

данных для пользователя с указанным именем и паролем.

В следующем совете будет показано, каким образом данные заносятся в SQL — таблицу, и каким образом в PHP-сценариях выполняются запросы на считывание SQL-таблиц.



Вывод на Web-странице результатов запроса в базу данных SQL в HTML-таблице

Для считывания данных из базы данных и вывода их на Web-странице РНР- сценарий должен выполнить три операции. Во-первых, сценарий должен устано —

вить соединение с СУБД с помощью вызова встроенной функции соединения с

базой данных (например, функции mysqi_connect(), которая позволяет устано — вить соединение с СУБД MySQL). Во-вторых, сценарий должен по установлен — ному соединению с СУБД отправить запрос с помощью встроенной функции от —

правки SQL-запроса (например, функции mysqi query(), которая позволяет

PHP-сценарию передавать на выполнение СУБД операторы SQL). В-третьих, после помещения СУБД результатов запроса в выходной буфер Web-сервера сце — нарий должен считать данные из буфера и вывести их на Web-странице. Например, при работе с MySQL сценарий может использовать встроенную функцию

Самоучитель по креативному веб-дизайну. Книга 4, стр.17

mysqi_fetch_array(), которая считывает строку результатов SQL-запроса (из бу- фера СУБД) и помещает значения столбцов строки в массив элементов. Затем, сценарий может выполнить оператор echo или вызывать функцию print о для вывода значений полей таблицы базы данных (из массива) на Web-страницу.



ПРАКТИК Ш

Предположим, например, что используется СУБД MySQL и в HTML-таблице на

Web-странице необходимо вывести данные из SQL-таблицы с именем products,

содержащейся в базе данных HWDTT. Прежде всего, выполним вызов функции

mysqi connect () следующего вида:



$link = mysql connect ($db_host, $db_user, $db_pass) ;



$db host содержит строку «locaihost» (если сервер MySQL выполняется в

той же системе, что и Web-сервер) или строку с IP-адресом компьютера, где вы — полняется сервер MySQL, с которым необходимо установить соединение. (Для получения IP-адреса сервера MySQL свяжитесь с Internet-провайдером.) Осталь —

ные два параметра, $db_user и $db_pass, представляют собой имя пользова —

теля и пароль, необходимые функции mysqi_connect() для установки соеди — нения с СУБД MySQL. (При работе с СУБД MySQL с параметрами, установленными по умолчанию, войти в базу данных можно с именем пользо —

вателя $db_user=»root» И паролем $db_j>ass=»",)

В функции mysqi_connect () PHP-процессор присваивает соединению с

СУБД идентификатор переменной $iink или возвращает значение false, если

53 2 Глава 10. РНР4





попытка установить соединение не удалась. Поскольку время от времени случа —

ются ошибки, с помощью оператора if проверьте значение переменной $iink, и

в случае необходимости выведите на экран сообщение об ошибке. Если попытка

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

if (!mysql select_db ($db_name, $link)

{

//Операторы, обрабатывающие случай неудавшейся попытки использования

//базы данных

}

else

{

//Обработка после успешной установки соединения и выбора базы данных

}

Сервер MySQL, как правило, поддерживает несколько баз данных, поэтому вы должны выбрать базу данных, содержащую таблицы, данными которых вы хотите

пользоваться. В приведенном примере $db name содержит строку «HWDTT», a

$iin k — идентификатор соединения с базой данных, сгенерированный успеш —

но выполненной функцией mysqi_connect(). Как и ранее, необходимо про —

верить данные, возвращаемые PHP-функцией (в данном примере функцией

mysqi seiect_db()), чтобы убедиться, что выбор базы данных был выполнен ус —

пешно. Функция mysqi_seiect_db() возвращает tru e при успешном выборе базы данных и fals e — в противном случае.

После успешной установки соединения с СУБД MySQL и выбора базы дан — ных для выполнения запроса (или любого другого оператора SQL) вызовите фун —

кцию mysqi query (), как показано в следующем примере:

$resul t = mysql query ($query, $link) ;



В приведенном примере, в котором считывается содержимое таблицы

products, параметр $query СОДерЖИТ SQL-ОПераТОр SELECT * FROM product s

ORDER BY description. Как и ранее, параметр $iink содержит идентификатор

соединения с базой данных, возвращенный успешно выполненной функцией

mysqi_connect (), вызов которой находится в начале сценария. Функция

mysqi_query () возвращает fals e (если СУБД по какой-то причине не смогла выполнить переданный ей SQL-оператор) или указатель на место, куда СУБД поместила результаты выполнения запроса.

Для считывания результатов запроса (т. е. строк данных, которые запрос

выбрал из таблицы products) несколько раз вызовите функцию

mysqi fetch_array о для считывания всех строк результатов запроса и сохране — ния их в массиве. Затем выведите данные из массива на Web-страницу. Напри- мер, следующий сценарий извлекает количество полей (возвращенных в резуль — татах запроса), их имена и типы, и выводит значения столбцов, содержащихся в результатах запроса, в виде HTML-таблицы, которую сценарий создает на Web — странице:

Глава10.РНР4 533



// Определить количество полей, возвращенных в результатах запроса

$fields = mysql_num fields ($result) ;

// Начать определение HTML-таблицы

echo «»;

// Вывести на экран названия столбцов в виде заголовков HTML-таблицы

echo «
«;

for ($i = 0; $i

{

echo «» . mysql fieldjiame($result, $i) . «»;

$fieldType[$i] = mysql_field type($result, $i) ;

}

echo «

«;

// Вывести в HTML-таблице результаты запроса

while

{

echo «
«;

for ($i = 0; $i

{

if ($fieldType[$i] <> «string»)

echo « «;

els e

echo « » ;

echo «$array[$i]

«;

}

echo «

«;

}

echo «» ;



Полный код PHP-сценария, описанного в этом совете, находится на странице

chptiOTipO9.php, которую можно выгрузить из сайта издательства русскоязыч —

ной редакции ЭТОЙ КНИГИ (http://www. diasoft. kiev. ua). Изменяя ИНформа — цию о соединении и SQL-запрос, вы имеете возможность использовать этот сце —

нарий для считывания и вывода на экран в виде HTML-таблицы результатов

любого запроса. Сценарий выводит на экран названия столбцов, возвращенных запросом, в виде заголовков столбцов таблицы, а сами результаты запроса поме —

щаются в строки таблицы.



Использование РНР для генерации случайного пароля

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

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

Самоучитель по креативному веб-дизайну. Книга 4, стр.18

они часто произносят. К сожалению, такие «памятные» слова, числа или слово —

сочетания также легко могут быть угаданы человеком, хорошо знакомым с

пользователем.

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

534 Глава 10. РНР4



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



ПРАКТИКУМ

Чтобы использовать РНР-сценарий для присвоения посетителям случайных паро — лей необходимо организовать Web-страницу с формой, аналогичной показанной

на рис. 10.10, которая позволяет посетителям вводить имя пользователя и адрес электронной почты.





Как указано в тексте в нижней части страницы, показанной на рис. 10.10, после ввода посетителем имени пользователя, не присвоенного другому члену сайта, PHP-сценарий сгенерирует пароль длиной от пяти до восьми символов. Сценарий случайным образом выбирает не только символы пароля, но и длину пароля, что только повышает уровень безопасности. (Пароль гораздо сложнее взломать, если хакеру не известна его длина.)

Самоучитель по креативному веб-дизайну. Книга 4, стр.19

Для генерации случайных паролей можно воспользоваться следующим РНР — сценарием:



function generatePassword()

{

// Выбрать начальное число для генерации длины пароля

mt_srand ((double)microtime() * 1000000);

$passwordLength = mt_rand (5, 8) ;



Глава10.РНР4 535





// Установить диапазон ASCII-символов для случайной генерации символов

// ASCII-коды 48-57 включительно — символы от 0 до 9

// ASCII-коды 65-90 включительно — символы от А до Z

// ASCII-коды 97-122 включительно — символы от а до z

$lowerBound = 48;

$upperBound = 122;

// Исключить специальные символы

$excludeSymbols =

array(‘:’,';•,’•.,•?•,,•@’,•[•,chr(92),']! ,’А’,’ ‘,’ч ‘) ;

// Создать случайный пароль

$i=0;

$password = «» ;

while ($i

{

mt_srand ((double)microtime() * 1000000);

$letter = chr (mt rand ($lowerBound, $upperBound) ) ;

if (!in array ($letter, $excludeSymbols))

{

$password.= $letter;

$i++;

}

} ‘..’ •

return $password;

}

Далее вставьте имя пользователя, адрес электронной почты, текущий IP-адрес,

системное время и (случайно сгенерированный) пароль в таблицу usemames

базы данных сайта. Затем вызовите встроенную функцию maii(), которая отпра — вит пароль по указанному посетителем адресу.

При входе посетителя на сайт сценарий входа будет выполнять поиск в таб — лице usemames введенных имени пользователя и пароля. Если сценарий нахо —

дит имя пользователя и пароль в таблице базы данных, он «активизирует» учет- ную запись члена сайта. В нашем примере (не показанный здесь, но

содержащийся в PHP-сценарии страницы chptiOTipiOLogin. php), сценарий вхо —

да на сайт для активации учетной записи сохраняет системное время в столбце

iast coiumn записи в таблице имен пользователей.

Web-страницы с формами и PHP-сценариями, описанными в этом совете, на —

ходятся в файле chptiOTipio. zip, который можно выгрузить из сайта издатель —

ства РУССКОЯЗЫЧНОЙ редакции ЭТОЙ КНИГИ (http://www. diasoft. kiev. ua).



Использование РНР и MySQL для организации парольного доступа к Web-сайту

В совете «Использование РНР и дискового файла для организации парольного

доступа к Web-сайту» выше в этой главе вы научились организовывать ограничен — ный доступ (т. е. доступ только для зарегистрированных членов) к Web-сайту с

помощью РНР и текстового файла, который содержит пары имя пользователя/ пароль и хранится на жестком диске Web-сервера. К сожалению, помещение списка авторизированных пользователей сайта в текстовый файл обладает не — сколькими недостатками:

53 6 / ‘ Глава 10. РНР4





• При каждом добавлении в файл новой пары имя пользователя/пароль уве- личивается время входа посетителя на сайт. С увеличением размера файла поиск совпадающей пары в файле будет выполняться все дольше и дольше.

• Удаление и редактирование пар имя пользователя/пароль в текстовом фай —

ле выполняется вручную, что представляет собой довольно-таки утомитель — ный процесс, связанный с потенциальными ошибками. Как результат, можно случайно изменить формат записей в файле доступа, что не позво — лит сценарию входа на сайт использовать файл для аутентификации посе — тителей.

• Сетевые пользователи (например, системный администратор и другие пользователи с привилегированными учетными записями) могут по ошиб —

ке удалить файл доступа при выполнении очередной «чистки» каталогов с

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

сто просмотреть содержимое файла и узнать полный список пользователей вашего сайта и их паролей.

За счет хранения пар имя пользователя/пароль в базе данных SQL вы может исключить все описанные выше недостатки. Все пользователи, авторизированные для работы с таблицей доступа, работают с ней через СУБД. Поэтому никто не сможет изменить формат строк в файле доступа при вставке, удалении или ре — дактировании пар имя пользователя/пароль. Более того, вы имеете возможность контролировать операции пользователей путем открытия доступа для одних пользователей «только для вставки», в то время как для других — для «вставки», «удаления», «просмотра» и/или «редактирования». И, кроме того, независимо от количества зарегистрированных пользователей (будь их 10 или 10 000) РНР-сце- нарию потребуется одно и тоже (незначительное) время на сравнения пары имя пользователя/пароль для посетителя сайта.

Самоучитель по креативному веб-дизайну. Книга 4, стр.20



ПРАК ИКУМ

Для использования таблицы MySQL в качестве списка авторизированных посети — телей сайта прежде всего необходимо с помощью SQL-оператора CREATE создать таблицу, в которой будут храниться имена пользователей и пароли:



CREATE TABLE siteAccessList

{username VARCHAR(30) PRIMARY KEY

password VRACHAR(15) NOT NULL) ;

Приведенный выше SQL-оператор CREATE создает таблицу базы данных, со — держащую два столбца для хранения имен пользователей и паролей. Первый столбец, username, может хранить имена пользователей длиной до 30 символов,

а атрибут PRIMARY KEY указывает, что каждая строка в таблице должна иметь уникальное, не пустое (NOT NULL) значение в столбце username. Второй стол — бец, password, может содержать непустой пароль длиной до 15 символов.

Затем выполните SQL-оператор INSERT, аналогичный приведенному в следую — щем примере, который вставит в таблицу пары имя пользователя/пароль, ис — пользуемые посетителями для получения доступа на сайт:



Глава10.РНР4 . 537





INSERT INTO siteAccessList VALUES («Konrad», «King»);

INSERT INTO siteAccessList VALUES («Sally», «Fields»);

INSERT INTO siteAccessList VALUES («Craig», «Berry»);

(Чтобы незарегистрированные пользователи сайта не могли «угадать» пароли членов сайта и таким образом получить несанкционированный доступ к содер — жимому Web-сайта, в качестве паролей не следует использовать фамилии, как это показано в предыдущем примере.) Каждый из трех операторов INSERT создает новую строку в таблице, помещая первый элемент в списке VALUES В первый столбец, а второй элемент — во второй столбец таблицы.



Полезные ссылки
Случайные записи
  • 20.03.2011">Советы web-дизайнеру
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 032
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 012
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 080
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 024
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 104
  • 05.08.2011">Вентиляция помещения необходима для здоровья и продуктивности работников
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.42
  • 28.02.2011">Руководство по actionscript. часть 5, стр. 139
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.34
  • 07.10.2010">Выделение изображения с помощью маски в Photoshop
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 047
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 118
  • 20.03.2011">Руководство по actionscript. часть 2, стр. 082
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.14
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...