Вывод всех строк таблицы через while (fetch_object())
Добрый день.
Проблема у меня видимо с непониманием
Подскажите плз, почему такой код выводит только последнюю строку из таблицы:
Проблема у меня видимо с непониманием
while ($full = $fullresult->fetch_object())Подскажите плз, почему такой код выводит только последнюю строку из таблицы:
$mysqli = new mysqli( $host,
$username,
$password,
$dbname,
$port,
$charset
);
$queryfull = "SELECT `Users`.`ID` AS `ID`,
`Users`.`Name`,
`Mail`,
`Position`,
`Department`,
`WorkPhone`,
`Cellphone`,
((DAYOFMONTH(Birthday) = DAYOFMONTH(NOW()))
& (MONTH(Birthday) = MONTH(NOW())))
AS bday
FROM `erp`.`Users`
WHERE NOT Fired AND Department != ''
ORDER BY `Department`, `Name`";
$fullresult = $mysqli->query($queryfull);
while ($full = $fullresult->fetch_object())
{
if ($dept != $full->Department)
{
$dept = $full->Department;
}
$phone = $full->WorkPhone != 0 ? $full->WorkPhone : '';
$position = $full->Position;
$id = $full->ID;
$name = $full->Name;
$cellphone = $full->Cellphone;
$mail = $full->Mail;
}
echo "
<div class=\"uk-panel uk-panel-box uk-panel-contents uk-container\">";
echo "
<div class=\"uk-align-center uk-card uk-card-default uk-card-body uk-card-hover uk-overflow-auto\">";
echo "
<table class=\"uk-table uk-table-hover uk-table-small uk-margin-small uk-table-responsive\" border=0 width=\"100%\">";
echo "
<tr align=\"center\">
<td class=\"uk-text-emphasis\" colspan=5>
<h3 class=\"uk-heading-line uk-text-center\"><span>" . $dept . "</span></h1>
</td>
</tr>";
echo "
<tr align=\"left\" onMouseOver=\"className='hilighton';\" onmouseout=\"className='hilightoff';\">
<td>
<div uk-lightbox>
<a class=\"uk-text-emphasis\" uk-tooltip=\"title: Посмотреть профиль; pos: top-left\" href='[[~3]]?userid=$id' data-type=\"iframe\">" . $name . "</a>
</div>
</td>
<td>" . $position . "</td>
<td align=\"center\">" . $cellphone . "</td>
<td>
<a class=\"uk-text-emphasis\" uk-tooltip=\"title: Позвонить; pos: top-center\" href=callto:" . $phone . ">" . $phone . "</a>
</td>
<td>
<a class=\"uk-icon-link\" uk-tooltip=\"Написать письмо\" uk-icon=\"mail\" href=mailto:" . $mail . "></a>
</td>
</tr>";
echo "
</table>";А вот такой, выводит все:$mysqli = new mysqli( $host,
$username,
$password,
$dbname,
$port,
$charset
);
$queryfull = "SELECT `Users`.`ID` AS `ID`,
`Users`.`Name`,
`Mail`,
`Position`,
`Department`,
`WorkPhone`,
`Cellphone`,
((DAYOFMONTH(Birthday) = DAYOFMONTH(NOW()))
& (MONTH(Birthday) = MONTH(NOW())))
AS bday
FROM `erp`.`Users`
WHERE NOT Fired AND Department != ''
ORDER BY `Department`, `Name`";
$fullresult = $mysqli->query($queryfull);
echo "
<div class=\"uk-panel uk-panel-box uk-panel-contents uk-container\">";
echo "
<div class=\"uk-align-center uk-card uk-card-default uk-card-body uk-card-hover uk-overflow-auto\">";
echo "
<table class=\"uk-table uk-table-hover uk-table-small uk-margin-small uk-table-responsive\" border=0 width=\"100%\">";
while ($full = $fullresult->fetch_object())
{
if ($dept != $full->Department)
{
$dept = $full->Department;
echo "
<tr align=\"center\">
<td class=\"uk-text-emphasis\" colspan=5>
<h3 class=\"uk-heading-line uk-text-center\"><span>" . $dept . "</span></h1>
</td>
</tr>";
}
$phone = $full->WorkPhone != 0 ? $full->WorkPhone : '';
echo "
<tr align=\"left\" onMouseOver=\"className='hilighton';\" onmouseout=\"className='hilightoff';\">
<td>
<div uk-lightbox>
<a class=\"uk-text-emphasis\" uk-tooltip=\"title: Посмотреть профиль; pos: top-left\" href='[[~3]]?userid=$full->ID' data-type=\"iframe\">" . $full->Name . "</a>
</div>
</td>
<td>" . $full->Position . "</td>
<td align=\"center\">" . $full->Cellphone . "</td>
<td>
<a class=\"uk-text-emphasis\" uk-tooltip=\"title: Позвонить; pos: top-center\" href=callto:" . $phone . ">" . $phone . "</a>
</td>
<td>
<a class=\"uk-icon-link\" uk-tooltip=\"Написать письмо\" uk-icon=\"mail\" href=mailto:" . $full->Mail . "></a>
</td>
</tr>";
}
echo "
</table>";Как это можно решить, не используя куча html в снипете? Комментарии: 19
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Сниппет:
Чанк:
На счет кода HTML в сниппете, тут нужно использовать parseChunk передавая ему массив данных. И так же рекоменду использовать Fenom, а не стандартный MODX шаблонизатор
В сниппет:
Сам чанк примерно
Самый простой «переходный» вот такой
Более расширенный вариант
Больше примеров вы можете посмотреть здесь
modzone.ru/blog/2016/02/04/database-queries-using-pdo/
Это то, что касается чистых SQL запросов. Но компоненты и Ядро MODX используют конструктор запросов и XPDO. Это несколько сложнее и требует чтения документации
disk.yandex.ru/i/xk1UBRLB8wXLTA
в целом установление плейсхолдеров совсем не нужно.
Ниже код сниппета и чанка, а так же вызов.
Код чанка userChunk пример
ну и все, остается только вызывать сниппет на странице
по итогу должна вывестись таблица
Ну и совсем простое решение, есть уже готовый сниппет вывода именно пользователей MODX
Вызовете его с пустым tpl и он вам выведет массивы пользователей disk.yandex.ru/i/VVER1xAv2Pn30A
на эту строку ошибка ведет
гугл есть
Пространство имен появилось только в MODX3
pdoTools для MODX3 также есть и работает, но там другие классы. Кроме того сервисы в MODX3 вызываются по другому.
Итого вот такой код
мы можем преобразовать примерно вот так