@lemonlimelike

Почему не получается пагинация?

Пишу сайт, и нужно на сайте сделать пагинацию, вроде что то получается, но все не так...
Вот я вывожу данные, данные вывожу отдельно
<?php
$movie = mysqli_query($connection, "SELECT * FROM `video` ORDER BY 'id'");
	$mov = array();
	while($row = mysqli_fetch_array($movie)){
		$mov[] = $row;
	}
?>

<?php foreach ($mov as $m): ?>
		          <li>
		          	<div class="desc">
			            <a href="#">
			            	<img src="media/img/<?php echo $m['img'].'.jpg' ?>" width="240" height="160"/>
			           	 	<span class="vieo_time"></span></a>
			        </div>   	 	

				            <div class="video_name">
					              <a href="#" title="<?php echo $m['title']; ?>"><?php echo $m['title']; ?></a></div>
					        <span class="views">Просмотров: <?php echo $m['views']; ?></span>

		          </li>
		       <?php endforeach; ?>


А еще ниже, возле footer, у меня идет пагинация.
Вот:
<?php
	$items = array_values($mov);
	$count = 19;

	$p = isset($_GET["p"]) ? (int)$_GET["p"] : 0;

	for($i = $p*$count; $i < ($p+1)*$count; $i++){
	 echo "<p>",$items[$i];
	}

	$len = floor( count($items) / $count);
?>
<div id="page">
	<ul>
		 <? for($i = 0; $i <= $len; $i++){ ?>
    		<li><a href="?p=<?= $i ?>"><?= $i + 1 ?></a></li>
  		<? } ?>
	</ul>
</div>


Но выводится просто Array, но это пустяк, суть в том, что на странице должны быть 19 видео, а остальное на след. страницах, но оно так почему-то не работает, все видео на главной странице.
Как это исправить? Пишу, потому что не могу понять как работает пагинация и просто нашел в гугле этот код, и вставил себе, если бы знал как писать написал бы.
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
Stalker_RED
@Stalker_RED
Вам пригодятся LIMIT и OFFSET

Запрос
SELECT * FROM `video` ORDER BY 'id' LIMIT 5 OFFSET 10
вернет результаты с одиннадцатого по пятнадцатый. Limit = сколько выбрать результатов, offset - сколько пропустить.

$results_per_page = 19;
$page = isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1; // если страница не указана, то будет 1
$limit = $results_per_page;
$offset = $results_per_page * ($page - 1); // для вторй страницы отступ будет 19, для третьей - 38 и так далее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
twobomb
@twobomb
Пример ссылки localhost?limit=19&offset=0
limit - Кол-во видео
offset- смещение
<?PHP
    $offset = isset($_GET["offset"])?$_GET["offset"]:0;
    $limit = isset($_GET["limit"])?$_GET["limit"]:19;
    $movie = mysqli_query($connection, "SELECT * FROM `video` ORDER BY 'id' LIMIT ".$limit." OFFSET ".$offset);
  $mov = array();
  while($row = mysqli_fetch_array($movie))
      array_push($mov,$row);
    
    foreach ($mov as $m): ?>
              <li>
              	<div class="desc">
                  <a href="#">
                  	<img src="media/img/<?php echo $m['img'].'.jpg' ?>" width="240" height="160"/>
                 	 	<span class="vieo_time"></span></a>
              </div>   	 	

                    <div class="video_name">
                        <a href="#" title="<?php echo $m['title']; ?>"><?php echo $m['title']; ?></a></div>
                  <span class="views">Просмотров: <?php echo $m['views']; ?></span>

              </li>
           <?php endforeach; ?>
           
<div id="page">
  <ul>
     <?php
        
    $res = mysqli_query($connection, "SELECT CEILING(COUNT(id)/".$limit.") FROM video");
      $len = mysqli_fetch_row($res)[0];
      for($i = 0; $i < $len; $i++)
    		echo "<li><a href='?limit=$limit&offset=".($limit*$i)."'>". ($i + 1)." </a></li>";
  		 ?>
  </ul>
</div>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы