2016-08-14 170 views
0

我试图让一个PHP分页,但我收到以下错误:PHP的分页与PDO不工作

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

我的代码是在2页 - paging.php和function.php

PAGING.PHP

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>\n";   
    } 


    return $pagination; 
    } 
?> 

回答

0

PHP functions have a local variable scope。因此,函数pagination内的$Table变量不会引用实例化对象的全局变量$Table

相反,你应该像这样调用它时传递全局变量给你的函数...

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

并确保因此,它需要的Table对象作为依赖于更新您的函数签名。

function pagination(Table $Table, $query, $per_page = 10, $page = 1, $url = '?')