注意:搜索和分页的未定义变量(自定义帖子类型)

时间:2013-05-20 16:19:35

标签: php

我有一些错误,我无法解决问题。你能帮帮我吗? 这是因为您使用的是已弃用的功能? 我该如何解决这个问题?

这是代码

<?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 个答案:

答案 0 :(得分:3)

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

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

使用preg_replace()功能解决问题。

答案 1 :(得分: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?

希望有所帮助。

答案 2 :(得分: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中定义。我不知道你想从哪里得到它,但你需要将其作为参数发送或从某个地方收集它。

现在,来解决你收到的downvotes。像这样的问题没有付出努力。虽然您可能已经做了一些努力,但您没有记录,所以我们可以告诉您只是希望我们为您进行调试。提供所有代码是件好事,但请记住,展示你已经提出的努力。

答案 3 :(得分:1)

首先注意:您应该切换到preg_replace

第二个通知:$prev_link在条件,最简单的解决方案中初始化,以便在$prev_link = '';函数中的if语句之前删除这些通知showPrev

第三个通知:$query_string未在showNext范围内的任何位置定义。