Php 打印结果以在多个页面上查看结果

Php 打印结果以在多个页面上查看结果,php,html,mysql,pdo,Php,Html,Mysql,Pdo,我正在尝试创建一段代码,将我的查询结果限制在例如每页2个结果,其余的结果可以通过点击一个页码来查看,这与谷歌的搜索功能完全相同,因此如果我想要更多的结果,我只需进入第2页。如何使用PhP实现这一点。没有javascript <!DOCTYPE html> <html> <head> <title>Database</title> <link href="style.css" rel="sty

我正在尝试创建一段代码,将我的查询结果限制在例如每页2个结果,其余的结果可以通过点击一个页码来查看,这与谷歌的搜索功能完全相同,因此如果我想要更多的结果,我只需进入第2页。如何使用PhP实现这一点。没有javascript

<!DOCTYPE html>
<html>
    <head>
        <title>Database</title>
        <link href="style.css" rel="stylesheet" type="text/css"> <!-- This is linking style sheet (css)into this HTML page-->
        <link href='https://fonts.googleapis.com/css?family=PT+Serif:400italic' rel='stylesheet' type='text/css'>
    </head>
    <body>
    <div class="navigation">
        <form action="index.php" method="get">
            <input type="submit" name="mainpage" value="Main Page" class="submitbut" id="but1" />
        </form>
    </div>
    <form action="index.php" method="post">
        <input type="text" name="search" id="searching" />
        <input type="submit" name="data_submit" value="Search" id="scan" />
    </form>

<?php

if( isset( $_GET['mainpage'] ) ) exit( header( "Location: mainpage.php" ) );

if ( isset( $_POST["data_submit"] ) ){
$search_term = ( $_POST['search']);
if($search_term == ""){
    echo "You need to enter a value";
}else{
$conn = new PDO( 'mysql:host=localhost;dbname=u1358595', 'root' );
/*
 replace root with this
 'u1358595'
 '26nov94'
*/
$stmt = $conn->prepare("SELECT * FROM `guest` g
                       INNER JOIN `booking` b ON g.`guest_id`=b.`guest_id`
                       INNER JOIN `hotel` h ON b.`hotel_id`=h.`hotel_id`
                       WHERE g.`last_name` LIKE :search_term OR g.`first_name` LIKE :search_term;");
$stmt->bindValue(':search_term', '%' . $search_term . '%');
$stmt->execute();


$count=($stmt->rowCount());
echo "There are ".$count." results that match your search";

    echo "
    <table>
    <tr>  
    <th>Guests Matched</th>
    </tr>";

while($hotel = $stmt->fetch()) {
    echo "
    <tr>
    <td><a href='details.php?name=".$hotel['last_name']."'>".$hotel['first_name']." ".$hotel['last_name']."</a></td>
    </tr>";
}
echo "</table>";

$conn = NULL;
}
    }
?>
</body>
</html>

数据库

在SQL中,使用
限制
子句:

直接从文档:
[限制{[offset,]row_count | row_count offset offset}]

因此,在您的示例中,您将执行以下操作:

$results_per_page = 24;
$current_page = isset($_GET['page']) ? (int) $_GET['page'] : 0;

$stmt = $conn->prepare("SELECT * FROM `guest` g
                       INNER JOIN `booking` b ON g.`guest_id`=b.`guest_id`
                       INNER JOIN `hotel` h ON b.`hotel_id`=h.`hotel_id`
                       WHERE g.`last_name` LIKE :search_term OR g.`first_name` LIKE :search_term
                       LIMIT :offset, :row_count");

$stmt->bindValue(':search_term', '%' . $search_term . '%');
$stmt->bindValue(':offset', ($current_page * $results_per_page));
$stmt->bindValue(':row_count', $results_per_page);
$stmt->execute();
使用
$\u GET
变量更改页面:

关于总结果的计数,您必须运行另一个查询来选择该搜索查询的所有结果,但只返回
count(*)
输出:

SELECT COUNT(*) FROM `guest` g
INNER JOIN `booking` b ON g.`guest_id`=b.`guest_id`
INNER JOIN `hotel` h ON b.`hotel_id`=h.`hotel_id`
WHERE g.`last_name` LIKE :search_term OR g.`first_name` LIKE :search_term

请注意,虽然您在生产环境中使用准备好的语句是完全正确的,但我更喜欢在开发过程中避免使用这些语句,以便更容易响应发送到mysql的实际查询。在这种情况下,如果您理解了我的意思,如果我正确理解您的问题,您将如何使用$\u GET在同一页面上更改页面,您可以使用
$\u GET['page']
变量查看当前页面是否为该页面,并且不要使该链接可单击。如果这就是您问题的答案,请详细说明。我正在尝试显示例如每页1个结果,因此结果1位于第1页,然后如果我单击链接2,它将带我到同一页,但有第二个结果,除此之外,如果您尝试更改每页的结果数,我和您都会觉得不错,只需将
$results\u per_page
变量更改为1即可(我已更新了变量名称,以便于理解)。