$ _GET白页,如果在网址

时间:2016-09-02 21:49:10

标签: php superglobals

我有一个示例网址http://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=0http://www.example.com/index.php?pagina=some-cool-document&page=1 - 将显示第1页

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

以上示例和有关我的网址的信息正在运作。

我面临的问题是,当页面不是数组键或页面不是数字时,它将显示一个页面上没有任何内容;一些示例网址:

http://www.example.com/index.php?pagina=some-cool-document(页面未在网址中定义/不是数组键)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 stackoverflow, 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'] = '';
}

我还在阅读其他StackOverflow问题和谷歌,但我找不到任何解决此问题的工作方法......

我还能尝试将其发挥作用吗?

修改

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

页面的值应该是数字而没有任何其他字符,只需要[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'];
}

3 个答案:

答案 0 :(得分:0)

试试这个:

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'];
}

答案 1 :(得分:0)

首先,你不应该习惯修改你的$_GET$_POST超全球;参考here。但是,为了回答你的问题,我只是简单地运行了这段代码,它可以运行:

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

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

答案 2 :(得分:0)

我编写了以下代码,一切都运行良好。 未定义$_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...
            }
?>