Опубликован: 24.12.2006 | Уровень: для всех | Доступ: платный

Урок 7: Создание приложения для расчета стоимости путешествий

< Урок 6 || Урок 7: 123456 || Урок 8 >

Создание серверного сценария для проверки формы

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

Для предотвращения ошибок вводится сценарий, проверяющий, все ли необходимые данные были введены в форму. В "Отправка электронной почты с помощью веб-формы" проводилась проверка электронного адреса, введенного в форму. Эта проверка выполнялась на стороне клиента – в виде встроенного в Dreamweaver сценария JavaScript, который запускался при нажатии пользователем кнопки Submit. Сценарий было довольно просто добавить, однако окно с предупреждением, появляющееся в том случае, если форма была заполнена некорректно, было не слишком информативным.

В этом задании будет написан код для ASP, ColdFusion или PHP, проверяющий, введены ли в поля формы числа. Этот код выполняется на стороне сервера. Если поля не заполнены или введенные значения не являются числами, появится изначально скрытая часть HTML-страницы, содержащая сообщение об ошибке. Поскольку сообщение создается при помощи HTML-кода, в него можно ввести любую информацию и как угодно настроить его внешний вид.

Весь процесс выглядит следующим образом. Пользователь заполняет форму и нажимает кнопку Submit. На сервер отправляется запрос на страницу tourprice_processor.asp. В верхней части этой страницы расположен небольшой сценарий ASP, ColdFusion или PHP, проверяющий правильность заполнения формы. Если в обоих полях формы введены числа, страница обрабатывается и отправляется клиенту в обычном порядке. Если хотя бы одно поле не содержит число, пользователь перенаправляется обратно на страницу tourprice.asp, на которой появляется скрытая ранее область с сообщением об ошибке.

Для создания этого механизма требуется написать сценарий проверки правильности заполнения формы. О том, как это сделать, говорится в данном упражнении. В следующем упражнении показано, как создать и скрыть фрагмент HTML-кода с сообщением об ошибке. Наконец, введенный в область текст следует отформатировать при помощи CSS.

Итак, общая картина ясна, пора прикинуть, как должен работать сценарий проверки формы. Во-первых, сценарий будет управлять передачей данных. То есть, в зависимости от того, правильные ли данные ввел посетитель, сценарий должен продолжить расчеты или вернуть посетителя на страницу tourprice.asp. Для реализации управления данными обычно применяются условные инструкции вида if…else. Приведенный ниже псевдокод демонстрирует схему работы сценария.

if пользователь вводит в поле нечисловое значение или оставляет его 
	незаполненным
	направить пользователя обратно на tourprice.asp
else
	продолжать в обычном порядке
end if

Сценарий будет выполнен поэтапно – в два приема. На первом этапе для обработки страницы в обычном порядке инструкция else не потребуется. Нужна только первая часть сценария с инструкцией if.

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

if пользователь вводит в поле нечисловое значение или оставляет его 
	незаполненным
	направить пользователя обратно на tourprice.asp с помощью строки запроса
end if

План готов, пора написать код.

  1. Откройте файл tourprice_processor.asp . В начале документа перед сценарием расчета стоимости оставьте немного места для нового сценария.

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

    Пользователям ASP следует поместить новый сценарий ниже кода <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>, который всегда должен оставаться в новой строке.

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

    Для ASP:

    <%
    If Not IsNumeric(Request.Form("numAdults")) or Not IsNumeric(Request.Form("numChildren")) 
      Then
    End If
    %>

    Для ColdFusion:

    <cfif> Not IsNumeric(form.numAdults) or Not IsNumeric(form.numChildren)
    </cfif>

    Для PHP:

    <?php
    if (is_numeric($_POST['numAdults']) == false or is_numeric($_POST['numChildren']) == false)
    ?>

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

    Все три языка содержат функцию IsNumeric() или is_numeric(), которая проверяет, является ли параметр числом. Если да, функция возвращает значение true (истина). Если нет – значение false (ложь). Поскольку перенаправить посетителя требуется в том случае, если значение не является числовым, добавляется оператор Not (ASP, ColdFusion) или применятся операция сравнения == false (PHP), чтобы инвертировать значение, возвращаемое функцией IsNumeric() или is_numeric(). Поскольку в условии поверяются две переменные, для каждой вызывается своя функция. Соединяет их оператор or (или).

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

    Для ASP (с отступом в пустой строке, после инструкции if ):

    Response.Redirect("tourprice.asp?error=notnumeric")

    Для ColdFusion (с отступом в пустой строке между открывающим и закрывающим тегами <cfif> ):

    <cflocation url="tourprice.cfm?error=notnumeric">

    Для PHP (с отступом в пустой строке после инструкции if ):

    {
    header("Location: tourprice.php?error=notnumeric");
    exit;
    }

    Функция ASP Response.Redirect() переводит пользователя по указанному адресу. Точно так же действуют тег <cflocation> (ColdFusion) и функция header("Location:…") (PHP). Помимо самого URL-адреса указана и переменная запроса. На страницу tourprice.asp будет добавлен сценарий, проверяющий наличие этой переменной при помощи условной конструкции if…else и управляющий отображением области с сообщением об ошибке.

  4. Сохраните файл tourprice_processor.asp и загрузите его на сервер. Протестируйте страницу tourprice.asp.

    Если не ввести число хотя бы в одно из полей, на экране останется страница tourprice.asp. При этом в адресной строке к адресу страницы будет добавлена переменная запроса. Она пока не применяется, но уже существует. Ее наличие или отсутствие позволяет серверному сценарию и пользователю различать ситуации, когда страница загружается впервые, а когда – из-за ошибки.

< Урок 6 || Урок 7: 123456 || Урок 8 >
Екатерина Мезенцева
Екатерина Мезенцева
Россия
Маргарита Туктарова
Маргарита Туктарова
Соединенное Королевство, London, kingston university, 2012