douza19870617 2016-08-14 14:31
浏览 28
已采纳

PDO的分页与PDO无关[重复]

I am trying to make a php pagination, but i am getting the following errors:

Notice: Undefined variable: Table in C:\wamp64\www\pagination\pagination\function.php on line 10

Fatal error: Call to a member function makeStatement() on null in C:\wamp64\www\pagination\pagination\function.php on line 10

My code is in 2 pages - paging.php and function.php

PAGING.PHP

<?php
$dbInfo = "mysql:host=localhost;dbname=paging";
$dbUser = "root";
$dbPassword = "password";
$db = new PDO( $dbInfo, $dbUser, $dbPassword );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
?>
<!DOCTYPE html>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="pagination/css/pagination.css" rel="stylesheet" type="text/css" />
<link href="pagination/css/A_green.css" rel="stylesheet" type="text/css" />
</head>
<body>
<?php 
include("pagination/function.php");
$Table = new Table($db);

$page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
    $limit = 5; //if you want to dispaly 10 records per page then you have to change here
    $startpoint = ($page * $limit) - $limit;
    $statement = "table1 order by name asc"; //you have to pass your query over here

    $entrySQL= "select * from {$statement} LIMIT {$startpoint} , {$limit}";

    $res = $Table->makeStatement( $entrySQL );

    while($row = $res->fetch(PDO::FETCH_ASSOC))
    {
    echo $row["name"];
    echo "<br>";
    }

    class Table {
        //notice protected, not private
        public $db;

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

        //notice protected, not private  
        //$sql argument must be an SQL string
        //$data must be an array of dynamic data to use in the SQL 
        public function makeStatement ( $sql, $data = null ){
            $statement = $this->db->prepare( $sql );
            try {
                $statement->execute( $data );
            } catch (Exception $e) {
                $exceptionMessage = "<p>You tried to run this sql: $sql <p>
                        <p>Exception: $e</p>";
                trigger_error($exceptionMessage);
            }       
            return $statement;
        }   
    }
 ?>

<?php
echo "<div id='pagingg' >";
echo pagination($statement,$limit,$page);
echo "</div>";
?>
</body>
</html>

FUNCTION.PHP

<?php
    function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
    $query = "SELECT COUNT(*) as `num` FROM $query";

    $res = $Table->makeStatement( $query );

    $row = $res->fetch(PDO::FETCH_ASSOC);


    $total = $row['num'];
    $adjacents = "2"; 

    $page = ($page == 0 ? 1 : $page);  
    $start = ($page - 1) * $per_page;                               

    $prev = $page - 1;                          
    $next = $page + 1;
    $lastpage = ceil($total/$per_page);
    $lpm1 = $lastpage - 1;

    $pagination = "";
    if($lastpage > 1)
    {   
        $pagination .= "<ul class='pagination'>";
                $pagination .= "<li class='details' style='margin-top:2px'>Page $page of $lastpage</li>";
        if ($lastpage < 7 + ($adjacents * 2))
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<li><a class='current'>$counter</a></li>";
                else
                    $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))
        {
            if($page < 1 + ($adjacents * 2))        
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>...</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>...</li>";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
                $pagination.= "<li class='dot'>..</li>";
                $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
            }
            else
            {
                $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                $pagination.= "<li class='dot'>..</li>";
                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
            }
        }

        if ($page < $counter - 1){ 
            $pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
            $pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
        }else{
            $pagination.= "<li><a class='current'>Next</a></li>";
            $pagination.= "<li><a class='current'>Last</a></li>";
        }
        $pagination.= "</ul>
";        
    }


    return $pagination;
   } 
?>

78

</div>
  • 写回答

1条回答 默认 最新

  • doushao1087 2016-08-14 14:50
    关注

    PHP functions have a local variable scope. So your $Table variable inside of the function pagination does not reference the global variable $Table where you instantiate your object.

    Instead you should pass the global variable into your function when calling it like so...

    echo pagination($Table, $statement, $limit, $page);
    

    And make sure to update your function signature so that it takes the Table object as a dependency.

    function pagination(Table $Table, $query, $per_page = 10, $page = 1, $url = '?')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计