-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 吗?

4

4 回答 4

3

这是因为您正在使用已弃用的函数eregi_replace作为错误状态

自 PHP 5.3.0 起,eregi_replace() 已弃用。带有 i (PCRE_CASELESS) 修饰符的 preg_replace() 是建议的替代方法。

使用preg_replace()函数来解决问题。

于 2013-05-20T16:23:02.983 回答
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时才填充。$page1

因此,如果$page等于1(或更小?),那么该return语句将尝试返回一个不存在的变量。

这将导致您看到的错误。

要解决此问题,请在函数顶部添加一行,如下所示:

$prev_link = '';

这将确保无论页码如何都已初始化变量。

$query_string错误完全相同,但在程序的其他地方。希望您可以通过调整上面的帮助来解决这个问题。

最后,ereg错误是因为您已将 PHP 版本升级到 5.3,但代码最初是为较早的 PHP 版本开发的。ereg()自 PHP 5.3 起不再支持该函数和所有相关函数,应将其替换为preg_match(),preg_replace()等。这里有很多关于 SO 的问题可以帮助您解决这个问题——例如:ereg_replace to preg_replace?

希望有帮助。

于 2013-05-20T16:25:56.050 回答
1

已弃用:函数 eregi_replace() 在第 86 行的 C:\xampp\htdocs\manager\Pagination.php 中已弃用

你想像这样使用preg_replace

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

注意:未定义变量:第 81 行 C:\xampp\htdocs\manager\Pagination.php 中的 prev_link

发生这种情况是因为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;

注意:未定义变量:第 66 行 C:\xampp\htdocs\manager\Pagination.php 中的 query_string

发生这种情况是因为$query_string未在函数中定义变量showPrev。我不知道你想从哪里得到它,但你需要将它作为参数发送或从某个地方收集它。

现在,解决您收到的反对票。像这样的问题表明没有努力。尽管您可能已经做了一些努力,但您没有记录下来,所以据我们所知,您只是希望我们为您进行调试。您提供了所有代码很好,但请记住,展示您已经付出的努力。

于 2013-05-20T16:25:16.367 回答
1

第一个通知:你应该切换到preg_replace,

第二个通知: $prev_link在有条件的情况下进行初始化,删除这些通知的最简单解决方案是在函数$prev_link = '';中的 if 语句之前。showPrev

第三通知:$query_string未在showNext.

于 2013-05-20T16:27:39.973 回答