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

Страница для выбора таблицы

После выполнения запроса вся последующая работа с результатами осуществляется уже со структурами в памяти (массивами). Функции get_result, exec_sql, isempty_data содержат код по обработке ошибок, в случае возникновения ошибки выполняется генерация исключения, которое должно быть обработано в вызывающем коде. Для генерации текста ошибки используется дополнительная функция gen_error_message.

Вернемся к файлу after_login.php. После установления соединения с БД выполняется генерация страницы для выбора таблицы при помощи скрипта ch_table.inc. Результирующая страница выглядит следующим образом:

Рис. 2. Страница для выбора таблицы

Текст ch_table.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 #ch_table.inc // подключаем файл с доп. функциями include( "var.inc" ); echo '<form name = "form_chtab" action="view_form.php" method="post">'; echo 'Выберите таблицу для просмотра: '; // создаем список таблиц $s = create_list_fromdb( "tables", "select * from TABLES;", 1000 ); // выводим список на страницу echo $s; // добавляем переменную с именем таблицы // которую затем вернем на сервер addVar( "table", "-1" ); // создаем кнопку, котороя присвоит значение перменной table // и вызовет view_form.php echo '<button type="submit" '. ' onClick="'.getVar_Client('table').' = tablesSelect( document.forms[0] )">'. 'Ok</button>'; echo '</form>'; // создать код для формирования списка с заданным именем из массива function create_view_list( $name, // имя списка $arr // массив ) { $s = '<select name="'.$name.'">'; foreach( $arr as $v ) { $s = $s.'<option value="'.$v.'">'.$v.'</option>'; } $s = $s.'</select><br>'; // обработчик на javascript, возвращающий значение // текущего выбранного элемента $s = $s. '<script type="text/javascript">'. 'function '.$name.'Select(f) {'. ' n = f.'.$name.'.selectedIndex; '. ' return f.'.$name.'.options[n].value; '. '}'. '</script><br>'; return $s; } // создать код, формирующий список с заданным именем // на основе запроса к БД function create_list_fromdb( $name, // имя списка $sql, // текст SQL-запроса, в спискебудет отображаться // первое поле в результате $cntrow // максимальное количество элементов в списке ) { try { // выполняем запрос $ar = get_result( $sql, $cntrow ); } catch (Exception $e) { // обрабатываем ошибку // выведем сообщение об ошибке echo $e->getMessage(); // завершаем генерацию страницы exit; } // формируем массив значений для списка foreach( $ar[1] as $val ) { $res[] = $val[0]; } // создаем код для формирования списка return create_view_list( $name, $res ); } ?> </body> </html>

Регистрация переменной "table"

Список таблиц создается функцией create_list_fromdb на основе запроса:

select * from TABLES;

TABLES – это таблица словаря данных HyTech, в котором содержится информация о таблицах. В результате запроса создается массив с именами таблиц. Этот массив передается в функцию create_view_list, которая формирует корректные теги HTML для формирования списка. Помимо тегов HTML создается еще функция на JavaScript, которая возвращает значение текущего элемента списка. Эта функция используется при обработке события нажатия кнопки «Ok» для присвоения значения текущего элемента списка переменной «table». Значение переменной «table» будет передано в скрипт view_form.php (этот скрипт указан в заголовке формы как скрипт обработки). Далее переменная «table» будет использована в качестве имени таблицы при выборке данных.

Переменная «table» регистрируется специальной функцией addVar. Эта функция создает на форме «скрытый» элемент ввода, тем не менее, значение этого элемента будет передано в запросе POST на сервер в скрипт обработки. Код функции addVar содержится в файле var.inc. Вот этот файл:

<?php #var.inc // добавить на страницу скрытый элемент ввода (переменную) // этому элементу можно присвоить значение, которое будет // передано в скрипт - обработчик формы function addVar( $vname, // имя переменной $value  // значение по умолчанию ) {     echo '<input type = hidden value = "'.     $value.     '" name = "'.     $vname.'" >'; } // получить кусок кода для клиентской страницы, // извлекающий значение переменной, // заданной элементом ввода function getVar_Client( $vname // имя переменной ) {     return "document.forms[0].".$vname.".value"; } // получить кусок кода для клиентской страницы, // создающий кнопку, при нажатии которой будет // присвоено значение заданной переменной // и управление будет передано скрипту-обработчику // формы (на сервер) function button_with_act( $name, // имя кнопки $text, // текст на кнопке $val,  // значение, присваиваемое переменной $actname // имя переменной ) {     return '<button name="'.$name.'" type="submit" '.       ' onclick="document.forms[0].'.$actname.'.value = '.$val.       '">'.$text.'</button>'; } ?>

Данные функции активно используются в других скриптах.