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

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

Тэг проверяет наличие таблицы, если нет - создает. Затем сохраняет результаты в базе в таблице вида (id - поля, значение поля).

Результат планирую собирать вручную из базы тоже тэгом.

Код тэга:

$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']);
}
blog comments powered by Disqus