#6. 1 php web-приложения Отображение данных сложной формы

В предыдущей главе описывались различные элементы управления, используемые в HTML-формах: текстовые поля, списки, выключатели и т.п. Эта глава посвящена вопросу разработки web-приложений, которые получают данные, введенные пользователем в форму, проверяют их на корректность и обрабатывают их определенным образом. В этой главе рассказывается, как определить используемый тип браузера, как выполнять проверку различных типов данных, как перенаправить пользователя на различные URL, как разместить все web-приложение в одной форме и многое другое.

Структура типичного web-приложения имеет следующий вид.

validate_data() ;
if (count($errors) > 0) {
    display_errors();
    display_form();
} else {
    process data();
}

Функция validate_data выполняет проверку всех введенных данных (например, являются ли строки, введенные в поля, предназначенные для ввода чисел, действительно числами). При обнаружении ошибок функция заносит их в глобальный массив $еггогs. Если проверка выявила ошибки, то их перечень выводится при помощи функции display_errors, а функция display_form выводит форму с полями, которые содержат уже введенные пользователем значения. Если же проверка данных прошла успешно, они обрабатываются при помощи функции process_data. Проверка данных на корректность и предоставление пользователю возможности исправить допущенные ошибки является значительной и весьма важной частью любого web-приложения.

Отображение данных формы

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

Пример 1. Пример сложной формы

    <HTML>
        <HEAD>
            <TITLE>
                Пример сложной формы
            </TITLE>
        </HEAD>
        <BODY>
            <CENTER>
                <H1>
                    Пример сложной формы
                </H1>
                <FORM METHOD="POST" ACTION="phpformdata.php">
                    Введите Ваше имя
                    <INPUT NAME="Name" TYPE="TEXT" >
                    <BR>
                    <BR>
                    Выберите любимые фрукты:
                    <SELECT NAME="Food[]" MULTIPLE>
                        <OPTION value=Апельсин>Апельсин</OPTION>
                        <OPTION value=Гpушa>Груша</OPTION>
                        <OPTION value=Персик>Персик</OPTION>
                        <OPTION value=Яблоко>Яблоко</OPTION>
                    </SELECT>
                    <BR>
                    <BR>                
                    <INPUT TYPE=SUBMIT VALUE="OK">
                </FORM>
            </CENTER>
        </BODY>
    </HTML>  

Для отображения всех данных, введенных в форме, используется цикл foreach по всем элементам массива $_REQUEST. Если какой-либо элемент массива сам является массивом (это может случиться в случае использования списков с множественным выбором), используется вложеный цикл foreach. Скрипт-обработчик формы приведен в примере 2, результат его выполнения — на рис. 2.



Рис. 1. Пример сложной формы

Пример 2. Отображение всех данных формы

<HTML>
    <HEAD>
        <TITLE>
            Oтображение всех данных формы
        </TITLE>
    </HEAD>
    <BODY>
        <CENTER>
            <H1>
                Oтображение всех данных формы
            </H1>
            В форму были введены данные:
            <BR>
            <?php
                foreach ($_REQUEST as $key => $value) {
                    if (is_array($value)) {
                        foreach ($value as $item) {
                            echo $key, " => ", $item, "<BR>" ;
                        }
                    } else {
                        echo $key, " => ", $value,"<BR>" ;
                    }
                }
            ?>
        </CENTER>
    </BODY>
</HTML>



Рис. 2. Отображение всех данных формы

Key Words for FKN + antitotal forum (CS VSU):