Відображення списку полів у html-формі

 

Тепер дещо підкоректуємо попередній приклад. Будемо не просто виводити інформацію про поле, а відображати його як потрібний елемент html-форми. Так, елементи типу BLOB переведемо в textarea (помітимо, що поле description, що ми створювали з типом TEXT, відображається як таке, що має тип BLOB), числа і рядки відобразимо як текстові рядки введення <input type=text>, а елемент, що має мітку автоінкремента, взагалі не будемо відображати, оскільки його значення встановлюється автоматично.

Усе це розв’язується досить просто, за винятком виділення зі списку прапорів прапора auto_increment. Для цього потрібно скористатися функцією explode.

Синтаксис explode:

масив explode(рядок separator, рядок string [, int limit])

Ця функція розбиває рядок string на частини за допомогою роздільника separator і повертає масив отриманих рядків.

У нашому випадку як роздільник потрібно взяти пробіл " ", а як задану стрічку для розбивки - рядок прапорів поля.

Отже, створимо форму для введення даних у таблицю Artifacts:

<?
$conn=mysql_connect("localhost","nina","123"); // встановлюємо з’єднання
$database = "book";
$table_name = "Artifacts";
mysql_select_db($database); // обираємо базу даних для роботи 
$list_f = mysql_list_fields($database,$table_name); // отримуємо список полів в базі
$n = mysql_num_fields($list_f); 
        // кількість стрічок в результаті попереднього запиту
        //тобто скільки всього полів в таблиці Artifacts) 
echo "<form method=post action=insert.php>";  
        // створюємо форму для введення даних
echo "<TABLE BORDER=0 CELLSPACING=0 width=50%><tr>
        <TD  BGCOLOR='#005533' align=center>
        <font color='#FFFFFF'>
        <b> Add new row in $table_name</b>
        </font></td></tr>
        <tr><td></td></tr></TABLE>";
echo "<table border=0 CELLSPACING=1 cellpadding=0 width=50% >";
// для кожного поля отримуємо його ім’я, тип, довжину і прапори
for($i=0;$i<$n; $i++){
        $type = mysql_field_type($list_f, $i);
        $name_f = mysql_field_name ($list_f,$i);
        $len = mysql_field_len($list_f, $i);
        $flags_str = mysql_field_flags ($list_f, $i);
// із стрічки прапорів робимо масив, де кожен елемент масиву – прапор поля, 
        $flags = explode(" ", $flags_str); 
        foreach ($flags as $f){
if ($f == 'auto_increment') $key = $name_f; 
        // запам’ятовуємо ім’я інкремента
}
/* для кожного поля, що не автоінкрементом, в 
залежності від його типу виводимо потрібний елемент форми */
if ($key <> $name_f){ 
echo "<tr><td align=right bgcolor='#C2E3B6'>
        <font size=2><b>&nbsp;". $name_f ."</b></font> 
        </td>";
switch ($type){
        case "string":
        $w = $len/5;
        echo "<td><input type=text name=\"$name_f\" size = $w ></td>";
break;
case "int": 
        $w =  $len/4;
        echo "<td><input type=text name=\"$name_f\" size = $w ></td>";
break;
case "blob":
echo "<td><textarea rows=6 cols=60 name=\"$name_f\"></textarea></td>";
break;  
} 
}
echo "</tr>";
echo "</table>";
echo "<input type=submit name='add' value='Add'>";
echo "</form>";
?>