Работа с формой завершается нажатием одной из управляющих кнопок «Добавить строку», «Изменить строку», «Удалить строку», «Выбрать таблицу повторно». По нажатию кнопки управление передается скрипту 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; }
// добавляем полученные из запроса переменные, дабы можно // их было также передать в качестве запроса к другой форме addVar( "table", $table ); addVar( "keyname", $keyname ); addVar( "keyvalue", $keyvalue ); addVar( "doaction", $doaction );
// в эту переменную будет сохранено действие (Сохранить, Отмена и т.п.) // которое требуется совершить с формой после завершение ввода addVar( "result", "-1" );
// проверяем, нужно ли подтвердить удаление строки if( $doaction == "3" ) {
// функция для создания полей ввода 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 );
$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.