Опубликован: 24.12.2006 | Доступ: свободный | Студентов: 2671 / 212 | Оценка: 4.51 / 4.22 | Длительность: 23:31:00
Урок 16:

Написание простой CMS вручную

< Урок 15 || Урок 16: 123456789

Создание детальной страницы для обновления записей

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

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

  1. Откройте документ admin_cp_insert.asp . В меню File (Файл) выполните команду Save As (Сохранить как) и сохраните его как admin_cp_ update.asp (заменив исходный файл). Поменяйте заголовок на странице на Update a Country Profile , а заголовок документа (поле Title [Заголовок] на панели инструментов) – на Newland Tours Admin: Update a Country Profile.

    Таким образом, готовая форма, а также набор записей rs_regions, извлекающий из базы все регионы и их идентификаторы и заполняющий раскрывающийся список Region (Регион), полностью скопированы вместе со страницей.

    С помощью этого приема следует учитывать все изменения, которые требуется внести на страницу. В данном случае каждое из полей формы должно заполняться данными, извлеченными из записи для выбранной страны. Для реализации таких изменений требуется создать новый набор записей. Атрибут action тега <form> должен указывать на страницу admin_cp_update_processor.asp, а не на admin_cp_insert_processor.asp, которая добавляет запись в базу данных. Помимо этого, необходимо переименовать саму форму.

  2. В режиме Code (Код) найдите открывающий тег <form> и задайте для него следующие атрибуты.
    action (ASP):
    admin_cp_update_processor.asp?countryID=<%=Request.QueryString("countryID")%>
    action (ColdFusion):
    admin_cp_update_processor.cfm?countryID=<cfoutput>#url.countryID#</cfoutput>
    action (PHP):
    admin_cp_update_processor.php?countryID=<?php echo $_GET['countryID']; ?>
    method: post (без изменений)
    name: frm_updateProfile
    id: frm_updateProfile

    Об этих изменениях легко забыть, поэтому лучше всего внести их сразу.

    Атрибут action требует пояснения. Как известно, при загрузке детальной страницы в состав URL-адреса добавляется переменная countryID, переданная с основной страницы. Ориентируясь на эту переменную, запрос извлекает данные той страны, которую выбрал пользователь. На этот раз, взаимодействующий с базой данных сценарий находится на другой странице: admin_cp_update_processor.asp. Однако и этому сценарию необходимо определить страну, данные которой требуется обновить. При помощи строки запроса или параметра URL-адреса, прикрепленного к атрибуту action формы, переменная передается на страницу со сценарием.

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

    Для ASP внутри блока dbConn в новой строке, расположенной под строкой, начинающейся с кода Set rs_regions =, следует добавить следующий код:

    Set rs_countryDetail = dbConn.Execute("SELECT * FROM tbl_country INNER JOIN     
    tbl_region ON tbl_region.regionID=tbl_country.region WHERE         
    tbl_country.countryID=" & Request.QueryString("countryID"))

    Для ColdFusion:

    <cfquery name="rs_countryDetail" datasource="newland">
    SELECT *  
    FROM tbl_country
    INNER JOIN tbl_region ON tbl_region.regionID=tbl_country.region
    WHERE tbl_country.countryID=#url.countryID#
    </cfquery>

    Для PHP в конце блока запроса, созданного ранее, прямо перед закрывающим ?> следует ввести следующий код:

    $query_rs_countryDetail = "SELECT * FROM tbl_country INNER JOIN tbl_region ON     
    tbl_region.regionID=tbl_country.region WHERE tbl_country.countryID=".$_GET['countryID'];
    $rs_countryDetail = mysql_query($query_rs_countryDetail);
    $row_rs_countryDetail = mysql_fetch_assoc($rs_countryDetail);

    И снова основная часть кода окажется знакомой. Однако будет нелишним разобрать SQL-оператор. Как известно, в таблице tbl_country содержится большая часть информации о странах. Исключение составляют названия регионов, которые хранятся в отдельной таблице, которая, в свою очередь, связана с таблицей tbl_country. Поэтому для извлечения названия региона применяется ключевое слово JOIN. Также следует обратить внимание на то, что SQL-оператор извлекает не все профили стран, а только один, соответствующий идентификатору, сохраненному в переменной строки запроса (или URL-адреса) после того, как пользователь выбрал страну на основной странице.

    Примечание.Пользователям ASP желательно также объявить переменную rs_countryDetail в верхней части документа при помощи оператора Dim. Код будет работать и без этого, но объявление всех переменных никогда не бывает лишним.

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

  4. Пользователям ASP и PHP. В нижней строке документа добавьте код, необходимый для закрытия и уничтожения набора записей.

    Для ASP:

    <%
    rs_countryDetail.Close()
    Set rs_countryDetail = Nothing
    %>

    Для PHP:

    <?php
    mysql_free_result($rs_countryDetail);
    ?>

    Как и раньше, этот код освобождает память севера после того, как набор записей становится ненужным.

  5. В режиме Code (Код) найдите элемент формы countryName. Присвойте ему следующее значение:
    value="XX"

    Это статический HTML-код, поэтому он одинаков для ASP, ColdFusion и PHP. Если в этот момент протестировать страницу, в поле Country Name появятся буквы XX.

    Примечание. При тестировании страницы во время урока следует помнить, что для ее корректной работы требуется параметр URL-адреса. Если его нет (например, при нажатии клавиши (F12) для проверки страницы параметру неоткуда взяться) появится сообщение об ошибке. Для решения этой проблемы следует после URL-адреса, содержащегося в адресной строке, добавить код ?countryID=3, после чего нажать (Enter)/(Return). С добавленным параметром на странице будет достаточно информации для выполнения запроса, и сообщение об ошибке пропадет.
  6. Вместо заменителя XX добавьте в код следующие динамические значения:

    Для ASP:

    <%=rs_countryDetail("countryName")%>

    Для ColdFusion:

    <cfoutput>#rs_countryDetail.countryName#</cfoutput>

    Для PHP:

    <?php echo $row_rs_countryDetail['countryName']; ?>

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

< Урок 15 || Урок 16: 123456789