Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Форма редактирования

Работа с формой завершается нажатием одной из управляющих кнопок «Добавить строку», «Изменить строку», «Удалить строку», «Выбрать таблицу повторно». По нажатию кнопки управление передается скрипту edit_form.php. Например, если нажата кнопка «Добавить строку», результатом работы скрипта edit_form.php будет следующая страница:

Рис. 4. Страница добавления записи

Скрипт, формирующий данную страницу, выглядит следующим образом:

<?php #edit_form.php include( "check.inc" ); $_SESSION["save"] = false; // переменные, переданные из формы просмотра $table = $_REQUEST["table"]; // имя таблицы $keyname = $_REQUEST["keyname"]; // имя ключевого поля $keyvalue = $_REQUEST["keyvalue"]; // значение ключевого поля $doaction = $_REQUEST["doaction"]; // предполагаемое действие // 1 - добавить строку // 2 - изменить строку // 3 - удалить строку // 4 - перейти к форме выбора таблиц $cntrow = $_REQUEST["cntrow"]; // сколько строк в таблице // было. Нужно, чтобы отследить // тот факт, что таблица пуста if( $cntrow <= 0 ) { $doaction = "1"; } // проверяем, нужно ли перейти к форме выбора таблиц if ( $doaction == "4" ) { // создаем форму выбора таблиц include( "ch_table.inc" ); exit; } include( "var.inc" ); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ru" dir="ltr"> <head> <title>Редактирование</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> </head> <body> <?php echo '<form name="edit_data" action="save_data.php" method="post">'; // добавляем полученные из запроса переменные, дабы можно // их было также передать в качестве запроса к другой форме addVar( "table", $table ); addVar( "keyname", $keyname ); addVar( "keyvalue", $keyvalue ); addVar( "doaction", $doaction ); // в эту переменную будет сохранено действие (Сохранить, Отмена и т.п.) // которое требуется совершить с формой после завершение ввода addVar( "result", "-1" ); // проверяем, нужно ли подтвердить удаление строки if( $doaction == "3" ) { // создаем форму с запросом на удаление echo "Удалить выбранную строку?<br>"; echo button_with_act( "yes", "Yes", "1", "result" ); echo button_with_act( "no", "No", "2", "result" ); exit; } else { // добавляем управляющие кнопки "Сохранить" и "Отмена" echo button_with_act( "save", "Сохранить", "1", "result" ); echo button_with_act( "cancel", "Отмена", "2", "result" ); } // создаем поля ввода edit_data( $table, $keyname, $keyvalue, $doaction, $cntrow ); echo '</form>'; // функция для создания полей ввода function edit_data( $table, // имя таблицы $keyname, // имя ключевого поля $keyvalue, // значение ключевого поля3 $doaction, // предполагаемое действие // 1 - добавить строку // 2 - изменить строку $cntrow // 5 - сколько строк в таблице // было. Нужно, что бы отследить // тот факт, что таблица пуста ) { try { if( $cntrow > 0 ) { // в таблице есть строки, выбираем из таблицы // единственную строку по значению ключа $ar = get_result( "select * from ".$table. " where ".$keyname."=".$keyvalue.";", 1 ); } else { // при отсутствии строк в таблице всегда будем только // добавлять данные $doaction = "1"; // выполняем запрос к таблице с целью извлечь данные о полях $ar = get_result( "select * from ".$table. " where ".$keyname."=-1;", 1 ); } } catch (Exception $e) { // обрабатываем ошибку // выведем сообщение об ошибке echo $e->getMessage(); // завершаем генерацию страницы exit; } $i= 0; // данные выбранной строки БД $row = $ar[1][0]; echo '<table border="0" >'; // Для каждого поля foreach( $ar[0] as $fld ) { echo "<tr>"; // Выводим имя поля echo "<td>$fld[fname]</td>"; // Получаем значение поля if( $doaction == "2" ) { $val = $row[$i]; } else { // при добавлении значение поля пустое $val = ""; } // выводим элемент ввода на страницу // внимание! Дабы при последующей // обработке формы переменная со значением поля была различима // в начале имени переменной указывается префикс fld:: echo '<td><input type = "text" name = "fld::'.$fld[fname].'" '. 'value="'.$val.'"></td>'; echo "</tr>"; $i++; } echo '</table>'; } ?> </body> </html>

В зависимости от значения переменной «doaction» скрипт либо создает форму для подтверждения удаления, либо формирует полноценную форму ввода полей. Эта форма содержит кнопки «Сохранить» и «Отмена». Нажатие этих кнопок приводит к переходу к скрипту – обработчику save_data.php. В переменную «result» помещается «1» в случае выбора кнопки «Сохранить» и «2» в случае выбора кнопки «Отмена». Поля ввода создаются на форме при помощи вызова функции edit_data. Эта функция на основе переданного имени таблицы, имени ключевого поля и значения ключевого поля формирует SQL-запрос для извлечения данных конкретной строки таблицы (в случае добавления строки SQL-запрос используется только для получения информации о полях таблицы).

После извлечения данных формируется список полей для ввода. Имена полей для ввода имеют вид «fld::имя поля БД». Префикс «fld::» используется для того, чтобы распознать переменные, имеющие отношение к полям БД в скрипте – обработчике save_data.php.