Работа с адресной книгой
Теперь вы имеете базу данных для хранения контактной информации о ваших друзьях и знакомых и
можете с помощью созданных в предыдущих главах сценариев добавлять, изменять и удалять данные
об адресатах. Однако созданной системе управления адресной книгой не хватает возможности выбирать
и отображать данные в режиме только чтения. Пора это исправить. В этой главе вы узнаете, как:
подсчитать и отобразить количество записей, хранящихся в вашей системе;
отобразить текущую дату;
проверить и отобразить дни рождения ваших знакомых в текущем месяце, а также как отобразить
специальный текст;
отобразить в режиме только чтения детали той или иной записи;
требовать обязательную, основанную на сессии, проверку прав пользователя перед просмотром адресной
книги или удалением из нее записи.
Изменение вашего административного меню
В этом упражнении вы измените сценарий contact_menu.php так, чтобы можно было отображать
текущую дату, количество записей в базе данных и другую информацию, чтобы сделать вашу систему
более удобной.
Отображение количества записей
Вы измените сценарий contact_menu.php для того, чтобы он отображал текущее число записей в
таблице my_contacts.
С помощью текстового редактора откройте файл contact_menu.php, xранящийся в папке для
документов вашего Web-сервера.
Найдите и выделите следующий фрагмент кода:
Удалите выделенный фрагмент кода в буфер обмена с помощью сочетания клавиш или Ctrl +
X,
чтобы затем иметь возможность вставить его в нужное место.
Найдите и выделите следующую строку:
Нажмите сочетание клавиш или Ctrl + V, чтобы заменить выделенную строку
фрагментом кода, хранящимся в буфере обмена.
Переименуйте переменную $form_block в $display_block.
После этого блок оператора if. . .else будет выглядеть следующим образом:
Найдите и выделите следующий блок кода:
Удалите выделенный участок кода в буфер обмена с помощью сочетания клавиш или Ctrl +
X, чтобы затем иметь возможность вставить его в нужное место.
Найдите в блоке оператора if. . .else следующие строки:
Выделите строку
и нажмите сочетание клавиш
или Ctrl + V, чтобы заменить выделенную строку блоком кода,
хранящимся в буфере обмена.
Переименуйте переменную $menu_block в $display_block.
Окончательно блок оператора if. . .else должен выглядеть следующим образом:
Сохраните эти изменения перед тем, как двинуться дальше. Все эти изменения пока никак не
отразятся на виде административного меню. Они просто немного перестроили код вашего сценария
и подготовили его к следующим изменениям.
Дальнейшие изменения будут касаться второй части оператора if. . .else, который вы только что изменили.
Найдите строку:
После этой строки введите переменную для хранения имени базы данных:
Чтобы создать переменную для хранения имени таблицы с данными, введите строку:
Создайте переменную для хранения результата функции mysql_connect ( ), используя символ @
для подавления предупреждений и функцию die ( ) — для случая неудачного завершения функции:
Создайте переменную для хранения результата функции mysql_select_db( ), используя символ
@ для подавления предупреждений и функцию die ( ) - для случая неудачного завершения функции:
Чтобы создать оператор SQL, подсчитывающий число записей с полем id, введите код:
Чтобы создать переменную для хранения результата функции mysql_query( ), используя символ
@ для подавления предупреждений и функцию die ( ) - в случае неудачного завершения
функции, введите код:
Создайте переменную, хранящую указанное значение, определенное в $result:
Если вы работаете с результатом, относящимся к одной ячейке, то проще использовать функцию
mysql_result ( ), чем получат всю строку. Эта функция в качестве аргументов требует указания
результата выполненного запроса, номера строки (начиная с 0) и имени поля.
Следующие изменения касаются эстетичного вида административного меню.
Замените строку, определяющую переменную $display_block, кодом HTML, создающим таблицу из
двух столбцов для пунктов меню:
В новой строке $display_block найдите строку <P><strong>Paзное<
/strong></p> и введите после нее следующие строки:
Эти строки создают маркированный список, состоящий из одной строки, отображающей количество
записей в адресной книге.
Сохраните сделанные изменения.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам достаточно
просто обновить окно. Если вы закрыли рабочее окно браузера, то вы полните следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес ввeдите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Система
управления контактами (Рис. 14.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abc123.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница Система управления контактами
с измененным главным меню (Рис. 18.1).
Рис. 18.1. Страница Система управления контактами
Теперь каждый раз, когда вы будете пользоваться главным меню, вы сможете видеть текущее количество
записей в таблице контактов. В следующей части знакомства мы изменим сценарий так, чтобы главное
меню отображало текущую дату.
Отображение текущей даты
По сравнению с предыдущей частью, изменения, связанные с добавлением к сценарию возможности
отображения текущей даты, совсем не большие. Функция date ( ), которую мы будем использовать,
обладает широким диапазоном настроек формата отображения даты.
Вы можете найти список различных настроек функции data ( ) в Приложении В.
Откройте файл contact_menu.php, хранящийся в папке для документов вашего Wed-сервера, с
помощью любого текстового редактора.
Найдите строку:
После строки, задающей значение переменной $count, добавьте строку, определяющую переменную
$today:
Назначение параметров функции date( ), используемых в этой строке, приведено в таблице:
Т а б л и ц а 18.1. Назначение параметров функции date( )
Параметр |
Назначение |
I, |
Полное имя дня недели с запятой |
F |
Полное название месяца |
J |
День месяца (2 цифры) |
S |
Суффикс |
Y |
Год (4 цифры) |
Найдите следующую строку во фрагменте кода, определяющем переменную $display_block:
После этой строки введите следующий код, отображающий текущую дату:
Сохраните сделанные изменения.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам
достаточно просто обновить окно. Если вы закрыли рабочее окно браузера, то вы полните
следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузерa будет загружена страница Система управления контактами (Рис. 18.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abc123.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница
Система управления контактами с отображением текущей даты (Рис. 18.2).
Рис. 18.2. Страница Система управления контактами
с отображением текущей даты
В следующей части этого упражнения вы создадите простой оператор SQL, который подсчитает
количество записей, поле birthday (День рождения) которых содержит номер текущего месяца.
А затем выведет список тех людей, у которых день рождения приходится на текущий месяц.
Вывод cпucкa дней рождений в текущем месяце
В базе данных, которую мы создали, одно из полей хранит дату дня рождения адресата.
Это поле не является обязательным, но если вы все-таки его заполните, то дата рождения
будет сохранена в таблице. Мы изменим сценарий contact_menu.php таким образом, чтобы
выводить на экран информацию о количестве людей, чьи дни рождения приходятся на текущий
месяц. Также мы выведем имена этих людей, дату дня рождения и ссылку на страницу с подробными
личными данными.
Откройте файл contact_menu.php, хранящийся в папке для документов вашего Web-сервера, с
помощью любого текстового редактора.
Найдите строку:
После строки $today = date("l, j S F Y"); введите строку с переменной, хранящей оператор SQL,
который определяет число людей, чей день рождения приходится на текущий месяц:
MONTH () и NOW ( ) являются функциями MySQL. Первая используется для получения месяца из строки даты
(в приведенной выше строке - из значения поля birthday), а вторая функция используется для получения
текущей даты. Больше о функциях MySQL вы можете узнать из Приложения С.
В следующую строку введите переменную, хранящую результат функции mysql_query( ).
Символ @ используется для подавления предупреждения, а функция die ( ) - для вывода
сообщения в случае, если запрос окончится неудачей:
В следующей строке введите переменную для хранения указанного значения, определенного внутри
$birthday_count_res:
Добавьте еще один пункт в маркированный список, расположенный внутри $display_block, следующим образом:
Сохраните сделанные изменения.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам
достаточно просто обновить окно. Если вы закрыли рабочее окно браузера, то выполните
следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Система управления контактами (Рис. 14.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abcl23.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница Система
управления контактами с информацией о числе дней рождений в текущем месяце (Рис. 18.3).
Рис. 18.3. Страница Система управления контактами
с информацией о числе дней рождений в текущем месяце
Загруженная страница содержит дополнительный пункт маркированного списка, который выводит
информацию о количестве человек, чей день рождения приходится на текущий месяц.
Расширение возможностей меню
В этой части вы расширите возможности главного меню. Если число людей, у которых
день рождения приходится на текущий месяц, один или более, то мы создадим строку, которая
будет включать имя и день рождения, оформленные в виде ссылки на детальные личные данные адресата.
Откройте файл contact_menu.php, хранящийся в папке для документов вашего Web-сервера, с
помощью любого текстового редактора.
Найдите строку, после которой нужно будет вводить дополнительные строки:
Чтобы начать оператор if. . .else, который проверяет количество дней рождения в текущем
месяце, введите код:
Чтобы начать создание маркированного списка в случае, если число дней рождения в текущем месяце больше 0,
введите строку:
Чтобы создать переменную для хранения оператора SQL, который выберет идентификационный номер, имя,
фамилию, месяц и день рождения в порядке возрастания даты дня рождения, введите код:
Вы можете выбрать поля или часть полей и назначать им новые имена, используя конструкцию
"as [новое_имя]" в операторе SQL В предыдущем операторе мы извлекли месяц дня рождения и
присвоили ему имя month, а также извлекли день дня рождения и присвоили ему имя date.
Чтобы создать переменную для хранения результата функции mysql_query ( ), используя символ
@ для подавления предупреждения, а функцию die ( ) - для вывод сообщения в случае, если запрос
окончится неудачей, введите код:
Начните оператор цикла while, который создает массив с именем $contacts_bd для каждой
записи, из результата запроса ($contacts_bd_res):
Чтобы получить каждый элемент массива отдельно и присвоить ему подходящее имя, введите код:
Чтобы добавить в маркированный список фамилии и имена, оформленные в виде ссылок на сценарий
show_contact.php, введите код:
Сценарий show_contact.php выводит подробную контактную информацию. Мы создадим его в следующем
знакомстве.
Закройте оператор цикла:
Чтобы закрыть маркированный список, введите код:
Чтобы закончить оператор условного перехода, введите:
Поместите в блоке $display_block, в разделе Разное, под пунктом маркированного списка Дней
Рождений в этом месяце строку:
Сохраните сделанные изменения.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам достаточно
просто обновить окно. Если вы закрыли рабочее окно браузера, то выполните следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Система управления контактами (Рис. 14.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abc123.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница
Система управления контактами с расширенным отображением (Рис. 22.4).
Рис. 18.4. Страница Система управления контактами
с расширенным отображением
Если ваша база данных содержит больше одного человека, чей день рождения приходится на текущий
месяц, то они все будут отображены в главном меню. В следующем знакомстве мы создадим сценарий,
отображающий всю информацию, которую вы ввели об адресате в таблицу my_contacts.
Выбор данных из таблицы my_contaсts
Теперь все сложные сценарии остались позади, и пришло время создать несколько простых запросов
SQL для отображения данных из таблицы my_contacts. Мы начнем с простого перечисления всех адресатов,
а затем сделаем возможным просмотр подробных данных о каждом из них.
Отображение cпucкa записей
Цель этого сценария - отобразить маркированный список записей вашей адресной книги.
Создайте с помощью любого текстового редактора новый файл.
Чтобы начать блок РНР, введите:
Чтобы начать или продолжить сессию, если она уже существует, введите строку:
Чтобы начать оператор условного перехода if. . .else для проверки значения переменной $valid
, введите код:
Если значение переменной не равно yes, то это значит, что пользователь не прошел аутентификацию
и его нужно перенаправить на страницу с регистрационной формой i выйти из сценария.
Введите код:
Чтобы зарегистрировать переменную сессии в случае, если пользователь зарегистрирован, и закончить о
ператор if. . .else, введите код:
Чтобы создать две переменные для хранения имени базы данных и имени таблицы, введите код:
Чтобы создать переменную для хранения результата функции mysql_connect ( ) используя символ
@ для подавления предупреждений и функцию die ( ) - в случае неудачного завершения
функции, введите код:
Чтобы создать переменную для хранения результата функции mysql_select_db ( ) используя символ
@ для подавления предупреждений и функцию die ( ) - в случае неудачного завершения
функции, введите текст:
Создайте оператор SQL, который выберет из таблицы базы данных поля идентификационного номера,
имени и фамилии для каждой записи:
Чтобы создать переменную для хранения результата функции mysql_query ( ), используя символ @
для подавления предупреждений и функцию die ( ) - в случае неудачного завершения функции,
введите код:
Чтобы создать переменную для хранения маркированного списка, который будет строиться с помощью
оператора цикла while, введите код:
Чтобы начать оператор цикла while, который создаст массив с именем $row для каждой
записи, представленной в $result, введите код:
Чтобы получить каждую переменную в отдельности, введите код:
Чтобы добавить дополнительные пункты в маркированный список, введите код:
Чтобы закончить оператор цикла, введите:
Чтобы закончить маркированный список, введите код:
Чтобы закрыть блок РНР, введите код:
Для добавления блока HTML введите код:
Чтобы отобразить список абонентов, введите код:
Чтобы добавить ссылку для возврата в главное меню, введите код:
Чтобы закончить блок HTML, введите код:
Сохраните созданный файл с именем show_contactsbyname.php в папке для документов вашего
Web-сервера.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам достаточно
просто обновить окно. Если вы закрыли рабочее окно браузера, то выполните следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Система управления контактами (Рис. 14.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abc123.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница Система
управления контактами (Рис. 18.4).
Щелкните мышью на ссылке Отобразить контакты в алфавитном порядке по имени. В рабочее
окно браузера будет загружена страница Система управления контактами: Список Контактов (Рис. 18.5).
Рис. 18.5. Страница Система управления контактами: Список Контактов
Загруженная страница содержит список всех адресатов из адресной книги, в конце которого
расположена ссылка для перехода к главному меню. В следующей части упражнения вы создадите
сценарий, отображающий подробную информацию о выбранном адресате.
Отображение записей в режиме только чтения
Чтобы создать сценарий, который выведет детальную информацию об адресате, выполните следующие действия:
Создайте с помощью текстового редактора новый файл.
Начните блок РНР:
Чтобы начать оператор if. . .else для проверки обязательной переменной (в этом случае это
идентификационный номер), введите код:
В случае, если переменная $id не имеет значения, т.е. ничего не было выбрано, пользователь
будет направлен на страницу, содержащую форму для выбора записи, и выполнение сценария будет прервано.
Введите код:
Чтобы начать сессию, если значение $id существует, и завершить оператор if. . .else,
введите код:
Чтобы начать оператор if. . .else для проверки значения переменной $valid, введите код:
Если значение переменной не равно yes, то это значит, что пользователь не прошел аутентификацию
и его нужно перенаправить на страницу с регистрационной формой и выйти из сценария.
Введите код:
Чтобы зарегистрировать переменную сессии в случае, если пользователь зарегистрирован, и закончить
оператор if. . .else, введите код:
Чтобы создать две переменные для хранения имени базы данных и имени таблицы, введите код:
Чтобы создать переменную для хранения результата функции mysql_connect ( ), используя символ
@ для подавления предупреждений и функцию die( ) - в случае неудачного завершения
функции, введите код:
Чтобы создать переменную для хранения результата функции mysql_select_db(), используя символ
@ для подавления предупреждений и функцию die ( ) - в случае неудачного завершения
функции, введите код:
Мы должны быть уверены в том, что идентификационный номер, соответствующий имени и фамилии адресата,
действительно существует, поэтому мы сделаем запрос к базе данных, который вернет все значения поля
id и количество записей в таблице, и только затем осуществим запрос SQL.
Чтобы создать переменную для хранения запроса, введите код:
Чтобы создать переменную, содержащую результат выполнения запроса, введите код:
Символ @ используется для подавления предупреждений, а функция die ( ) - в случае неудачного
завершения запроса.
Чтобы создать переменную, которая будет содержать значение количества строк таблице, введите код:
Чтобы начать оператор if. . .else, проверяющий значение количества строк, полученных в
результате запроса (правильное значение равно 1), введите код:
Чтобы пользователь вернулся к главному меню в случае, если число строк в таблице раво 0, введите код:
Чтобы продолжить работу сценария в случае, если в таблице есть записи, введит код:
Чтобы создать переменную для оператора SQL, который выберет из таблицы все записи с полем id,
равным значению переменной $id, введите код:
Чтобы создать переменную для хранения результата функции mysql_query( ), используя символ
@ для подавления предупреждений и функцию die ( ) - в случае неудачного завершения
функции, введите текст:
Чтобы начать оператор цикла while, который создаст массив с именем $row для каждой
записи в полученном результате код, введите код:
Чтобы получить значение каждого элемента массива отдельно и присвоить им подходящие имена, введите код:
Закройте оператор цикла:
Закройте оператор if. . .else:
Чтобы завершить блок РНР, введите код:
Чтобы начать блок HTML для построения страницы с полной информацией об адресате, введите код:
Чтобы вывести подзаголовок с сообщением о том, кому принадлежат данные в записи, введите строку:
Выведите отдельные элементы имени и адреса:
Чтобы начать раздел для отображения номеров телефонов и адреса электронной почты, введите код:
Чтобы начать раздел с дополнительной информацией, введите код:
Чтобы добавить ссылку для возврата к главному меню, введите код:
Чтобы завершить HTML-блок, введите код:
Сохраните созданный файл с именем show_contact.php в папке для документов вашего Web-сервера.
Если вы не закрывали окно вашего браузера, то оно должно содержать главное меню, и вам
достаточно просто обновить окно. Если вы закрыли рабочее окно браузера, то выполните следующие действия:
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/contact_menu.php
и нажмите клавишу Enter.
В рабочее окно браузера будет загружена страница Система управления контактами (Рис. 14.1).
В поле ввода Имя пользователя введите admin.
В поле ввода Пароль введите abc123.
Нажмите кнопку ОК. В рабочее окно браузера будет загружена страница Система управления контактами
с расширенным отображением (Рис. 18.4).
Щелкните мышью на ссылке Отобразить контакты в алфавитном порядке по имени.
В рабочее окно браузера будет загружена страница Система управления контактами:
Список Контактов (Рис. 18.5).
Щелкните мышью на любой ссылке из списка адресов.
В рабочее окно браузера будет загружена страница Система управления контактами: Полная
Информация о Контакте (только для чтения) (Рис. 18.6).
Рис. 18.6. Страница Система управления контактами:
Полная Информация о Контакте (только для чтения)
Загруженная страница содержит полную информацию о выбранном адресе. Однако, еcли в таблице
содержатся неполные сведения, то эта страница будет выглядеть не очень красиво. Пример такой
страницы приведен на Рис. 18.7.
Рис. 18.7. Страница Система управления контактами: Полная Информация о Контакте (только для чтения)
с неполными данными.
Чтобы, при отсутствии в записи таблицы данных об адресе, телефонах и дате рождения, на экран не
выводились лишние надписи, внесем небольшие изменения в созданный сценарий.
Улучшение возможностей отображения записей
Чтобы убрать лишние надписи на странице отображения полной информации об адресате, если соответствующие
им данные отсутствуют в таблице, выполните следующие действия:
Загрузите файл show_contact.php в любой текстовый редактор.
Прокрутите текст в окне редактора до секции, в которой на экран выводятся данные об имени и адресе.
Удалите следующие строки кода:
Перед тем как вывести на экран ту или иную информацию об адресате, мы будем проверять,
существует ли она. Если информации нет, то мы не будем ничего выводить на экран.
Введите вместо удаленного блока следующие строки кода:
Сохраните сделанные изменения.
Теперь, если снова вывести подробную информацию об адресате, у которого отсутствуют некоторые
данные, то вид рабочего окна браузера примет более аккуратный вид (Рис. 18.8)
Рис. 18.8. Окончательный вид страницы Система управления контактами:
Полная Информация о Контакте (только для чтения)
Создание онлайновой системы управления адресной книгой, использующей аутентификацию, основанную на
сессии, закончено.
|