Создал форму, в качестве обработчика указал тэг пользователя. Альясы у полей не проставлял.
Тэг проверяет наличие таблицы, если нет - создает. Затем сохраняет результаты в базе в таблице вида (id - поля, значение поля).
Результат планирую собирать вручную из базы тоже тэгом.
Код тэга:
Code: Select all
$db = cmsms()->GetDb();
$table = cms_db_prefix() . 'fbvalues';
// проверяем наличие таблицы, Если нет - создаем
// '; --' - этот кусок нужен, чтобы в GetOne запросе отсечь Limit
$query = "Show tables from `{$db->database}` like ? ; --";
$dbresult = $db->GetOne($query, array($table));
if (!$dbresult) {
$data = array(
'id' => 'I KEY AUTOINCREMENT',
'field_id' => 'I',
'field_val' => 'C(255)',
);
$flds = array();
foreach ($data as $field => $type) {
$flds[] = "`$field` {$type}";
}
$dict = NewDataDictionary($db);
$sqlarray = $dict->CreateTableSQL($table, implode(',', $flds), array('mysql' => 'TYPE=MyISAM'));
$dict->ExecuteSQLArray($sqlarray);
}
// кусок выше можно закомментировать после того, как таблица будет создана.
// Собираем данные
$data = array();
foreach ($params as $k => $v) {
if (substr($k, 0, 4) == 'fld_' && $v) {
$k = explode('_', $k);
$data['q'][] = '(?, ?)';
$data['p'][] = $k[1];
$data['p'][] = $v;
}
}
// сохраняем
if ($data) {
$query = "INSERT INTO `{$table}` (`field_id`, `field_val`) VALUES " . implode(',', $data['q']);
$db->execute($query, $data['p']);
}