Тэг для сохранения данных formbuilder в базе

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Тэг для сохранения данных formbuilder в базе

Post by von-hamster »

Понадобилось сделать простой опросник. Модуль poll не подходит. Альтернатив не нашел. Писать свой - лень. Решил поколдовать с Form Builder. Результат ниже, может кому интересно будет. Версия cms - 1.10.3

Создал форму, в качестве обработчика указал тэг пользователя. Альясы у полей не проставлял.

Тэг проверяет наличие таблицы, если нет - создает. Затем сохраняет результаты в базе в таблице вида (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']);
}
Post Reply

Return to “Russian - русский”