Сценарий SQL: Создание таблицы из формы
На этапе разработки может потребоваться переопределение таблицы, изменение столбцов и корреляционное изменение формы для ввода данных и создания строк для этой таблицы.
Почему бы не создать таблицу прямо из формы? Это разделило бы задачу на 2.
Этот сценарий подходит в следующих случаях:
- Таблица содержит множество столбцов.
- Большинство из них имеют один и тот же тип данных.
- Его структура может часто меняться на этапе развития.
Принцип
Сценарий будет иметь следующие компоненты:
- HTML-страница с формой.
- Файл конфигурации с кодами доступа к базе (не предоставлен, он зависит от вашего приложения).
- Функции PHP для доступа к базе.
- Функция PHP для создания таблицы.
Имя таблицы будет передано через скрытый объект ввода. Сценарий добавит приставку, определенную в файле конфигурации.
<input type="hidden" name="tablename" value="userlist">
Атрибуты имени элемента ввода формы будут содержать имена, которые также будут именами столбцов.
На этапе разработки атрибут «действие» формы вызывает сценарий создания. Впоследствии имя сценария заменяется сценарием, обрабатывающим введенные пользователем данные.
<form name="users" action="form2php.php">
станет:
<form name="users" action="monscript.php">
Пример
Простая форма для ввода никнейма и адреса электронной почты.
HTML-код
<form name="users" method="post" action="form2php.php">
<input type="hidden" name="tablename" value="userlist">
<p>Nom <input type="text" name="name" maxlength=32></p>
<p>Email <input type="text" name="email" maxlength=64></p>
<input type="submit" value="Submit">
</form>
Таблица SQL для создания
Стол называется userlist или prefixe_userlist.
имя | эмаль |
---|---|
Код JavaScript
Определяет ширину столбцов, используя максимальное количество символов в текстовых полях ввода:
function setsizes()
{
var it = document.getElementsByTagName("input");
for(var i = 0; i < it.length; i++)
{
var element = it.item(i);
var len = element.maxLength;
if(len > 0)
{
element.value = new String(len);
}
}
}
Максимальная длина, назначенная maxlength (maxLength в JavaScript), передается атрибуту value для передачи вместе с данными формы.
Для простоты предполагается, что на странице есть только одна форма.
Код PHP
Скрипт должен просмотреть DOM, чтобы извлечь все объекты форм, составить список, из которого он построит команду SQL для создания таблицы.
<?php
include("config.php");
$hnd = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die("MySQL database '".DB_NAME."' not accessible.<br>");
mysqli_select_db($hnd, DB_NAME)
or die("Enable to select ".DB_NAME." database<br>");
$tablename = $table_prefix.$_POST['tablename'];
$query = "CREATE TABLE $tablename(";
$flag = false;
foreach($_POST as $name => $value)
{
if($name == "Submit") continue;
if($name == "tablename") continue;
if($flag) $query .= ",";
$query .= "$name varchar($value) ";
if($name == "ID") $name .= " PRIMARY NOT NULL";
else
if($name == 'name') $name .= " NOT NULL";
$flag = true;
}
$query.=")";
mysqli_query($hnd, "DROP TABLE $tablename");
$x = mysqli_query($hnd, $query);
if($x == false)
{
echo "Error, ", mysql_error(), "<br>";
}
?>
Это базовый код, который необходимо адаптировать при необходимости. Тип столбцов может меняться, могут добавляться качества.