2013-05-20 59 views
-5

我有一些錯誤,我無法解決問題。你能幫我嗎? 這是因爲您正在使用已棄用的功能? 我該如何解決這個問題?注意:搜索和分頁未定義變量(自定義帖子類型)

下面是代碼

<?php 

class Pagination { 
    function getStartRow($page,$limit){ 
     $startrow = $page * $limit - ($limit); 
     return $startrow; 
    } 
    function showPageNumbers($totalrows,$page,$limit){ 

     $query_string = $this->queryString(); 

     $pagination_links = null; 

     /* 
     PAGINATION SCRIPT 
     seperates the list into pages 
     */  
     $numofpages = $totalrows/$limit; 
     /* We divide our total amount of rows (for example 102) by the limit (25). This 

    will yield 4.08, which we can round down to 4. In the next few lines, we'll 
    create 4 pages, and then check to see if we have extra rows remaining for a 5th 
    page. */ 

     for($i = 1; $i <= $numofpages; $i++){ 
     /* This for loop will add 1 to $i at the end of each pass until $i is greater 
    than $numofpages (4.08). */  

      if($i == $page){ 
       $pagination_links .= '<div class="page-link"><span>'.$i.'</span></div> '; 
      }else{ 
       $pagination_links .= '<div class="page-link"><a href="?page='.$i.'&'.$query_string.'">'.$i.'</a></div> '; 
      } 
      /* This if statement will not make the current page number available in 
    link form. It will, however, make all other pages available in link form. */ 
     } // This ends the for loop 

     if(($totalrows % $limit) != 0){ 
     /* The above statement is the key to knowing if there are remainders, and it's 
     all because of the %. In PHP, C++, and other languages, the % is known as a 
     Modulus. It returns the remainder after dividing two numbers. If there is no 
     remainder, it returns zero. In our example, it will return 0.8 */ 

      if($i == $page){ 
       $pagination_links .= '<div class="page-link"><span>'.$i.'</span></div> '; 
      }else{ 
       $pagination_links .= '<div class="page-link"><a href="?page='.$i.'&'.$query_string.'">'.$i.'</a></div> '; 
      } 
      /* This is the exact statement that turns pages into link form that is used above */ 
     } // Ends the if statement 

     return $pagination_links; 
    } 

    //added by drale.com - 1-19-2010 
    function showNext($totalrows,$page,$limit,$text="next &raquo;"){  
     $next_link = null; 
     $numofpages = $totalrows/$limit; 

     if($page < $numofpages){ 
      $page++; 
      $next_link = '<div class="page-link"><a href="?page='.$page.'&'.$query_string.'">'.$text.'</a></div>'; 
     } 

     return $next_link; 
    } 

    function showPrev($totalrows,$page,$limit,$text="&laquo; prev"){  
     $next_link = null; 
     $numofpages = $totalrows/$limit; 

     if($page > 1){ 
      $page--; 
      $prev_link = '<div class="page-link"><a href="?page='.$page.'&'.$query_string.'">'.$text.'</a></div>'; 
     } 

     return $prev_link; 
    } 

    function queryString(){ 
     //matches up to 10 digits in page number 
     $query_string = eregi_replace("page=[0-9]{0,10}&","",$_SERVER['QUERY_STRING']); 
     return $query_string; 
    } 
} 
?> 

是因爲你升級你的PHP版本5.3?

+0

正如廢棄聲明所述,不再支持'ereg()'函數。你應該用'preg_match()'替換它。 (搜索這個網站的例子,如何做到這一點;這很容易) – Spudley

+0

所有的錯誤不言自明 – samayo

回答

1

推薦使用:功能eregi_replace()不推薦使用在C:\ XAMPP \ htdocs中\管理\ Pagination.php上線86

你想用preg_replace,而不是像這樣:

$query_string = preg_replace("page=[0-9]{0,10}&","",$_SERVER['QUERY_STRING']); 

說明:未定義變量:prev_link在C:\ XAMPP \ htdocs中\經理\ Pagination.php在線路81上

這是發生,因爲prev_link是不是真的爲return定義這樣的代碼更改爲:

$prev_link = null; 
if($page > 1){ 
    $page--; 
    $prev_link = '<div class="page-link"><a href="?page='.$page.'&'.$query_string.'">'.$text.'</a></div>'; 
} 

return $prev_link; 

注意:未定義的變量:QUERY_STRING在C:\ XAMPP \ htdocs中\ manager \ Pagination.php on line 66

發生這種情況是因爲變量$query_string沒有得到在功能showPrev中定義。我不知道你想從哪裏得到這些信息,但是你需要將它作爲參數發送或從某個地方收集。

現在,解決你收到的降價。像這樣的問題顯示沒有努力。雖然您可能已經做了一些努力,但您沒有記錄這一點,所以我們可以告訴您只是希望我們爲您進行調試。你提供了所有的代碼是很好的,但請記住,顯示你已經提出了什麼努力。

+0

我修復了這個問題,感謝所有 – razvan

3

這是因爲您使用的是過時的功能eregi_replace的錯誤狀態

eregi_replace()已過時的PHP 5.3.0的。 preg_replace()與i(PCRE_CASELESS)修飾符是建議的替代方法。

使用preg_replace()函數來擺脫問題。

2

你得到錯誤的原因是因爲這個代碼:

if($page > 1){ 
     $page--; 
     $prev_link = '<div class="page-link"><a href="?page='.$page.'&'.$query_string.'">'.$text.'</a></div>'; 
    } 

    return $prev_link; 

$prev_link變量在此之前將不會被初始化,如果$page大於1只填充。

因此,如果$page等於1(或更少?),那麼return語句將試圖返回一個不存在的變量。

這會導致您看到的錯誤。

爲了解決這個問題,在函數的頂部添加一條線,如下所示:

$prev_link = ''; 

這將確保該變量無論頁碼的初始化。

$query_string錯誤是完全一樣的,但在程序中的其他地方。希望你可以通過調整上面的幫助來解決如何解決這個問題。

最後,ereg錯誤是因爲您已將PHP版本升級到5.3,但代碼原本是爲早期的PHP版本開發的。從PHP 5.3開始,不再支持ereg()函數和所有相關函數,並且應該用preg_match(),preg_replace()等代替。在這裏有很多關於SO的問題,可以幫助你做到這一點 - 例如試試這個例子:ereg_replace to preg_replace?

希望有幫助。

+0

我會從preg_replace其他錯誤:「警告:preg_replace()[函數.preg-replace]:分隔符不能是字母數字或在第83行的C:\ xampp \ htdocs \ manager \ Pagination.php中的反斜槓「 – razvan

+0

@razvan - 閱讀我在答案結尾處鏈接的問題 - 它具有解決這個問題。 (如果這樣做沒有幫助,那麼SO上有數百個其他帖子要求同樣的事情)。 – Spudley

1

首先注意:你應該切換到preg_replace

第二次通知:$prev_link是在有條件的,最簡單的解決辦法初始化爲消除這些通知是$prev_link = '';showPrev功能if語句之前。

第三次注意:$query_string未在showNext範圍內的任何地方定義。

+0

preg_replace我會得到其他錯誤 – razvan

相關問題