Этап 2: Определение Ваших полей.

На первом этапе мы создали переменные для хранения имени таблицы ($table_name) и количества полей, которое вы хотите поместить в таблицу ($num_fields). На этом этапе мы создадим сценарий РНР, отображающий дополнительную форму с элементами, необходимыми для последующего определения полей таблицы: имени, типа и длины.
Создайте с помощью текстового редактора новый файл.
Начните РНР-блок:

Lt;?php

Сначала проверяем, что значения переменных $table_name и $num_fields были введены в форме:

if ((!$_REQUEST["table_name"]) || (!$_REQUEST["num_fields"])) {

header ("Location: show_createtable.html");

exit;

}

Если хотя бы одно из значений не задано, то будет отображена первая форма и произойдет выход из сценария.
Начнем формирование переменной с именем $form_block, в которой будет содержаться форма с методом post и действием do_createtable.php. Помните о том, что нужно использовать символ маскирования (\) перед кавычками.

Введите текст:

Этап 2: Определение Ваших полей. - student2.ru

Поскольку сценарий создает следующую форму "на лету" (динамически) в одной большой строке, то вы можете вывести всю форму просто как строку после того, как уже будет закончен процесс синтаксического анализа. Таким образом, вы не застрянете на недостроенной странице, которая не будет отображаться, если возникнет ошибка.
Добавьте скрытое поле для хранения значения переменной $table_name:

<input type=\"hidden\" name=\"table_name\" value=\"".$_REQUEST["table_name"]."\">

Значение этой переменной вы будете использовать в конце последовательности для сообщения пользователю о том, что таблица была создана правильно.
Отобразим форму в виде HTML-таблицы, чтобы поля были лучше выровнены. Начнем co строки заголовков столбцов и пока закроем строку $form_block.
Для этого введите:

Этап 2: Определение Ваших полей. - student2.ru

Создание полей формы «на лету»

Начните оператор цикла for для создания полей формы:

for ($i = 0; $i < $_REQUEST["num_fields"]; $i++) {

Так же как цикл while, цикл for выполняется, пока условие истинно. В нашем случае цикл for начнется с переменной $i, имеющей значение 0 и будет продолжаться, пока $i меньше значения переменной $num_fields. После каждого цикла значение $i увеличивается на единицу.
Внутри цикла for происходит добавление к переменной $form_block. В каждом цикле добавляется одна строка HTML-таблицы для ввода параметров очередного поля таблицы SQL.
Начните добавление строки HTML-таблицы :

Этап 2: Определение Ваших полей. - student2.ru

В этом коде мы начали формирование строки HTML-таблицы с тега начала строки и описания первой ячейки HTML-таблицы, в которую будет вводиться имя поля создаваемой таблицы SQL.

Использование квадратных скобок ([]) после field_name в поле ввода указывает на массив. Для каждого поля, определенного вами в этой форме, вы будете добавлять значение в массив $field_name. В массиве хранится много переменных в пронумерованных позициях, начиная с 0. Номер позиции увеличивается автоматически, как только массив возрастает. Например, если вы создали базу данных с шестью полями, то массив переменных $field_name будет содержать шесть переменных имен полей: $field_name[0], $field_name[1], $field_name [2], $field_name[3], $field_name[4] и $field_name[5].
В следующей ячейке HTML-таблицы создайте открывающийся список, содержащий типы полей

Этап 2: Определение Ваших полей. - student2.ru

Создайте последнюю ячейку таблицы, которая будет содержать текстовое поле для указания длины поля, закройте строку таблицы и закройте строку $form_block:

Этап 2: Определение Ваших полей. - student2.ru

Завершите цикл for:

}

Добавьте к $form_block последние строки HTML-кода, задающие кнопку Создать Таблицу и закрывающие вашу таблицу и форму:

Этап 2: Определение Ваших полей. - student2.ru

Закройте блок РНР:

?>

Введите блок HTML:

Этап 2: Определение Ваших полей. - student2.ru

Создайте заголовок формы, введя смесь кода HTML и РНР:

<H1>Определите поля для <?php echo $_REQUEST["table_name"]; ?></H1>

Заголовок нужен для того, чтобы пользователь знал, что он просматривает.
Отобразите содержимое переменной $form_block:

<?php echo $form_block; ?>

Завершите HTML-блок тегами:

Этап 2: Определение Ваших полей. - student2.ru

Сохраните созданный файл с именем do_showfielddef.php в папке для документе вашего Web-сервера.
В следующем упражнении вы пройдете первый и второй этап, чтобы проверить, как вы подготовились к созданию таблицы.

Начало процесса создания таблицы

Итак, вы создали на первом этапе работающую форму, с помощью которой можно задать имя таблицы и нужное количество содержащихся в ней полей, а на втором этапе вы создали форму для определения параметров каждого поля. Проверим, как это работает.
Запустите свой Web-браузер, в поле ввода Адрес введите
http://localhost/show_createtable.html
и нажмите клавишу Enter. Браузер загрузит страницу Создание таблицы базы данных: Этап 1 с формой, определяющей имя таблицы и количество содержащихся в ней полей.
Введите в поле ввода Имя таблицы название my_music.
В поле ввода Количество полей введите 8.
Нажмите кнопку Перейти к Этапу 2. В рабочее окно браузера будет загружена страница Создание таблицы базы данных: Этап 2

Этап 2: Определение Ваших полей. - student2.ru

На рисунке вы видите форму, динамически сформированную сценарием, который вы создали в предыдущем знакомстве. Эта форма содержит восемь строк, которые определяют восемь полей в каждой записи таблицы базы данных. Заполним эти поля, но не будем пока нажимать кнопку Создать Таблицу, так как для нее еще не создан сценарии.
В поле ввода Имя поля, расположенное в первой строке, введите текст id, из открывающегося списка Тип поля выберите значение int, и в поле ввода Длина поля введите число 5.
В поле ввода Имя поля, расположенное во второй строке, введите текст format, из открывающегося списка Тип поля выберите значение char, и в поле ввода Длина поля введите число 2.
В поле ввода Имя поля, расположенное в третьей строке, введите текст title, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 150.
В поле ввода Имя поля, расположенное в четвертой строке, введите текст artist_fn, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 100.
В поле ввода Имя поля, расположенное в пятой строке, введите текст artist_ln, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите числo 100.
В поле ввода Имя поля, расположенное в шестой строке, введите текст rec_label, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 50.
В поле ввода Имя поля, расположенное в седьмой строке, введите текст my_notes, из открывающегося списка Тип поля выберите значение text.
В поле ввода Имя поля, расположенное в восьмой строке, введите текст date_asq, из открывающегося списка Тип поля выберите значение date.
Заполненная таблица должна выглядеть так:

Этап 2: Определение Ваших полей. - student2.ru

В следующем упражнении вы разработаете сценарий, который создаст таблицу в базе данных с параметрами, введенными в формы первого и второго этапа.

Paзработка сценария для создания таблицы
Сценарий, который вы создадите в этом упражнении, построит оператор SQL и отправит его к MySQL, чтобы создать таблицу my_music.
Создайте с помощью текстового редактора новый файл.
Начните РНР блок:

Lt;?php

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

$db_name="testDB2";

Добавьте переменную для хранения результата функции mysql_connect ( ):

Этап 2: Определение Ваших полей. - student2.ru

Символ @ используется для подавления предупреждений, а функция die( ) - для прерывания сценария и вывода сообщения в случае невозможности подключиться к базе данных.
Добавьте переменную для хранения результата функции mysql_select_db ( ):

Этап 2: Определение Ваших полей. - student2.ru

Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и вывода сообщения в случае, если выбор базы данных закончится неудачей.
Функция mysgl_select_db ( ) требует указания двух аргументов: имени базы данных и идентификатора текущего подключения.
Начните формирование запроса, в переменной $sql:

$sql="create table ".$_REQUEST["table_name"]." (";

Начните цикл for, с помощью которого будет добавляться остальная часть запроса SQL:

for ($i=0; $i<count($_REQUEST["field_name"]); $i++) {

Цикл будет повторяться столько раз, сколько полей содержится в качестве элементов массиве $field_name.
Функция count ( ) подсчитывает количество элементов в массиве.
Добавьте к оператору SQL имя и тип каждого нового поля:

$sql .= $_REQUEST["field_name"][$i]." ".$_REQUEST["field_type"][$i];

Поскольку некоторые поля могут иметь определенную длину, а некоторые - нет, введем оператор if...else. Если длина поля присутствует, то мы будем добавлять ее в оператор SQL.
Начните оператор if ...else:

if ($_REQUEST["field_length"][$i] != "") {
$sql .= " (".$_REQUEST["field_length"][$i]."),";

Если длина поля не определена, то добавим к оператору SQL запятую (,), служащую разделителем между описаниями полей и закроем оператор if. . .else.:

Этап 2: Определение Ваших полей. - student2.ru

Закройте оператор цикла:

}

Теперь оператор SQL содержит все параметры полей. Однако в результате работы оператора цикла for, в конце строки SQL-оператора, получилась лишняя запятая. Необходимо удалить ее, после чего оператор SQL может быть завершен. Для этого мы используем функцию substr ( ), которая вернет строку за исключением последнего символа.
Введите текст:

Этап 2: Определение Ваших полей. - student2.ru

Функция substr ( ) использует три аргумента. Первый определяет строку, второй указывает на номер символа, с которого нужно начать копировать строку, а третий - номер символа, на котором нужно закончить копирование. В нашем случае указано начать с первого символа (нумерация начинается с 0) и закончить предпоследним.
Завершите формирование оператора SQL:

Этап 2: Определение Ваших полей. - student2.ru

Добавьте переменную для хранения результата функции mysql_query ( ):

Этап 2: Определение Ваших полей. - student2.ru

Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и вывода сообщения в случае, если будет невозможно выполнить запрос.
Функция mysql_query ( ) требует указания оператора SQL и идентификатора текущего подключения.
Чтобы проверить значение переменной $result, введите оператор if ...else:

if ($result) {
$msg="<P>Таблица ".$_REQUEST["table_name"]." создана!</P>";
}

Если значение переменной $result истина, значит запрос завершился успешно и создастся переменная с сообщением о создании таблицы.
Закройте блок РНР:

?>

Введите блок HTML:

Этап 2: Определение Ваших полей. - student2.ru

Выведите на страницу Создание таблицы базы данных: Этап 3 заголовок для информирования пользователя о том, что происходит:

<h1>Добавление таблицы в базу данных <?php echo "$db_name"; ?>...</h1>

Выведите заключительное сообщение:

<?php echo "$form_block"; ?>

Завершите блок HTML:

Этап 2: Определение Ваших полей. - student2.ru

Сохраните созданный файл с именем db_createtable.php в папке для документов вашего Web-сервера.
В следующем упражнении вы проверите работоспособность созданного вами сценария.

Создание таблицы
Если вы пока еще не закрыли рабочее окно своего Web-браузера с заполненной формой, то для проверки работы созданного сценария вам нужно только нажать кнопку Создать таблицу.
Переключитесь в браузер и нажмите кнопку Создать Таблицу. В рабочее окно браузера будет загружена страница Создание таблицы базы данных: Этап 3

Этап 2: Определение Ваших полей. - student2.ru


Чтобы убедиться в том, что таблица была действительно создана, выполните следующие действия:
В поле ввода браузера Адрес введите
http://localh.ost/db_listtable.php (из предыдущей лабораторной работы)
и нажмите клавишу Enter.
Обратившись по этому адресу, вы запустите сценарий db_listtable.php, который создали в предыдущей главе для отображения таблиц баз данных. В рабочее окно браузера будет загружена страница Таблицы MySQL

Этап 2: Определение Ваших полей. - student2.ru

Из рисунка следует, что была создана таблица my_music в базе данных test_DB.

Наши рекомендации