如果在 URL 中未定义,则 $_GET 白页

$_GET white page if undefined in URL

我有一个例子URLhttp://www.example.com/index.php?pagina=some-cool-document&page=5

当 PHP 文件存在并且设置了 $_GET 超全局时,它可以工作。例如:

http://www.example.com/index.php?pagina=some-cool-document&page=5 - 将显示第 5 页

http://www.example.com/index.php?pagina=some-cool-document&page=0 and http://www.example.com/index.php?pagina=some-cool-document&page=1 - 将显示第 1 页

如果只有十页并且页面的值为 11 或更高的值,它将显示第 10 页,因为只有 10 页要显示

以上示例和有关我的 URL 的信息有效。

我遇到的问题是,当页面不是数组键或页面不是数字时,它会显示一个没有任何内容的页面;一些例子 URLs:

http://www.example.com/index.php?pagina=some-cool-document (page is not defined in URL/not an array key) http://www.example.com/index.php?pagina=some-cool-document&page=hello-world(页面无数值)

1: 当页面不是数组键时,我想显示第 1 页的内容而不是白页。

2:我想显示一条消息,例如:

echo 'Sorry, the page ' . $_GET['page'] . 'is not available, please click <a href="http://www.example.com/index.php?pagina=some-cool-document&page=1">here</a> to visit the first page.';

当页面不是数字时,摆脱白页并使其正常工作的最佳方法是什么?

我尝试过的:

$page = isset($_GET['page']) && ($page = intval($_GET['page'])) > 0 ? $page : 1; // I use this option as it does some of the things I want...

$page = (isset($_GET['page']) && trim($_GET['page']) == '1') ? trim($_GET['page']) : '1'; // found here on Whosebug, 100% is not working for me :-(

$page = isset($_GET['page']) && ($page = !empty($_GET['page']) && is_null($_GET[page])) ? $_GET['page'] : 1; // This one also does some of the things I want to do but is not working that well

我也用 if is_numeric($_GET['page']){ 做了一些事情,但结果是所有页面都是第 1 页,页面中没有非数字值的白页所以我仍在测试其他选项 is_numeric()

我还尝试了 array_key_exists 的一些选项,例如(同样对我不起作用):

if (!array_key_exists('page', $_GET)) {
    $page = $_GET['page'];
} else {
    $_GET['page'] = '';
}

我仍在阅读其他 Whosebug 问题和 Google 但我没有找到解决此问题的任何有效方法...

我还能做些什么来让它工作?

编辑

注意:所有变量(在消息中)都在我的代码的其他部分定义,并且在我使用它们之前全部定义。

页面的值应该是没有任何其他字符的数字,只有 [0-9] 应该用作值,否则只显示消息..

下面的代码是我使用的代码,当页面值太高并且任何页面都没有内容时,它不会显示第 1 页。

当页面的值包含其他字符时,第 1 页的内容显示在消息下方,我想去掉该内容,仅在检测到错误时才显示消息

$Last_Page = ceil($totalNodes / $perPage);


$page = isset($_GET['page']) && ($page = intval($_GET['page'])) > 0 ? $page : 1;

if(!is_int($_GET['page']) || $_GET['page'] < 0 || $_GET['page'] > $Last_Page){
    echo 'Sorry, the page ' . $_GET['page'] . ' is not available, please click <a href="' . $site_URI . '/index.php?pagina=' . $_GET['pagina'] . '&page=1">here</a> to visit the first page.';
    }else{
        $page = $_GET['page'];
}

试试这个:

if(!is_int($_GET['page']) || $_GET['page'] < 0 || $_GET['page'] > maxpagesAvailable)
{
    echo 'Sorry, the page ' . $_GET['page'] . 'is not available, please click <a href="http://www.example.com/index.php?pagina=some-cool-document&page=1">here</a> to visit the first page.';
}
else{
    $page = $_GET['page'];
}

首先,您不应该养成修改 $_GET$_POST 超全局变量的习惯;参考here。但是,为了回答你的问题,我只是 运行 这个代码并且它有效:

$page = isset($_GET['page']) && (intval($_GET['page'])) > 0 && $_GET['page'] <= 1 ? $_GET['page'] : 1; 

如果要发送消息,请使用普通的 if 语句而不是三元语句。

我写了下面的代码,一切都运行良好。 当 $_GET['page'] 未定义时,它将显示替代内容 当 $_GET['page'] 定义为有效值时,它将显示页面内容 当 $_GET['page'] 定义为无效值时,它将显示一条错误消息

$Last_Page定义在代码之前,取值介于1和最后一页的页码之间 $site_URI = 'http://www.example.com'; 定义在...

之前

php代码:

<?php
// Get rid of undefined index 
class Page_Pagination {
    function get($page) {
        return isset($_GET['page']) ? $_GET['page'] : null;
        }
}
$GET_page = new Page_Pagination;
$page = $GET_page->get('page'); // look in $_GET['page']
// Create array with all available page numbers!
for ($i = 1; $i <= $Last_Page; ++$i) {
    $Available_Pages[] = $i;
    }
    if (in_array($page, $Available_Pages)) { // is the GET value in the array?
        // Do something with $page as the value is valid! $page is defined before this line and has a valid value so it can be used here ;)
        }elseif($page == null){
        // Do something if page variable is NULL 
        echo 'something here to enjoy the visitors...';
        }else{ // value of page variable is NOT a valid value and is not NULL
            echo 'Sorry, the page ' . $_GET['page'] . ' is not available, please click <a href="' . $site_URI . '/index.php?pagina=' . $_GET['pagina'] . '&page=1">here</a> to visit the first page.'; // Include a file or echo something or do something else on here...
            }
?>