Ниже вы можете увидеть скрипт, который я пробую на моем сайте. Все работает, но я вижу только одну и ту же запись 5 раз на каждой странице, всегда запись 1. Что я делаю не так, потому что он не идет ко второй записи?
Спасибо за совет
<?php$per_page = 5;
$query = "SELECT * FROM article";
$mysqli = mysqli_connect("localhost", "root", "******", "Website");
$res = mysqli_query($mysqli, $query);
$row = mysqli_fetch_assoc($res);
$total_results = mysqli_num_rows($res);
$total_pages = ceil($total_results / $per_page);
if (isset($_GET['page']) && is_numeric($_GET['page']))
{
$show_page = $_GET['page'];
if ($show_page > 0 && $show_page <= $total_pages)
{
$start = ($show_page -1) * $per_page;
$end = $start + $per_page;
}
else
{
// error - show first set of results
$start = 0;
$end = $per_page;
}
}
else
{
$start = 0;
$end = $per_page;
}echo "<p><a href='articles.php'>view All</a> | <b>By Page:</b> ";
for ($i = 1; $i <= $total_pages; $i++)
{
echo "<a href='articlespagenated.php?page=$i'>$i</a> ";
}
echo "</p>";
echo "</p>";
echo "<table border='1' cellpadding='10'>";
echo "<tr> <th>ArtID</th> <th>Art Pictureto</th> <th></th> <th></th></tr>";
for ($i = $start; $i < $end; $i++) {
if ($i == $total_results) { break; }
echo "<tr>";
echo '<td width="40" align="center" valign="middle">' . $row['artid'] . '</td>';
echo '<td width="130" align="center" valign="middle">' . $row['artfoto'] . '</td>';
echo '<td width="40" align="center" valign="middle"><a href="articleedit.php?artid=' . $row['artid'] . '">Edit</a></td>';
echo '<td width="40" align="center" valign="middle"><a href="artikcledelete.php?artid=' . $row['artid'] . '">Delete</a></td>';
echo "</tr>";
}
echo "</table>";
?>
Проблема в том, что вы берете только первый ряд:
$query = "SELECT * FROM article";
$mysqli = mysqli_connect("localhost", "root", "******", "Website");
$res = mysqli_query($mysqli, $query);
$row = mysqli_fetch_assoc($res);
То, что вы хотите, это зациклить mysqli_fetch_assoc
:
$query = "SELECT * FROM article";
$mysqli = mysqli_connect("localhost", "root", "******", "Website");
$res = mysqli_query($mysqli, $query);
$rows = [];
while (($row = mysqli_fetch_assoc($res)) !== null) {
$rows[] = $row;
}
Тогда ты можешь foreach()
над $rows
выводить ваши данные.
Для нумерации страниц я бы рекомендовал использовать MySQL LIMIT
а также OFFSET
функции:
$page = 2;
$rows_per_page = 5;
$offset = $page * $rows_per_page;
$query = "SELECT * FROM article LIMIT $rows_per_page OFFSET $offset";
$mysqli = mysqli_connect("localhost", "root", "******", "Website");
$res = mysqli_query($mysqli, $query);
$rows = [];
while (($row = mysqli_fetch_assoc($res)) !== null) {
$rows[] = $row;
}
Просто убедитесь, что вы дезинфицируете $page
если вы получаете это от пользователя, или посмотрите на подготовленные заявления.
Других решений пока нет …