Работа с адресной книгой

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

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

    В этом упражнении вы измените сценарий 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. Окончательный вид страницы Система управления контактами: Полная Информация о Контакте (только для чтения)

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



    Hosted by uCoz