PHP错误页面问题

PHP错误页面问题,php,Php,我不明白为什么这个脚本不起作用 <?php if (($_GET['p'] != 'index') && ($_GET['p'] != 'reg') && ($_GET['p'] != 'login') && ($_GET['p'] != 'ad') && (!isset($_GET['p']))): ?> <?php endif; ?> 如果未设置$\u-G

我不明白为什么这个脚本不起作用

<?php

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

<?php endif; ?>


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

您可以检查$\u-GET['p']是否由设置

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

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

您的条件没有意义。您正在检查
$\u GET['p']
的3个可能值,然后检查是否设置了
$\u GET['p']
。颠倒你的逻辑:

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

如果未设置
$\u GET['p']
,则无法选中
$\u GET['p']!='索引“
和所有其他内容。您必须先检查是否已设置:

<?php if(
    ! isset( $_GET['p'] ) ||
    ($_GET['p'] != 'index' &&
    $_GET['p'] != 'reg' &&
    $_GET['p'] != 'login' &&
    $_GET['p'] != '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
    }
}
试试这个:

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


真的吗?R字?这是三年级吗?你可能想重新表述你的标题,以便更准确地描述这个问题。更好的描述将吸引更多更好的答案!如果您想检查
!isset($\u GET['p'])
,在检查相等性之前将其放在列表的第一位。另外,我不知道为什么有这么多括号将单个条件分组。它们对于正在发生的事情是多余的。通过“$\u GET is not set”您的意思是您想要
!isset($\u GET['p'])
在GET请求是这样的
或者是
?p=
时计算为
TRUE
?我已经尝试过了$_获取['p']!isset,在设置变量时设置一个变量,将它放在一个不同的if语句中,在if的长列表之前和之后,似乎什么都不起作用。。get在地址栏中看起来是这样的:?p=index,而我似乎无法将其发送到work@albinlennstrand当你认为$_GET['p']是空的时候,你确定它是空的吗?我直接从你的评论中复制了你的代码,但它仍然不起作用,我以前甚至做过数组,但它就是不起作用,当我检查GET是否为某个特定值时,它确实起作用,但如果它未设置为allI不明白-如果您检查$\u GET['p']是否为null或空,为什么需要其他条件来检查该变量的值?如果$\u GET['p']为null或为空,则它不包含值…@evione-据我所知,这是他试图做的事情:如果没有值作为
$\u GET['p']
传递,或者
$\u GET['p']
不等于这些值中的任何一个,那么他就溜过去了。否则,他想发出一个错误。我有一个页面,它检查$u GET是否设置了某个值,例如,如果它是Hello,那么它会显示一个包含文本“Hello”的内容窗口。但是我不希望在索引上显示任何内容,因为索引中没有设置$\u GET,并且当$\u GET值与任何设置值不匹配时,将显示错误页面。@JosephSilber是的。这就是我想要的。就像以前的脚本一样,如果设置了某些值,它就可以工作,但是如果没有设置,它就不能工作
<?php 
$defaultvalue=0; // for example 0
$p=isset($_GET["p"]) ? $_GET["p"] : $defaultvalue;
if(($p != 'index') && ($p != 'reg') && ($p != 'login') && ($p != 'ad')): 
?>