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

Сохранение информации

После нажатия управляющей кнопки формируется запрос к скрипту save_data.php. Предположим, что ввели в форму ввода следующие данные:

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

Скрипт save_data.php предназначен для сохранения данных в БД. В случае новых данных они будут добавлены через оператор insrert, в случае изменения данных будет использован оператор update. Помимо добавления и изменения данных скрипт также используется для удаления. Все операторы insrert, update, delete формируются автоматически на основе переданных в скрипт переменных с именем таблицы, названием ключевого поля и значением ключевого поля.

Исходный текст срипта save_data.php следующий:

<?php #save_data.php include( "check.inc" ); // переменные, переданные из формы редактирования // переменные, переданные из формы просмотра $table = $_REQUEST["table"]; // имя таблицы $keyname = $_REQUEST["keyname"]; // имя ключевого поля $keyvalue = $_REQUEST["keyvalue"]; // значение ключевого поля $doaction = $_REQUEST["doaction"]; // предполагаемое действие // 1 - добавить строку // 2 - изменить строку // 3 - удалить строку // 4 - перейти к форме выбора таблиц $result = $_REQUEST["result"]; // 1 - требуется выполнить // действия, указанные в $doaction, // в противном случае - перейти к // форме просмотра // проверяем, нужно ли выполнять действия, заданные в $doaction if( ($result != "1") or $_SESSION["save"]) { // если нет, то переходим к форме просмотра include("view_form.php"); exit; } // формируем массив имен полей и их значений по // переменным, переданным в запросе $fieldarr = create_fieldarr(); if( $doaction == "1" ) { // получаем текст SQL-запроса для добавления строки в таблицу $eq = insert_sql_text( $fieldarr, $table, $keyname, $keyvalue ); } elseif( $doaction == "2" ) { // получаем текст SQL-запроса для изменения строки таблицы $eq = update_sql_text( $fieldarr, $table, $keyname, $keyvalue ); } elseif( $doaction == "3" ) { // получаем текст SQL-запроса для удаления строки таблицы $eq = delete_sql_text( $fieldarr, $table, $keyname, $keyvalue ); } else { exit; } try { // выполняем код запроса exec_sql( $eq ); // пишем на страницу сообщение пользователю об успешности запроса if( $doaction == "1" ) { echo "Строка успешно добавлена в таблицу<br>"; } elseif( $doaction == "2" ) { echo "Строка в таблице успешно изменена<br>"; } elseif( $doaction == "3" ) { echo "Строка успешно удалена из таблицы<br>"; } } catch (Exception $e) { // обрабатываем ошибку // выведем сообщение об ошибке echo $e->getMessage(); // возвращаемся к форме просмотра при удалении // и к форме редактирования в остальных случаях if( $doaction == "3" ) { include("view_form.php"); } else { include("edit_form.php"); } // завершаем генерацию страницы exit; } $_SESSION["save"] = true; // возвращаемся к форме просмотра include("view_form.php"); // формируем массив имен полей и их значений // в запросе распознаем нужные нам переменные по префиксу fld:: function create_fieldarr() { $retarr = array(); foreach( $_REQUEST as $key => $val ) { if( substr( $key, 0, 5 ) == "fld::" ) { $retarr[] = array( substr($key,5), "'".$val."'" ); } } return $retarr; } // формируем текст SQL-запроса на изменение данных function update_sql_text( $fieldarr, // массив имен полей и их значений $table, // имя таблицы $keyname, // имя ключевого поля $keyvalue // значение ключевого поля ) { $eq = ""; foreach( $fieldarr as $v ) { $eq .= $v[0]."=".$v[1].","; } $eq = substr( $eq, 0, strlen($eq) - 1); $eq = "update ".$table." set ".$eq. " where ".$keyname."=".$keyvalue."; fix all;"; return $eq; } // формируем текст SQL-запроса на добавление данных function insert_sql_text( $fieldarr, // массив имен полей и их значений $table, // имя таблицы $keyname, // имя ключевого поля $keyvalue // значение ключевого поля ) { $fldlist = " ("; $vallist = ") values ("; foreach( $fieldarr as $v ) { $fldlist .= $v[0].","; $vallist .= $v[1].","; } $fldlist = substr( $fldlist, 0, strlen($fldlist) - 1); $vallist = substr( $vallist, 0, strlen($vallist) - 1); $eq = "insert into ".$table.$fldlist.$vallist."); fix all;"; return $eq; } // формируем текст SQL-запроса на удаление данных function delete_sql_text( $fieldarr, // массив имен полей и их значений $table, // имя таблицы $keyname, // имя ключевого поля $keyvalue // значение ключевого поля ) { $eq = ""; foreach( $fieldarr as $v ) { $eq .= $v[0]."=".$v[1].","; } $eq = substr( $eq, 0, strlen($eq) - 1); $eq = "delete from ".$table." where ".$keyname."=".$keyvalue."; fix all;"; return $eq; } ?>