В общем таблицы вида:
id
ключ ученика
номер школы
ответ1
ответ2
.....
ответN
В разных таблицах ответов разное количество, таблиц много, поэтому возникла мысль сделать универсальные обработчики
1 метод создания таблиц в хэлпере
public static function pkTabCrt()
{
$addP = htmlspecialchars(trim($_POST['addP'])); // идентификатор предмета например mat - математика
$addK = htmlspecialchars(trim($_POST['addK'])); // идентификатор класса - просто цифрой, например 4
$addN = htmlspecialchars(trim($_POST['addN'])); // количество полей с вопросами, определяется отдельным методом по предмету и классу
$pkName = 'mon_w78'.$addP.$addK; // собираем имя таблицы например mon_w78mat4
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = "CREATE TABLE IF NOT EXISTS ".$pkName." (
id int(4) NOT NULL auto_increment,
uchKey varchar(10) NOT NULL, // поле ключ ученика есть во всех таблицах
schoolId int(5) NOT NULL,"; // поле номер школы есть во всех таблицах
for ($i = 1; $i <= $addN; $i++)
{
$query = $query.'otv'.$i.' int(2) NOT NULL,'; // собираю циклом поля с ответами - otv1..otv2....otvN
};
$query = $query." PRIMARY KEY (id)) ENGINE=MyISAM DEFAULT CHARSET=utf8";
$db->setQuery($query);
if (!$db->query())
{
// echo __LINE__.$db->stderr();
$res='error';
}else{
$res='yes';
};
//возвращаем результат
return $res;
}
В форме добавления данных в таблицу тоже циклом вывожу нужное количество полей для каждого предмета-класса
<?php
for ($vopN = 1; $vopN <= $vKol; $vopN++)
{ ?>
<tr>
<td>
Вопрос <?php echo $vopN; ?>
</td>
<td>
<input id="otv<?php echo $vopN; ?>" name= "otv<?php echo $vopN; ?>" type="text" style="width:99%;">
</td>
</tr>
<?php };
?>
получение данных таблицы
$pr = $_GET['pr']; // получаю ид предмета
$kl = $_GET['kl']; // получаю ид класса
$pkName = 'mon_w78'.$pr.$kl; // собираю имя таблицы
$result2= modMon2Helper::tableCheck($pkName); // проверяю отдельным методом наличие такой таблицы
if ($result2=='error') {
$result='error';
} else {
if ($result2=='empty') {
$result='empty';
}else{
$vKol= modMon2Helper::voprKolCheck($pr,$kl); // по предмету и классу определяю в отдельном методе количество полей
$result= modMon2Helper::tableAdmPK($pkName); // получаю данные таблицы
};
};
require_once __DIR__ . '/tmpl/tableAdmPK.php';
метод запроса данных таблицы в хэлпере
public static function tableAdmPK($pkName)
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = 'SELECT * FROM '.$pkName.' ORDER BY id Desc';
$db->setQuery($query);
$res = $db->loadObjectList();
if (!$db->query())
{
// echo __LINE__.$db->stderr();
$res='error';
};
return $res;
}
и вот с выводом у меня проблема - не знаю, как динамически поля ответов вывести
foreach ($result as $pkInfo) :
?>
<tr class="datas">
<td class="st1" width=20px><?php echo $pkInfo->id; ?></td>
<td class="st1" width=20px><?php echo $pkInfo->uchKey; ?></td>
<td class="st1" width=20px><?php echo $pkInfo->schoolId; ?></td>
<td class="st1" width=20px><?php echo $pkInfo->otv1; ?></td> // строка с одним ответом
............................................................................
</tr>
<?php
endforeach;
и вторая проблема сейчас обнаружилась - как в методе записи в таблицу получить данные из формы, не зная количество полей. не помню - есть возможность обратиться к форме как к массиву полей и к полям по их номеру?