【问题标题】:pagination is not working after first page while using Where使用 Where 时,第一页后分页不起作用
【发布时间】:2015-07-26 16:58:37
【问题描述】:

我正在尝试列出数据库中的数据,并且我想列出特定类别,所以我使用 WHERE 语句。我在第一页得到了正确的结果,但是当我点击第二页时它什么也没显示

<?php 

 include('dbconfig.inc.php');
        $id=$_GET['id'];

        $query = "SELECT * FROM distdb WHERE BANK_ID = '$id'";       
        $records_per_page=10;
        $newquery = $paginate->paging($query,$records_per_page);
        $paginate->dataview($newquery);
        $paginate->paginglink($query,$records_per_page);        
        ?>

还有我的 Pagination.php

<?php

class paginate
{
    private $db;

    function __construct($dbh)
    {
        $this->db = $dbh;
    }

    public function dataview($query)
    {
        $stmt = $this->db->prepare($query);
        $stmt->execute();

        if($stmt->rowCount()>0)
        {
            while($row=$stmt->fetch(PDO::FETCH_ASSOC))
            {

    $bank = $row['BANK'];
    $ifsc = $row['IFSC'];
    $branch= $row['BRANCH'];
    $micr = $row['MICR_CODE'];
    $address = $row['ADDRESS'];
    $contact = $row['CONTACT'];
    $city = $row['CITY'];
    $district = $row['DISTRICT'];
    $state = $row['STATE'];

    $bankcode=$row['IFSC'];
    $brcode = substr($bankcode, -6);
                ?>
                <tr>
    <td width="21%"><?=$bank?></td> 
       <td width="20%"><?=$branch?></td>
       <td width="20%"><b>IFSC:</b><?=$ifsc?> <br /><b>MICR:</b><?=$micr?><br /><b>Branch Code:</b><?=$brcode?></td>
       <td width="24%"><?=$address?><br /> <b>City :</b><?=$city?> <br /> <b>District :</b><?=$district?> <br /> <b>State:</b> <?=$state?></td> 
       <td width="15%"><?=$contact?></td>
  </tr>


                <?php
            }
        }
        else
        {
            ?>
            <tr>
            <td>Nothing here...</td>
            </tr>
            <?php
        }

    }

    public function paging($query,$records_per_page)
    {
        $starting_position=0;
        if(isset($_GET["page_no"]))
        {
            $starting_position=($_GET["page_no"]-1)*$records_per_page;
        }
        $query2=$query." limit $starting_position,$records_per_page";
        return $query2;
    }

    public function paginglink($query,$records_per_page)
    {

        $self = $_SERVER['PHP_SELF'];

        $stmt = $this->db->prepare($query);
        $stmt->execute();

        $total_no_of_records = $stmt->rowCount();

        if($total_no_of_records > 0)
        {
            ?><tr><td colspan="3"><?php
            $total_no_of_pages=ceil($total_no_of_records/$records_per_page);
            $current_page=1;
            if(isset($_GET["page_no"]))
            {
                $current_page=$_GET["page_no"];
            }
            if($current_page!=1)
            {
                $previous =$current_page-1;
                echo "<a href='".$self."?page_no=1'>First</a>&nbsp;&nbsp;";
                echo "<a href='".$self."?page_no=".$previous."'>Previous</a>&nbsp;&nbsp;";
            }
            for($i=1;$i<=$total_no_of_pages;$i++)
            {
                if($i==$current_page)
                {
                    echo "<strong><a href='".$self."?page_no=".$i."' style='color:red;text-decoration:none'>".$i."</a></strong>&nbsp;&nbsp;";
                }
                else
                {
                    echo "<a href='".$self."?page_no=".$i."'>".$i."</a>&nbsp;&nbsp;";
                }
            }
            if($current_page!=$total_no_of_pages)
            {
                $next=$current_page+1;
                echo "<a href='".$self."?page_no=".$next."'>Next</a>&nbsp;&nbsp;";
                echo "<a href='".$self."?page_no=".$total_no_of_pages."'>Last</a>&nbsp;&nbsp;";
            }
            ?></td></tr><?php
        }
    }
}

?>

当我只使用下面的语句但我想用 Where 过滤数据时它工作正常

$query = "SELECT * FROM distdb"; 

【问题讨论】:

  • 危险:你很容易受到SQL injection attacks的影响,你需要defend你自己。
  • 天哪...我是 PHP 新手如何防御
  • 我之前的评论中有链接。点击它们。
  • 好的,我会做的,除了对我上面的问题有任何答案
  • when i click on 2nd page its showing nothing - 定义“无” - 页面是空白的?,没有行?字符串“无”?在这两种情况下,您应该查看(并添加到问题中)您在第 1 页、第 not-1 页和 执行的 sql 查询 时请求的 url。

标签: php pagination


【解决方案1】:

在您的分页中,您只传递了您的页码,但没有传递银行 ID。因此,在您的第二个页面和其他页面中,$id=$_GET['id'] 将为 NULL。您的查询将如下所示:

$query = "SELECT * FROM distdb WHERE BANK_ID = ''";

你会得到空白结果或一些带有空白 BANK_ID 的结果。

    public function paginglink($query,$records_per_page)
    {

        $self = $_SERVER['PHP_SELF'];
        $id=$_GET['id'];
        $self .= '?id=' . $id;
        $stmt = $this->db->prepare($query);
        $stmt->execute();

        $total_no_of_records = $stmt->rowCount();

        if($total_no_of_records > 0)
        {
            ?><tr><td colspan="3"><?php
            $total_no_of_pages=ceil($total_no_of_records/$records_per_page);
            $current_page=1;
            if(isset($_GET["page_no"]))
            {
                $current_page=$_GET["page_no"];
            }
            if($current_page!=1)
            {
                $previous =$current_page-1;
                echo "<a href='".$self."&page_no=1'>First</a>&nbsp;&nbsp;";
                echo "<a href='".$self."&page_no=".$previous."'>Previous</a>&nbsp;&nbsp;";
            }
            for($i=1;$i<=$total_no_of_pages;$i++)
            {
                if($i==$current_page)
                {
                    echo "<strong><a href='".$self."&page_no=".$i."' style='color:red;text-decoration:none'>".$i."</a></strong>&nbsp;&nbsp;";
                }
                else
                {
                    echo "<a href='".$self."&page_no=".$i."'>".$i."</a>&nbsp;&nbsp;";
                }
            }
            if($current_page!=$total_no_of_pages)
            {
                $next=$current_page+1;
                echo "<a href='".$self."&page_no=".$next."'>Next</a>&nbsp;&nbsp;";
                echo "<a href='".$self."&page_no=".$total_no_of_pages."'>Last</a>&nbsp;&nbsp;";
            }
            ?></td></tr><?php
        }
    }

【讨论】:

  • 是的,你是正确的 $id=$_GET['id'];没有传递我需要的值。当我给 $id=5 它的工作正常。
【解决方案2】:

你能用OFFSET吗?对于简单的$offset = ($_GET['page'] - 1) * $per_page; 并将其添加到查询的末尾:YOUR-QUERY OFFSET $offset。如果$offset 为空(或零),则不需要添加它。

【讨论】:

    【解决方案3】:

    用这个替换你的查询

    $query="SELECT * FROM distdb WHERE BANK_ID = $id"
    

    因为$id 是变量而不是字符串

    【讨论】:

    • 把你的数据库内容放在这里
    • Mysql(假定)is not sensitive to that。另请注意,无论内容是什么类型,$anything 都是一个变量。
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2021-01-19
    相关资源
    最近更新 更多