Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 3530 Просмотров
*

dv-cto

  • Новичок
  • 9
  • 0 / 0
Вывод данных из базы
« : 12.02.2015, 17:39:07 »
Есть модуль, взаимодействующий с БД Joomla - создание-очистка-удаление собственных таблиц, заполнение из данными и вывод в табличном варианте. Все крутится во фронтенде.
Проблема с таким вопросом: требуется создать несколько однотипных таблиц с разным количеством полей. Таблиц таких довольно много и нет желание под каждую писать методы в хэлпере и шаблоны вывода. Делаю набор универсальных методов, количество полей передаю в них из скрытых полей формы (пока), названия таблиц передаю через get. С созданием таблиц разобрался - в цикле формирую строку запроса с нужным количеством полей (имена полей изменяются динамически vop1..vop2.... vopN).
Остались проблемы с выводом - не могу вывести данные. Получаю данные через $res = $db->loadObjectList().
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Вывод данных из базы
« Ответ #1 : 12.02.2015, 17:46:42 »
Цитировать
Остались проблемы с выводом - не могу вывести данные. Получаю данные через $res = $db->loadObjectList()
.
Предлагаете нам пошаманить? Код хотя бы приложили, как выводите и в чем проблема.
*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Re: Вывод данных из базы
« Ответ #2 : 12.02.2015, 17:49:39 »
требуется создать несколько однотипных таблиц с разным количеством полей.

А эти поля будут одинаковы в одоих таблицах или они все разные...

Остались проблемы с выводом - не могу вывести данные. Получаю данные через $res = $db->loadObjectList().

А если вот это http://roket.kiev.ua/index.php?option=com_content&view=article&id=36:-joomla&catid=1:articls&Itemid=6
...
*

dv-cto

  • Новичок
  • 9
  • 0 / 0
Re: Вывод данных из базы
« Ответ #3 : 12.02.2015, 19:45:40 »
.
Предлагаете нам пошаманить? Код хотя бы приложили, как выводите и в чем проблема.

нет, просто не стал сразу все кидать, вдруг это в принципе бредовая идея.

сейчас выложу код
*

dv-cto

  • Новичок
  • 9
  • 0 / 0
Re: Вывод данных из базы
« Ответ #4 : 12.02.2015, 20:06:19 »
В общем таблицы вида:
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;

и вторая проблема сейчас обнаружилась - как в методе записи в таблицу получить данные из формы, не зная количество полей. не помню - есть возможность обратиться к форме как к массиву полей и к полям по их номеру?
*

dv-cto

  • Новичок
  • 9
  • 0 / 0
Re: Вывод данных из базы
« Ответ #5 : 12.02.2015, 20:08:45 »
А эти поля будут одинаковы в одоих таблицах или они все разные...

А если вот это http://roket.kiev.ua/index.php?option=com_content&view=article&id=36:-joomla&catid=1:articls&Itemid=6

поля одинаковые по типу данных - числовые.

по ссылке этой ходил и по другим тоже, но не могу понять, чем воспользоваться в моем случае. в других модулях использую loadObjectList, поскольку везде работаю с конкретными таблицами, заранее зная количество и имена полей, а тут динамически надо высчитывать, не могу разобраться.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Re: Вывод данных из базы
« Ответ #6 : 12.02.2015, 21:00:48 »
Цитировать
и вот с выводом у меня проблема - не знаю, как динамически поля ответов вывести

Ну я так понял что вы в результате получаете объект с данными и вам надо подсчитать количество свойств в объекте за вычетом количества статических свойств, типа того может?
Код: php
$quantity = count( (array) $pkInfo ) - 3;
for($i = 1; $i <= $quantity ; $i++)
{
    $propName = 'otv'.$i;
    echo $pkInfo->$propName;
}

Цитировать
и вторая проблема сейчас обнаружилась - как в методе записи в таблицу получить данные из формы, не зная количество полей. не помню - есть возможность обратиться к форме как к массиву полей и к полям по их номеру?

Тоже самое только надо проанализировать $_POST массив. И да, постом можно передавать массивы данных, имена полей должны быть вида "fieldname[]".

В дополнении хочется обратить внимание на плохую читаемость вашего кода. Даже вникать не хочется. Нельзя чтоли переменные называть как то более понятно и подходяще по смыслу? Более того у вас там в запросе sql инъекция прямо таки напрашивается..
« Последнее редактирование: 13.02.2015, 05:19:36 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

DImLaeda

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Вывод данных из базы
« Ответ #7 : 13.02.2015, 08:44:47 »
Ну я так понял что вы в результате получаете объект с данными и вам надо подсчитать количество свойств в объекте за вычетом количества статических свойств, типа того может?
Код: php
$quantity = count( (array) $pkInfo ) - 3;
for($i = 1; $i <= $quantity ; $i++)
{
    $propName = 'otv'.$i;
    echo $pkInfo->$propName;
}
Да, по смыслу так, буду пробовать, спасибо за подсказку.


Тоже самое только надо проанализировать $_POST массив. И да, постом можно передавать массивы данных, имена полей должны быть вида "fieldname[]".

В дополнении хочется обратить внимание на плохую читаемость вашего кода. Даже вникать не хочется. Нельзя чтоли переменные называть как то более понятно и подходяще по смыслу? Более того у вас там в запросе sql инъекция прямо таки напрашивается..

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

а про инъекцию не подскажете поподробнее? в этом не очень пока силен.
*

DImLaeda

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Прописать условие для сохранения данных в БД

Автор semen1707

Ответов: 0
Просмотров: 501
Последний ответ 14.04.2021, 00:59:44
от semen1707
Модель для представления, которое показывает списки данных разных типов

Автор borro

Ответов: 27
Просмотров: 1257
Последний ответ 06.05.2020, 11:57:12
от Septdir
Не занимать место под пустой вывод модуля

Автор platonische

Ответов: 11
Просмотров: 960
Последний ответ 28.04.2020, 07:53:11
от sivers
Связать две таблицы с БД для дальнейшего вывода данных с них

Автор golinejj

Ответов: 16
Просмотров: 1224
Последний ответ 06.02.2020, 15:40:58
от golinejj
Редактирование данных в связанных таблицах

Автор NetFix

Ответов: 1
Просмотров: 779
Последний ответ 19.03.2019, 11:07:10
от platonische