사용자 페이지를 매기는 PHP 데이터베이스 작업

실제 프로젝트에서는 구성 파일에 호스트, 사용자 이름, 비밀번호 및 라이브러리를 작성합니다.

코드에 딱딱하게 쓰여져 있고, 데이터베이스 서버의 관련 정보가 변경된다면, 코드를 모두 수정하려는 프로그래머의 생각과 분명히 맞지 않습니다.

또한 모든 페이지에서 데이터베이스에 연결해야 합니다. 우리 모두는 연결을 작성하고, 오류를 판단하고, 문자 세트를 설정해야 하는데 이는 너무 번거롭습니다. 그리고 이러한 코드를 재사용하는 것은 도움이 되지 않습니다.

앞서 언급한 일련의 포함 기능을 사용하여 목표를 달성할 수 있습니다. 예시 그림은 다음과 같습니다.

2015-10-13_561c9c5350f16.png

따라서 구성 파일 config.php를 만들 수 있습니다. 상수로 사용해야 하는 모든 구성을 설정합니다. 코드는 다음과 같습니다.

<?php
//数据库服务器
define('DB_HOST', 'localhost');
//数据库用户名
define('DB_USER', 'root');
//数据库密码
define('DB_PWD', 'secret');
//库名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');
?>

나중에 데이터베이스에 연결해야 할 경우에만 연결하면 됩니다. Connection.php 파일. 코드는 다음과 같습니다.

<?phpinclude 'config.php';$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);if (mysqli_errno($conn)) {    mysqli_error($conn);    exit;}mysqli_set_charset($conn, DB_CHARSET);
?>

향후 각 파일에 Connection.php 파일을 직접 포함시켜 데이터베이스 연결을 구현할 수 있습니다.

include 'connection.php';

위의 준비사항을 모두 마친 후 페이징을 완료해 주세요. 페이지 매김 효과는 다음과 같습니다.

2015-10-13_561c9c536b206.png

페이지에는 다음 기본 요소가 포함되어야 합니다.


元素说明备注
首页最开始进入到页面的第一页用get传参才进去时默认为1
上一页当前页减1如果页码为第一页时减1,为应该为第一页
下一页当前页加1如果为最后一
尾页最后一页总条数除以每页显示数得到总页数
当前页当前所在的页码就是当前的页码
总页数一共有多少个页面总条数除以每页显示数

페이지 번호를 제어할 때 URL 주소 표시줄에 페이지 번호 값을 전달하여 페이지 번호 제어를 구현합니다. page.php에 페이지 번호 관련 정보를 추가하면 보다 효과적인 정보를 산출할 수 있습니다. URL 제어 페이징의 효과는 다음과 같습니다.

QQ截图20161114161938.png

코드 구현에서 이 두 값은 실제로 오프셋(offset)과 수량( num) 페이징 제한 이후.

한계 오프셋, 숫자

页码url中get值limit偏移量,数量
第1页10,5
第2页25,5
第3页310,5
第n页n(n-1)*5,5


페이지당 5개의 항목이 표시된다고 가정합니다. 페이징 제한을 제어하는 ​​최종 공식은 다음과 같습니다.

offset的值为 (n-1)*5
num 为规定的5

코드를 통해 비즈니스를 구현합니다.

1. 페이징에 필요한 매개변수를 계산합니다.

전체 개수

通过查询user表的count(id),得到总数$count。
$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到总的用户数
$count = $data['c'];

현재 페이지

page.php 페이지에 처음 접속하시면 url은 http://www.php.com/page 입니다. .php, 뒤에 no ?page=1 페이지 식별 번호가 있습니다.

따라서 페이지 식별 번호를 수동으로 생성하고 이를 현재 페이지 번호 변수 $page에 전달해야 합니다.

사용자가 전달한 페이지에 소수점이 있을까봐 강제 형식 변환((int) $_GET['page'])을 수행합니다.

첫 번째 작성 방법:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

두 번째 작성 방법

if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}

마지막 페이지

각 페이지는 정수여야 합니다. 마치 초등학교 수학과 같습니다. 평균적으로 5.6명이 사과 몇개를 준비해야 합니다. 답은 6이어야 합니다.

페이지가 20.3페이지로 나오면 반올림 기능 최대치를 사용해야 합니다. 페이지 매기기 수를 21로 설정합니다.

총 페이지 수를 각 페이지에 표시되는 데이터 항목 수로 나누어 총 페이지 수를 구합니다.

//每页显示数
$num = 5;
$total = ceil($count / $num);

이전 페이지, 다음 페이지 예외 제어

첫 페이지에서 이전 페이지를 클릭하고, 마지막 페이지에서 다음 페이지를 클릭하면 어떻게 될까요?

이 경우 데이터가 범위를 초과하여 페이지를 매길 때 데이터가 표시되지 않습니다.

분명히 이러한 특이한 상황을 고려해야 합니다. 따라서 페이징 중에 첫 번째 페이지에서 1을 빼면 이를 첫 번째 페이지로 만듭니다.
마지막 페이지에 하나를 추가하면 마지막 페이지로 만들어 예외처리가 완료됩니다.

if ($page <= 1) {
    $page = 1;
}
if ($page >= $total) {
    $page = $total;
}

2. SQL 문

앞서 페이징의 핵심은 오프셋과 숫자를 통해 각 페이지의 표시를 제어하는 ​​것이라고 말했습니다. SQL 문 번호에 있습니다.

위의 특정 공식도 나열했습니다.

$num = 5;
$offset = ($page - 1) * $num;

SQL 문에 $num 및 $offset을 적용했습니다.

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

Control URI의 페이징 값

echo '<tr>
    <td colspan="5">
    <a href="page.php?page=1">首页</a>
    <a href="page.php?page=' . ($page - 1) . '">上一页</a>
    <a href="page.php?page=' . ($page + 1) . '">下一页</a>
    <a href="page.php?page=' . $total . '">尾页</a>
    当前是第 ' . $page . '页  共' . $total . '页
    </td>
    </tr>';

마침내 전체 비즈니스를 연결하여 최종 효과를 얻습니다.

include 'connection.php';


$count_sql = 'select count(id) as c from user';

$result = mysqli_query($conn, $count_sql);

$data = mysqli_fetch_assoc($result);

//得到总的用户数
$count = $data['c'];

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

/*
if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}
 */

//每页显示数

$num = 5;

//得到总页数
$total = ceil($count / $num);

if ($page <= 1) {
    $page = 1;
}

if ($page >= $total) {
    $page = $total;
}


$offset = ($page - 1) * $num;

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

$result = mysqli_query($conn, $sql);

if ($result && mysqli_num_rows($result)) {

    //存在数据则循环将数据显示出来

    echo '<table width="800" border="1">';

    while ($row = mysqli_fetch_assoc($result)) {

        echo '<tr>';

        echo '<td>' . $row['username'] . '</td>';
        echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
        echo '<td>' . long2ip($row['createip']) . '</td>';
        echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>';
        echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>';

        echo '</tr>';
    }

    echo '<tr><td colspan="5"><a href="page.php?page=1">首页</a>  <a href="page.php?page=' . ($page - 1) . '">上一页</a>   <a href="page.php?page=' . ($page + 1) . '">下一页</a>  <a href="page.php?page=' . $total . '">尾页</a>  当前是第 ' . $page . '页  共' . $total . '页 </td></tr>';

    echo '</table>';

} else {
    echo '没有数据';
}

mysqli_close($conn);


지속적인 학습
||
<?php $num = 5; $offset = ($page - 1) * $num; //我们将$num和$offset应用于SQL语句中: $sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num"; //控制好URI中的分页值 echo '<tr> <td colspan="5"> <a href="page.php?page=1">首页</a> <a href="page.php?page=' . ($page - 1) . '">上一页</a> <a href="page.php?page=' . ($page + 1) . '">下一页</a> <a href="page.php?page=' . $total . '">尾页</a> 当前是第 ' . $page . '页 共' . $total . '页 </td> </tr>'; //我们最后将整体业务串联起来实现最终效果,代码如下: include 'connection.php'; $count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到总的用户数 $count = $data['c']; $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; /* if (isset($_GET['page'])) { $page = (int) $_GET['page']; } else { $page = 1; } */ //每页显示数 $num = 5; //得到总页数 $total = ceil($count / $num); if ($page <= 1) { $page = 1; } if ($page >= $total) { $page = $total; } $offset = ($page - 1) * $num; $sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num"; $result = mysqli_query($conn, $sql); if ($result && mysqli_num_rows($result)) { //存在数据则循环将数据显示出来 echo '<table width="800" border="1">'; while ($row = mysqli_fetch_assoc($result)) { echo '<tr>'; echo '<td>' . $row['username'] . '</td>'; echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>'; echo '<td>' . long2ip($row['createip']) . '</td>'; echo '<td><a href="edit.php?id=' . $row['id'] . '">编辑用户</a></td>'; echo '<td><a href="delete.php?id=' . $row['id'] . '">删除用户</a></td>'; echo '</tr>'; } echo '<tr><td colspan="5"><a href="page.php?page=1">首页</a> <a href="page.php?page=' . ($page - 1) . '">上一页</a> <a href="page.php?page=' . ($page + 1) . '">下一页</a> <a href="page.php?page=' . $total . '">尾页</a> 当前是第 ' . $page . '页 共' . $total . '页 </td></tr>'; echo '</table>'; } else { echo '没有数据'; } mysqli_close($conn); ?>
  • 코스 추천
  • 코스웨어 다운로드
현재 코스웨어를 다운로드할 수 없습니다. 현재 직원들이 정리하고 있습니다. 앞으로도 본 강좌에 많은 관심 부탁드립니다~