如何创建一系列网页

时间:2014-09-14 10:38:15

标签: php mysql ajax

通过一系列页面,我指的是可以使用上一页下一页 1 2 <导航到的页面/ kbd>, 3 ... 内容是10首歌曲的列表,要查看更多用户,只需点击 Next 即可。我打算使用PHP和MySQL。我需要你对如何去做的意见(没有明确要求代码,但个人意见可以补充代码)。谢谢!

2 个答案:

答案 0 :(得分:1)

MySQL提供了LIMIT X,Y关键字,它已完成大部分工作。 X始终是起始位置,Y是要选择的行数。

例如,如果您有搜索表单,并且用户搜索了类型 pop 的歌曲,您可以执行SELECT name, artist, ... FROM songs WHERE genre = 'pop' LIMIT 0,10之类的操作。这将从位置0开始返回搜索结果的10首歌曲。这将是您的页面1.对于第2页,您只需使用LIMIT 10,10再次运行相同的查询。

使用此功能,您可以创建上一页下一页按钮:

<强> HTML

<a href="search.php?query=pop&page=1">Previous</a>
<a href="search.php?query=pop&page=3">Next</a>

<强> PHP

$page = isset($_GET['page']) ? intval($_GET['page'] : 1;
$start = ($page - 1) * 10;
$query = "SELECT name, artist, ... FROM songs WHERE genre = 'pop' LIMIT $start,10";

答案 1 :(得分:1)

这种技术称为分页。这是一个PHP帮助程序类,可以帮助您进行分页:

<?php

// This is a helper class to make paginating 
// records easy.
class Pagination {

  public $current_page;
  public $per_page;
  public $total_count;

  public function __construct($page=1, $per_page=20, $total_count=0){
    $this->current_page = (int)$page;
    $this->per_page = (int)$per_page;
    $this->total_count = (int)$total_count;
  }

  public function offset() {
    // Assuming 20 items per page:
    // page 1 has an offset of 0    (1-1) * 20
    // page 2 has an offset of 20   (2-1) * 20
    //   in other words, page 2 starts with item 21
    return ($this->current_page - 1) * $this->per_page;
  }

  public function total_pages() {
    return ceil($this->total_count/$this->per_page);
    }

  public function previous_page() {
    return $this->current_page - 1;
  }

  public function next_page() {
    return $this->current_page + 1;
  }

    public function has_previous_page() {
        return $this->previous_page() >= 1 ? true : false;
    }

    public function has_next_page() {
        return $this->next_page() <= $this->total_pages() ? true : false;
    }


}

?>

用于构建SQL

$total_count = $db->get_var( "SELECT COUNT(*) FROM songs" );
$per_page = 10;
$current_page = $page;
$pagination = new Pagination($current_page, $per_page, $total_count);
$all = $db->get_results("SELECT * FROM songs ORDER BY id DESC LIMIT {$per_page} OFFSET {$pagination->offset()}");