paging — PHP Pagination: кнопки «Предыдущая» и «Следующая» работают, но таблица не отображается

Я следую примеру PHP-пейджинга с ODBC в Интернете и изменяю их в соответствии со своим собственным использованием.

Мне удалось сделать, чтобы NEXT а также PREVIOUS работал. URL страницы изменится, когда NEXT или же PREVIOUS нажата. Например, когда я нажал NEXT это URL localhost/mypage.php?page=2,

Проблема здесь в том, что таблица данных не будет отображаться.

Это мой код:

function inv_rows($r1)
{
ob_start();
(int)$number = odbc_result_all($r1);
ob_clean();
return $number;
}

$page = isset($_GET["page"]) ? $_GET["page"] : 1;

if(empty($page)){$page = 1;
}
$query = "SELECT UserId, UserNm FROM User";
$num_result = odbc_exec($db, $query);
$numrows = inv_rows($num_result);

$limit = 10;
$offset = ($page - 1) * $limit;

$sql = odbc_exec($conn,"SELECT UserId, UserNm FROM User LIMIT $limit OFFSET $offset");$result = odbc_exec($db, $sql);

echo "<table style='width: 600;'>";

while(odbc_fetch_row($result))
{
echo "<tr>
<td style='width: 300; height: 15px;>";
echo odbc_result_all($result, "UserId");
echo "</td>
<td style='width: 300; height: 15px;'>";
echo odbc_result_all($result, "UserNm");
echo "</td>
</tr>";
}

echo "</table>";
if($page !=1)
{
$pageprev = $page - 1;
echo "<a href='paging2.php?page=$pageprev' style='text-decoration: none'>&nbsp; PREVIOUS&nbsp;</a>";
}
else
{
echo "&nbsp; PREVIOUS &nbsp;";
}

if(($numrows - ($limit * $page)) > 0)
{
$pagenext = $page + 1;
echo "<a href='paging2.php?page=$pagenext' style='text-decoration: none'>NEXT</a>"; }
else
{
echo "&nbsp; NEXT &nbsp;";
}

odbc_free_result($result);
exit;
?>

Я уверен, что что-то упустил. Пожалуйста, ведите меня. Спасибо.

0

Решение

You must try and use the $offset variable in your query.

<?php
function inv_rows($r1)
{
ob_start();
(int)$number = odbc_result_all($r1);
ob_clean();
return $number;
}

$page = isset($_GET["page"]) ? $_GET["page"] : 1;

if(empty($page)){$page = 1;
}
$query = "SELECT UserId, UserNm FROM User";
$num_result = odbc_exec($db, $query);
$numrows = inv_rows($num_result);

$limit = 10;
$offset = ($page - 1) * $limit;

$sql = "SELECT UserId, UserNm FROM User LIMIT 10 OFFSET $offset";$result = odbc_exec($db, $sql);

echo "<table style='width: 600;'>";

while(odbc_fetch_row($result))
{
echo "<tr>
<td style='width: 300; height: 15px;>";
echo odbc_result_all($result, "UserId");
echo "</td>
<td style='width: 300; height: 15px;'>";
echo odbc_result_all($result, "UserNm");
echo "</td>
</tr>";
}

echo "</table>";
if($page !=1)
{
$pageprev = $page - 1;
echo "<a href='paging2.php?page=$pageprev' style='text-decoration: none'>&nbsp; PREVIOUS&nbsp;</a>";
}
else
{
echo "&nbsp; PREVIOUS &nbsp;";
}

if(($numrows - ($limit * $page)) > 0)
{
$pagenext = $page + 1;
echo "<a href='paging2.php?page=$pagenext' style='text-decoration: none'>NEXT</a>"; }
else
{
echo "&nbsp; NEXT &nbsp;";
}

odbc_free_result($result);
exit;
?>
0

Другие решения

  1. Код в вашей функции while имеет необработанный HTML и открывает <?php теги скрипта для кода PHP. Поскольку вы уже находитесь в контексте PHP, все должно быть наоборот — нет необходимости открывать и закрывать <?php теги и HTML должны быть напечатаны с помощью PHP echo команда.
  2. <table> тег должен находиться за пределами вашей функции while. Вы не хотите печатать таблицу для каждой строки.

Обновить:

  1. Является $conn правильно определены? Является $db правильно определены?
  2. Есть ли $result на самом деле содержат строки, которые вас интересуют?

Это должно напечатать строку заголовка для вашей таблицы. Если данные строки не распечатаны, проверьте результат запроса.

echo "<table style='width: 600;'>";
echo "<thead><tr><th>User ID</th><th>User Name</th></tr></thead><tbody>";

while(odbc_fetch_row($result))
{
echo "<tr><td style='width: 300; height: 15px';>".odbc_result($result, 'UserId')."</td><td style='width: 300; height: 15px;'>".odbc_result($result, 'UserNm')."</td></tr>";
}

echo "</tbody></table>";
0

По вопросам рекламы [email protected]