Сортировка данных MySQL по страницам с ограниченным размером и возможность изменения страниц на экране? Как это сделать?

0

Я новичок в HTML и CSS, однако у меня есть некоторые базовые знания программирования игр на С# и Java (с использованием таких фреймворков, как LibGDX, Unity и т.д.).

Я создал базу данных в MySQL и соответствующий php-код, который отображает html-статью для каждой записи в таблице.

Все работает отлично, но вся база данных загружается на одну большую веб-страницу.

Я много читал, но не могу найти, с чего начать, создавая его на страницах. Единственная идея, которую я могу себе представить сейчас, это то, что мне понадобится поле где-то на моем сайте, чтобы удерживать текущий номер страницы, которую выбрал пользователь, а затем в моей инструкции SQL SELECT используйте эту цифру, чтобы как-то вытащить только 20 страниц, начиная с 'currentPage * 20 'например.

Я нашел небольшие части необходимой мне информации, так как вижу, что может быть предложение LIMIT, которое я могу использовать. Но как можно

SELECT * FROM table ORDER BY id DESC LIMIT (currentPage*20); 

знаете, какая текущая страница находится в index.php? (Если это даже правильный синтаксис/способ записи, о котором я даже не знаю!).

Вот часть моего кода PHP, который я уже должен помочь вам понять, что я имею в виду.

TL; DR: вопрос. Как использовать этот код ниже, но также включить систему подкачки, чтобы отображать только n строк за один раз?

  // create connection
$conn = new mysqli($servername, $username, $password, $dbname);

$currentPage = 0;
$rowsPerPage = 20;
$startRow = $currentPage * $rowsPerPage;

// check connection
if ($conn->connect_error) {
die("connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM games ORDER BY id DESC LIMIT $startRow, $rowsPerPage";
$result = $conn->query($sql);


if ($result->num_rows > 0) 
{
// output data of each row
while($row = $result->fetch_assoc()) 
{
echo '<section class="wrapper style1">';
echo '<div class="inner">';
echo '<header class="align-center">';
echo '<h2>'. $row["title"] . '</h2>';
echo '<div class="image fit">';
echo '<img src='. $row["imglink"] .'>'; 
echo '</div> <p> RELEASE TITLE: ' . $row["title"] . '<br /> DATE POSTED: ' . $row["timestamp"] . '<br /> DESCRIPTION: ' . $row["description"] . '</p>';
echo '<a href="'.$row["downloadlink"].'" target="_blank">Download Link </a> <br />  <a href="downloadhelp.php">click here to learn more</a> <br />  <a href="fileshelp.php">click here for help running the files</a> <br /> <br /> <br />';
$VidLink = $row["vidlink"];
if ($VidLink != 'not found' && $VidLink != '')
{   
    echo '<div class="video-wrapper">'.$row["vidlink"].'</div>';
}
echo '</header>';
echo '</div>';
echo '</section>';
}
} 
else 
{
echo "0 results";
}
$conn->close();
  • 0
    То, что вы ищете, называется «нумерацией страниц», и в Интернете доступно множество статей. Также смотрите вопросы, связанные со stackoverflow: stackoverflow.com/search?q=pagination+php По вашему вопросу текущая страница может быть либо сохранена в параметре GET, например mypage.com/?page=2, и вставлена в ваш запрос MySQL с использованием подготовленных операторов. php.net/manual/en/mysqli.prepare.php или вы можете сохранить текущую страницу в $ _SESSION, если вы не хотите включать ее в URL (я рекомендую URL / GET)
  • 0
    к сожалению, я не могу понять ни одну из документации. Мне нужен пример босоногих, лол. Также довольно грустно, потому что многие веб-сайты, кажется, имеют схожие последствия этого, и поэтому мне кажется, что я заново изобретаю колесо (или пытаюсь хотя бы !!)
Показать ещё 2 комментария
Теги:
select

1 ответ

2
Лучший ответ

Вы можете использовать параметр URL для передачи номера страницы в ваш запрос SQL. Например, каждая ссылка в вашей нумерации страниц может содержать? Page = 1,? Page = 2 и т.д.

Затем посмотрите, установлен ли параметр "page", и используйте его, чтобы получить результаты для данного номера страницы.

Пример:

$rowsPerPage = 20;

if (isset($_GET["page"])) {
  $currentPage = (int) $_GET["page"];
}
else {
  $currentPage = 0;
}

// We need to be careful about SQL injection here
$startRow = $currentPage * $rowsPerPage;
$sql = "SELECT * FROM games ORDER BY id DESC LIMIT $startRow, $rowsPerPage";
$result = $conn->query($sql);

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

Пример:

$sql = "SELECT COUNT(id) FROM games";
$results = mysql_query($sql);
$row = mysql_fetch_row($results);
$recordCount = $row[0];

$totalPages = ceil($recordCount / $rowsPerPage);
$pagination = "<div class='pagination'>";

for ($i = 0; $i <= $totalPages; $i++) {
  $pagination .= "<a href='index.php?page=" . $i . "'>" . $i . "</a>";
}

$pagination .= "</div>";
echo $pagination;
  • 0
    Большое спасибо, приятель. я знал, что был частью пути и что могло быть хорошее простое решение. спасибо вам и другим комментаторам за помощь
  • 0
    К сожалению, я получаю эту ошибку, которая у меня была прошлой ночью также с некоторыми вещами, которые я пробовал. Это связано с устареванием mysql_query (). Устаревший: mysql_query (): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO в H: \ sites \ xyz123 \ www \ index.php в строке 86
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню