【问题标题】:Pagination with rows by week按周分页
【发布时间】:2016-10-24 12:55:13
【问题描述】:

我正在使用以下代码将分页应用于我数据库中的一个大表。它工作正常但是我不知道如何在SELECT Query 中应用WHERE Week="?"(表中的52 周)和$start $limit 变量。这样,当我点击 PREVIOUS 或 NEXT 按钮时,它会转到该周的上一周或下一周的行。

<div id="content">
<?php
include("dbconfig.php");
$start=0;
$limit=10;

if(isset($_GET['id']))
{
    $id=$_GET['id'];
    $start=($id-1)*$limit;
}
else{
    $id=1;
}
//Fetch from database first 10 items which is its limit. For that when
page open you can see first 10 items. 
$query=mysqli_query($dbconfig,"select * from user LIMIT $start, $limit");
?>
<ul>
<?php
//print 10 items
while($result=mysqli_fetch_array($query))
{
    echo "<li>".$result['username']."</li>";
}
?>
</ul>
<?php
//fetch all the data from database.
$rows=mysqli_num_rows(mysqli_query($dbconfig,"select * from user"));
//calculate total page number for the given table in the database 
$total=ceil($rows/$limit);
if($id>1)
{
    //Go to previous page to show previous 10 items. If its in page 1 then it is inactive
    echo "<a href='?id=".($id-1)."' class='button'>PREVIOUS</a>";
}
if($id!=$total)
{
    ////Go to previous page to show next 10 items.
    echo "<a href='?id=".($id+1)."' class='button'>NEXT</a>";
}
?>
<ul class='page'>
<?php
//show all the page link with page number. When click on these numbers go     to particular page. 
        for($i=1;$i<=$total;$i++)
        {
            if($i==$id) { echo "<li class='current'>".$i."</li>"; }

            else { echo "<li><a href='?id=".$i."'>".$i."</a></li>"; }
        }
?>
</ul>
</div>

【问题讨论】:

    标签: php html mysqli pagination


    【解决方案1】:

    您可能会在几周内寻找一个选择框,然后在 where 子句中使用该值。

    <select name="weeks">
        <?php 
            for( $i = 1; $i <= 52; $i++ ):
                echo '<option name="week" value="'.$i.'"></option>';
            endfor;
        ?>
    </select>
    

    查询:

    $mysqli = dbConnect();
    $stmt   = $mysqli->prepare( $sql );
    
    if( !empty( $_POST['weeks'] ) ):
        $week = $_POST['week'];
    
        // Validate the data
    
        $week = trim( $week );
        $week = htmlspecialchars( $week );
    
        if( !ctype_digit( $week ) ):
            echo 'Week is not a valid input';
        else:
            // Prepared statement
    
            $sql = "SELECT * FROM user WHERE week = ? LIMIT ?, ?";
            $stmt->bind_param("iii", $week, $start, $limit);
    
        endif;
    
    else:
        $sql = "SELECT * FROM user LIMIT ?, ?";
        $stmt->bind_param("ii", $start, $limit);
    endif;
    
    $stmt->execute();
    $stmt->bind_result(yourparamshere);
    
    $stmt->close();
    $mysqli->close();
    

    注意:

    请看http://php.net/manual/en/pdo.prepared-statements.php

    准备好的语句和存储过程更省钱,会让你成为更好的程序员。

    【讨论】:

    • 你为什么不自己看看准备好的陈述?
    • 你为什么不自己回答这个问题呢?只是想在这里提供帮助。
    • 您使这段代码易受 SQL 注入攻击。我怀疑它可以称为帮助。
    • 注入攻击是我所担心的。我在所有其他查询中都使用 PDO,但是这个让我很难过。我必须以某种方式在 SELECT 查询中绑定每个每周变量(来自上一个/下一个按钮)。
    • 我编辑了我的答案。您的上一个/下一个按钮是几周还是页面?还是两者兼而有之?
    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多