Как получить тип и значение поля?

В настоящее время я пытаюсь создать форму с использованием mysql / php, ниже – часть кода, который у меня есть до сих пор.

БЛОК # 1:

$proceso = mysqli_fetch_assoc($result); // my query returns only one row ... <form action='actualizar.php' method='Post'> <?php foreach(array_keys($proceso) as $key){ echo "<label for='$key'>$key: </label>"; echo "<input name='$key' value='".$proceso[$key]."'><br/>"; } echo "<input type='hidden' name='View' value='$view'>"; ?> <input type="submit" value="Actualizar"> </form> 

Это пока дает мне форму, где я использую имена полей для создания меток и полей ввода, где я показываю значение поля. Я хотел бы также форматировать некоторые поля с помощью jquery datepicker, но только для тех полей, которые имеют тип = Date в таблице mysql.

Я пытаюсь mysqli_fetch_field_direct использовать что-то вроде:

BLOCK # 2:

 $fields = mysqli_num_fields($result); for ($i=0; $i < $fields; $i++) { $field_types[] = $result->fetch_field_direct($i)->type; } 

но в этом случае я не могу получить значение, просто тип

Есть ли простой способ получить тип и значение поля?

Отредактировано (попробуйте) для упрощения:

Предположим, у меня есть поле с именем email которое имеет тип = varchar и мой SQL-запрос генерирует один результат: test@example.com

Из BLOCK # 1 я получаю:

  ------------------------------- Field-Name | Field-Value email | test@example.com 

Из BLOCK # 2 я получаю:

  ------------------------------- Field-Name | Field-Type email | varchar 

я бы хотел получить

  ------------------------------- Field-Name | Field-Type | Field-Value email | varchar | test@example.com 

Это связано с тем, что я хотел бы использовать тип поля для добавления класса css в поле ввода (например, для использования datepicker).

Изменить: я помещаю вывод в таблицу, потому что не могу спать …

Хорошо … посмотри, это то, что ты хочешь …

Это таблица, которую я сделал для другого вопроса SO:

 mysql> describe user; +-------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+----------------+ | User_ID | int(10) unsigned | NO | PRI | NULL | auto_increment | | Email | varchar(100) | YES | | NULL | | | Name | varchar(100) | YES | | NULL | | | Password | varchar(100) | YES | | NULL | | | FB_ID | int(11) | YES | | NULL | | | Total_Score | int(11) | YES | | 0 | | | add_date | datetime | YES | | NULL | | +-------------+------------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) 

и из БД:

 mysql> select * from user limit 1; +---------+-------+------+----------+-------+-------------+---------------------+ | User_ID | Email | Name | Password | FB_ID | Total_Score | add_date | +---------+-------+------+----------+-------+-------------+---------------------+ | 1 | NULL | kim | NULL | NULL | 10 | 2013-11-03 23:04:08 | +---------+-------+------+----------+-------+-------------+---------------------+ + 1 row in set (0.00 sec) 

И код:

 <?php $mysqli = mysqli_connect("localhost", "root", "", "test"); // this came from http://php.net/manual/en/mysqli-result.fetch-field-direct.php $mysql_data_type_hash = array( 1=>'tinyint', 2=>'smallint', 3=>'int', 4=>'float', 5=>'double', 7=>'timestamp', 8=>'bigint', 9=>'mediumint', 10=>'date', 11=>'time', 12=>'datetime', 13=>'year', 16=>'bit', //252 is currently mapped to all text and blob types (MySQL 5.0.51a) 253=>'varchar', 254=>'char', 246=>'decimal' ); // run the query... $result = $mysqli->query("select * from user limit 1"); // get one row of data from the query results $proceso = mysqli_fetch_assoc($result); print "<table> <tr> <th>\$key</th> <th>\$value</th> <th>\$datatype</th> <th>\$dt_str</th> </tr> "; // to count columns for fetch_field_direct() $count = 0; // foreach column in that row... foreach ($proceso as $key => $value) { $datatype = $result->fetch_field_direct($count)->type; $dt_str = $mysql_data_type_hash[$datatype]; $value = (empty($value)) ? 'null' : $value; print "<tr> <td>$key</td> <td>$value</td> <td class='right'>$datatype</td> <td>$dt_str</td> </tr> "; $count++; } print "</table>"; mysqli_close($mysqli); ?> <style> /* this is css that you don't need but i was bored so i made it pretty...! */ table { font-family:Courier New; border-color:#E5E8E3; border-style:solid; border-weight:1px; border-collapse:collapse;} td,th { padding-left:5px; padding-right:5px; margin-right:20px; border-color:#E5E8E3; border-style:solid; border-weight:1px; } .right { text-align:right } </style> и <?php $mysqli = mysqli_connect("localhost", "root", "", "test"); // this came from http://php.net/manual/en/mysqli-result.fetch-field-direct.php $mysql_data_type_hash = array( 1=>'tinyint', 2=>'smallint', 3=>'int', 4=>'float', 5=>'double', 7=>'timestamp', 8=>'bigint', 9=>'mediumint', 10=>'date', 11=>'time', 12=>'datetime', 13=>'year', 16=>'bit', //252 is currently mapped to all text and blob types (MySQL 5.0.51a) 253=>'varchar', 254=>'char', 246=>'decimal' ); // run the query... $result = $mysqli->query("select * from user limit 1"); // get one row of data from the query results $proceso = mysqli_fetch_assoc($result); print "<table> <tr> <th>\$key</th> <th>\$value</th> <th>\$datatype</th> <th>\$dt_str</th> </tr> "; // to count columns for fetch_field_direct() $count = 0; // foreach column in that row... foreach ($proceso as $key => $value) { $datatype = $result->fetch_field_direct($count)->type; $dt_str = $mysql_data_type_hash[$datatype]; $value = (empty($value)) ? 'null' : $value; print "<tr> <td>$key</td> <td>$value</td> <td class='right'>$datatype</td> <td>$dt_str</td> </tr> "; $count++; } print "</table>"; mysqli_close($mysqli); ?> <style> /* this is css that you don't need but i was bored so i made it pretty...! */ table { font-family:Courier New; border-color:#E5E8E3; border-style:solid; border-weight:1px; border-collapse:collapse;} td,th { padding-left:5px; padding-right:5px; margin-right:20px; border-color:#E5E8E3; border-style:solid; border-weight:1px; } .right { text-align:right } </style> 

Итак … уточнить …

Вы можете использовать эти переменные в этом foreach для вывода или использования информации, но вы хотите: (Я использую первую строку вывода для user_id в качестве примера)

  • $key – это имя столбца / поля (например, user_id )

  • $field_types[$key] поступает из типа $result->fetch_field_direct($i)->type (например, 3 )

  • $mysql_data_type_hash[$datatype] – строковая версия типа данных с использованием массива $mysql_data_type_hash в верхней части кода. Это не обязательно, но я включил его, чтобы этот пример был более ясным. (например, int )

  • $proceso[$key] = $value = – это ваше значение для этой итерации инструкции foreach (например, 1 )

Вывод:

 $key $value $datatype $dt_str User_ID 1 3 int Email null 253 varchar Name kim 253 varchar Password null 253 varchar FB_ID null 3 int Total_Score 10 3 int add_date 2013-11-03 23:04:08 12 datetime