分页MVC PHP

分页MVC PHP,php,model-view-controller,pagination,Php,Model View Controller,Pagination,我想分页。现在我的模型是这样的: class Movies extends Connection{ public function getMovies($offset = null) { $sql = 'SELECT * FROM `movies` ORDER BY `id` DESC'; if ($offset) $sql .= ' LIMIT '.$offset; return $this->query($sql, null, 'all'); } 这是我的控制器 class Con

我想分页。现在我的模型是这样的:

class Movies extends Connection{

public function getMovies($offset = null) {
$sql = 'SELECT * FROM `movies` ORDER BY `id` DESC';
if ($offset) $sql .= ' LIMIT '.$offset;
return $this->query($sql, null, 'all');
}
这是我的控制器

class Controller {

public $movie;
$this->movie = new Movies();
  public function list(){
$movie = $this->movie;
$view = require 'Views/list.php';
}
}
以下是我的看法:

<div class="single mb-5 mt-5">
<div class="container">
<div class="scroll">
<table id="movie_list">
<thead>
<tr>
  <th data-sort="string">Titre <i class="fa fa-sort"></i></th>
  <th data-sort="string">Genre <i class="fa fa-sort"></i></th>
  <th data-sort="string">Date de sortie <i class="fa fa-sort"></i></th>
  <th data-sort="string">Poster <i class="fa fa-sort"></i></th>
  </tr>
</thead>
<tbody>
<?php foreach($movie->getMovies() as $m) { ?>

  <tr>
  <td id="a"><a href="?p=single&id=<?php echo $m['id']; ?>" class="card-link"><?php echo $m['title']; ?></a></td>
  <td id="b"><?php echo $m['genres']; ?></td>
  <td id="a"><?php echo $m['release_date']; ?></td>
  <td id="b"><img class="img-thumbnail img-fluid" src="<?php echo $movie->getPosterPath($m['poster_path'], false, 92, 138); ?>" alt="<?php echo $m['title']; ?>"></td>
  </tr>

 <?php } ?>
 </tbody>
 </table>
 <script>
  $(document).ready(function($) { 
  $("#movie_list").stupidtable();
  }); 
</script>
</div>
</div>
</div>
对于分页,我有以下代码:

$page = (isset($_GET['page']) ? $_GET['page'] : 1);
$perPage = (isset($_GET['per-page']) && ($_GET['per-page']) <= 50 ? $_GET['per-page'] : 5);
$start = ($page > 1) ? ($page * $perPage) - $perPage : 0;


$sql = "select * from movies limit ".$start." , ".$perPage." ";
$total = $db->query("select * from tasks")->num_rows;
$pages = ceil($total / $perPage);

$rows = $db->query($sql);

我曾尝试将分页代码集成到我的代码中,但我被卡住了。你能告诉我怎么做吗?
非常感谢

天哪。请尝试使用一些流行的MVC框架

到目前为止,我对您想要的代码和分页只有一些想法和评论

第一:

这意味着您将要将$offset传递到此方法的某个位置。目前我看不出你在哪里这么做

if ($offset) $sql .= ' LIMIT '.$offset;
这部分有点令人惊讶,因为通常我们需要在查询中传递两个变量OFFSET和LIMIT-to-LIMIT,比如LIMIT 101,20。但你可能会通过$offset=101,20,这可能是一个选项,但对我来说有点奇怪

第二:

请不要再那样做了。您运行此查询只是为了获得$total number记录,但您选择了*,这意味着如果此表中有50列和1M记录,您将从DB server接收到绝大部分数据,而这些数据是您绝对不需要的。因此,您只需从tasks中选择COUNT*作为total,它将只返回一行和一个值

第三:

我不知道您的代码执行的顺序是什么,但由于您在某个地方预先计算了$start,$perPage变量,所以在调用GetMoethod时,您可以/应该将它们传递给您的模型。因此,您将在视图文件中获得如下内容:

<?php foreach($movie->getMovies($start, $limit) as $m) { ?>
附:这不是真正的答案。您应该改进代码并避免sql注入漏洞。但我希望这会给你一些你可以前进的方向

if ($offset) $sql .= ' LIMIT '.$offset;
$total = $db->query("select * from tasks")->num_rows;
$pages = ceil($total / $perPage);
<?php foreach($movie->getMovies($start, $limit) as $m) { ?>
public function getMovies($offset, $limit) {
...
   if ($offset) $sql .= ' LIMIT '.$offset.','$limit;