Язык программирования PHP

в чем состоит задача. Мы


Напомним, в чем состоит задача. Мы хотим написать интерфейс, который позволял бы создавать html-формы. Пользователь выбирает, какие элементы и в каком количестве нужно создать, придумывает им названия, а наша программа сама генерирует требуемую форму.
Разобьем задачу на несколько подзадач: выбор типов элементов ввода и их количества, создание названий элементов ввода и обработка полученных данных, т.е. непосредственно генерация формы. Первая задача достаточно проста: нужно написать соответствующую форму, например подобную приведенной ниже (task_form.html):
<form action="ask_names.php"> Создать элемент "строка ввода текста": <input type=checkbox name=types[] value=string><br> Количество элементов: <input type=text name=numbers[string] size=3><br> <br> Создать элемент "текстовая область": <input type=checkbox name=types[] value=text><br> Количество элементов: <input type=text name=numbers[text] size=3><br> <input type=submit value="Создать"> </form>
Листинг 5.12. task_form.html (html, txt)
Когда мы пишем в имени элемента формы, например types[], это значит, что его имя – следующий элемент массива types. То есть у нас первый элемент формы ("строка ввода текста") будет иметь имя types[0], а второй (текстовая область) – types[1]. В браузере task_form.html будет выглядеть примерно так:

Рис. 5.1.  Форма для выбора создаваемых элементов и их количества
После отправки данных этой формы мы получим информацию о том, какие элементы и сколько элементов каждого типа нужно создать. Следующий скрипт запрашивает названия для этих элементов:
Листинг 5.13. ask_names.php (html, txt)
Допустим, нужно создать два элемента типа «текстовая строка» и один элемент типа «текстовая область», как и отмечено в форме выше. Тогда скрипт ask_names.php обработает ее таким образом, что мы получим такую форму:

Рис. 5.2.  Форма для ввода названий создаваемых элементов
Введем в эту форму, например, строки «Название», «Автор» и «Краткое содержание». Эти данные будет обрабатывать скрипт task.php.
Листинг 5.14. task.php (html, txt)
Результатом работы этого скрипта с входными данными, приведенными выше, будет следующая форма:

Рис. 5.3.  Пример формы, сгенерированной нашей программой


$num = $_GET["numbers"][$type]; // сколько элементов каждого типа нужно for ($i=1;$i<=$num;$i++){ // создаем $num строк для ввода $st.= "Введите имя $i-го элемента типа $type: "; $st.= "<input type=text name=names[$type][]><br>"; } // сохраняем тип и число необходимых // элементов ввода этого типа $st.= "<input type=hidden name=types[] value=$type>"; $st.= "<input type=hidden name=numbers[] value=$num><br>"; } $st .= "<input type=submit name=send value=send></form>"; return $st; // в переменной $st содержится код формы // для запроса имен } else echo "Select type"; } echo Ask_names(); // вызываем функцию и выводим // результаты ее работы ?>
Листинг 5.13. ask_names.php
Допустим, нужно создать два элемента типа «текстовая строка» и один элемент типа «текстовая область», как и отмечено в форме выше. Тогда скрипт ask_names.php обработает ее таким образом, что мы получим такую форму:

Рис. 5.2.  Форма для ввода названий создаваемых элементов
Введем в эту форму, например, строки «Название», «Автор» и «Краткое содержание». Эти данные будет обрабатывать скрипт task.php.
<? $show_file = "task_show.php"; /* файл, который будет обрабатывать данные созданной этим файлом формы */
function Create_element($type,$name){ // функция создает элемент ввода // по типу и названию switch($type){ case"string": $str .= "$name: <input type=text name=string[]><br>"; break; case "text": $str .= "$name: <textarea name=text[]></textarea><br>"; break; } return $str; } function Create_form(){ // функция создает форму // с нужными элементами global $show_file; $str = '<form action="'.$show_file.'">'; foreach ($_GET["types"] as $k => $type){ // перебираем типы элементов $num = $_GET["numbers"][$k]; // число элементов этого типа
for ($i=1;$i<=$num;$i++){ $arr = $_GET["names"][$type][$i-1]; // имя создаваемого элемента
$str .= Create_element($type,$arr); // вызываем функцию для // создания элемента } } $str .= "<input type=submit value=send></form>"; echo $str; } $crt = "Create_form"; $crt(); // вызываем функцию создания // формы Create_form ?>
Листинг 5.14. task.php
Результатом работы этого скрипта с входными данными, приведенными выше, будет следующая форма:

Рис. 5.3.  Пример формы, сгенерированной нашей программой

Содержание раздела