PHP错误页面问题

时间:2011-09-25 18:40:01

标签: php

我无法弄清楚为什么这个脚本无效。

<?php

if (($_GET['p'] != 'index') && 
    ($_GET['p'] != 'reg') && 
    ($_GET['p'] != 'login') && 
    ($_GET['p'] != 'ad') && 
    (!isset($_GET['p']))):
?>

<?php endif; ?>

如果未设置$ _GET,我想不显示错误页面,根据我的经验(!isset($_GET['p']))应该这样做。

4 个答案:

答案 0 :(得分:5)

如果未设置$_GET['p'],则无法检查$_GET['p'] != 'index'和所有其他人。你必须先检查它是否先设置好:

<?php if(
    ! isset( $_GET['p'] ) ||
    ($_GET['p'] != 'index' &&
    $_GET['p'] != 'reg' &&
    $_GET['p'] != 'login' &&
    $_GET['p'] != 'ad')
): ?>

更好的解决方案是将所有这些值放在一个数组中,并检查数组中是否有$_GET['p']

<?php if(
    ! isset( $_GET['p'] ) ||
    ! in_array(
        $_GET['p'],
        array('index', 'reg', 'login', 'ad')
    )
): ?>

修改

现在您提供了更多信息,以下是您应该做的事情:

if ( ! isset($_GET['p']) )
{
    // We're at the index page, so don't display anything
}
else
{
    if ( in_array( $_GET['p'], array('index', 'reg', 'login', 'ad') ) )
    {
        // Display your content window
    }
    else
    {
        // $_GET['p'] is not a valid value, display error
    }
}

答案 1 :(得分:4)

你的病情毫无意义。您正在检查$_GET['p']的3个可能值,然后检查$_GET['p']是否已设置。扭转你的逻辑:

<?php
    if(isset($_GET['p']))
    {
        // display error page
    }
    else
    {
        // do something else
    }

答案 2 :(得分:2)

您可以检查$ _GET ['p']是否由

设置
if(isset($_GET['p']) {...}

如果已设置且不为空,则可以检查需要检查的值。

答案 3 :(得分:0)

试试这个:

<?php 
$defaultvalue=0; // for example 0
$p=isset($_GET["p"]) ? $_GET["p"] : $defaultvalue;
if(($p != 'index') && ($p != 'reg') && ($p != 'login') && ($p != 'ad')): 
?>