Написание простой CMS вручную
Создание сценария для обновления записей
По сравнению с предыдущим упражнением последние два покажутся слишком легкими. Сначала будет создана страница, содержащая сценарий обновления записи.
-
Откройте файл admin_cp_update_processor.asp и в режиме Code (Код) удалите все его содержимое.
Так же, как и в прошлый раз, страница создается с нуля, так как содержит только сценарий.
-
Введите код, создающий соединение с базой данных.
Для 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-запрос.
-
В пустой строке, которая осталась на предыдущем шаге, введите код, необходимый для обновления базы данных.
Для 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 случайно не была добавлена запятая.
-
Добавьте на страницу код, необходимый для перемещения пользователя на основную страницу.
Для ASP (строка над закрывающим элементом %> ):
Response.Redirect("admin_cp_master.asp")
Для ColdFusion (строка после закрывающего тега </cfquery> ):
<cflocation url="admin_cp_master.cfm">
Для PHP (перед закрывающим тегом ?> ):
header("Location: admin_cp_master.php");
Код переводит пользователя на основную страницу, где он может убедиться в том, что изменения успешно сохранены.
-
Сохраните файл и загрузите его на сервер. Запустите основную страницу (F12), выберите страну, измените информацию о ней и нажмите
кнопку Submit. Снова запустите страницу для обновления той же страны, чтобы восстановить первоначальное значение.
В результате создание сценария для обновления завершено. Следует отметить, что он замечательно работает, – по крайней мере, для некото рых стран. Но если с помощью ASP попытаться изменить данные для Аргентины, Таиланда, Индии и некоторых других стран, появится сообщение об ошибке. Причина ее возникновения состоит в том, что в тексте описаний (description) или в альтернативном тексте к изображению (imageALT) могут содержаться знаки апострофа, которые непонятны обработчику кода SQL (PHP и ColdFusion автоматически пропускают этот символ, поэтому в случае с ColdFusion и PHP ошибки не возникнет).
Для решения этой проблемы следует удалить из текста все апострофы. Но это решение не самое лучшее, поскольку синтаксическая конструкция для представления текста будет неверной.
В последующих шагах на страницу будет добавлен код, который перед добавлением измененного текста в базу данных автоматически заменяет знаки апострофа соответствующей последовательностью символов ( ' ). SQL проигнорирует последовательность символов (что и требуется), а при выведении данных на странице браузер преобразует код последовательности обратно в знак апострофа. Ни конечный пользователь, ни сотрудник компании, управляющий контентом сайта Newland Tours, не будут даже знать о том, что происходит в коде. Единственное заметное изменение (только при использовании ASP) заключается в том, что в базе данных вместо апострофов появятся последовательности символов '.
-
Только пользователям ASP. Снова откройте страницу admin_cp_update_processor.asp.
Сценарий, предназначенный для поиска и замены, будет размещаться в самом начале страницы, а, следовательно, будет выполняться до обновления.
-
Только пользователям ASP. В верхней части страницы между открывающим элементом <% и строкой Dim dbConn добавьте следующий сценарий:
Dim description_fixed, imageALT_fixed description_fixed = Replace(Request.Form("description"),"'","'") imageALT_fixed = Replace(Request.Form("imageALT"),"'","'")
ASP содержит встроенную функцию Replace(), в которой указывается:
- переменная, в которой следует вести поиск,
- строка, которую нужно найти, и строка, на которую следует заменить найденную.
Если сейчас протестировать файл, то сообщение об ошибке появится все равно, поскольку, несмотря на наличие переменных, в которых хранятся значения двух текстовых областей, содержимое этих переменныхне вставлено в форму. Для этого следует внести изменения в SQL код.
-
Только пользователям ASP. Замените две переменные в SQL-запросе, так, чтобы оператором UPDATE использовались их исправленные версии.
Следует заменить код description='" & Request.Form("description") & "' на description='" & description_fixed & "', а imageALT='" & Request.Form("imageALT") & "' на imageALT='" & imageALT_fixed & "'.
После завершения этого шага нужно обратить внимание на то, что после участка кода с переменной description стоит запятая, а после участка кода imageALT (который является последним) запятой нет.
-
Только пользователям ASP. Сохраните страницу, загрузите ее на
сервер и протестируйте.
На этот раз обновляются все записи даже для стран, в описаниях и альтернативных текстах которых содержатся апострофы.
Поскольку способ решения проблемы апострофов теперь известен, следует устранить ее и на странице для добавления стран.
-
Только пользователям ASP. Откройте страницу admin_cp_insert_
processor.asp и устраните описанную выше проблему.
В код требуется внести те же изменения, что и на страницу admin_cp_update_processor.asp. SQL запросы страниц различаются, однако код, который необходимо заменить, остался прежним.