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

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

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

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

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

  1. Откройте файл admin_cp_update_processor.asp и в режиме Code (Код) удалите все его содержимое.

    Так же, как и в прошлый раз, страница создается с нуля, так как содержит только сценарий.

  2. Введите код, создающий соединение с базой данных.

    Для ASP:

    <%
    Dim dbConn
    set dbConn = server.CreateObject("adodb.connection")
    dbConn.open("newland")
    
    %>

    Для ColdFusion:

    <cfquery name="update_cp" datasource="newland">
    
    </cfquery>

    Для PHP:

    <?php
    // Set up connection to MySQL
    $host = "localhost";
    $user = "[введите имя пользователя]";
    $pwd = "[введите пароль]";
    $dbConn = mysql_connect($host,$user,$pwd);
    // Connect to newland_tours database
    $database = "newland_tours";
    mysql_select_db($database);
    ?>

    После создания соединения можно сформировать SQL-запрос.

  3. В пустой строке, которая осталась на предыдущем шаге, введите код, необходимый для обновления базы данных.

    Для ASP (весь код в одной строке):

    dbConn.Execute("UPDATE tbl_country SET region='" & Request.Form("region") &     
    "', countryName='" & 
        Request.Form("countryName") & "', population='" &     
    Request.Form("population") & "', country_currency='" &           
    Request.Form("country_currency") & "', description='" &         
    Request.Form("description") & "', imageURL='" & Request.Form("imageURL")     
    & "', imageALT='" & Request.Form("imageALT") & "' WHERE countryID=" &     
    Request.QueryString("countryID"))

    Для ColdFusion (не запрещается разбивать код на строки):

    UPDATE tbl_country
    SET region='#form.region#',
      countryName='#form.countryName#',
      population='#form.population#',
      country_currency='#form.country_currency#',
      description='#form.description#',
      imageURL='#form.imageURL#',
      imageALT='#form.imageALT#'
    WHERE countryID=#URL.countryID#

    Для PHP:

    //Update database
    $query_updateCountry = "UPDATE tbl_country SET region='".$_POST['region']."',     
    countryName='".$_POST['countryName']."', population='".$_POST['population']."',     
    country_currency='".$_POST['country_currency']."',           
    description='".$_POST['description']."', imageURL='".$_POST['imageURL']."     
    ', imageALT='".$_POST['imageALT']."' WHERE countryID=".$_GET['countryID'];
    $updateCountry = mysql_query($query_updateCountry);

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

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

    Для ASP (строка над закрывающим элементом %> ):

    Response.Redirect("admin_cp_master.asp")

    Для ColdFusion (строка после закрывающего тега </cfquery> ):

    <cflocation url="admin_cp_master.cfm">

    Для PHP (перед закрывающим тегом ?> ):

    header("Location: admin_cp_master.php");

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

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

    В результате создание сценария для обновления завершено. Следует отметить, что он замечательно работает, – по крайней мере, для некото рых стран. Но если с помощью ASP попытаться изменить данные для Аргентины, Таиланда, Индии и некоторых других стран, появится сообщение об ошибке. Причина ее возникновения состоит в том, что в тексте описаний (description) или в альтернативном тексте к изображению (imageALT) могут содержаться знаки апострофа, которые непонятны обработчику кода SQL (PHP и ColdFusion автоматически пропускают этот символ, поэтому в случае с ColdFusion и PHP ошибки не возникнет).

    Для решения этой проблемы следует удалить из текста все апострофы. Но это решение не самое лучшее, поскольку синтаксическая конструкция для представления текста будет неверной.

    В последующих шагах на страницу будет добавлен код, который перед добавлением измененного текста в базу данных автоматически заменяет знаки апострофа соответствующей последовательностью символов ( &#39; ). SQL проигнорирует последовательность символов (что и требуется), а при выведении данных на странице браузер преобразует код последовательности обратно в знак апострофа. Ни конечный пользователь, ни сотрудник компании, управляющий контентом сайта Newland Tours, не будут даже знать о том, что происходит в коде. Единственное заметное изменение (только при использовании ASP) заключается в том, что в базе данных вместо апострофов появятся последовательности символов &#39;.

  6. Только пользователям ASP. Снова откройте страницу admin_cp_update_processor.asp.

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

  7. Только пользователям ASP. В верхней части страницы между открывающим элементом <% и строкой Dim dbConn добавьте следующий сценарий:
    Dim description_fixed, imageALT_fixed
    description_fixed = Replace(Request.Form("description"),"'","&#39;")
    imageALT_fixed = Replace(Request.Form("imageALT"),"'","&#39;")

    ASP содержит встроенную функцию Replace(), в которой указывается:

    • переменная, в которой следует вести поиск,
    • строка, которую нужно найти, и строка, на которую следует заменить найденную.

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

  8. Только пользователям ASP. Замените две переменные в SQL-запросе, так, чтобы оператором UPDATE использовались их исправленные версии.

    Следует заменить код description='" & Request.Form("description") & "' на description='" & description_fixed & "', а imageALT='" & Request.Form("imageALT") & "' на imageALT='" & imageALT_fixed & "'.

    После завершения этого шага нужно обратить внимание на то, что после участка кода с переменной description стоит запятая, а после участка кода imageALT (который является последним) запятой нет.

  9. Только пользователям ASP. Сохраните страницу, загрузите ее на сервер и протестируйте.

    На этот раз обновляются все записи даже для стран, в описаниях и альтернативных текстах которых содержатся апострофы.

    Поскольку способ решения проблемы апострофов теперь известен, следует устранить ее и на странице для добавления стран.

  10. Только пользователям ASP. Откройте страницу admin_cp_insert_ processor.asp и устраните описанную выше проблему.

    В код требуется внести те же изменения, что и на страницу admin_cp_update_processor.asp. SQL запросы страниц различаются, однако код, который необходимо заменить, остался прежним.

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