PHP中具有OR条件的多个!isset()

时间:2019-05-04 18:42:46

标签: php if-statement isset

if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){
echo "No";
}
else{ echo "Yes"; }

当我转到 index.php?view_quiz 时,其结果应为,但结果为。为什么?

我的其他尝试:

(!isset($_GET['new_quiz'] || $_GET['view_quiz'] || $_GET['alter_quiz']))
  

(!)致命错误:无法在表达式的结果上使用isset()   (您可以改用“ null!==表达式”)   C:\ wamp \ www \ jainvidhya \ subdomains \ teacher \ quiz.php在第94行


(!isset($_GET['new_quiz'],$_GET['view_quiz'],$_GET['alter_quiz']))
  

5 个答案:

答案 0 :(得分:1)

您可能会发现,颠倒逻辑使代码更易于阅读,我还希望对条件有更积极的了解,因为它易于阅读(而不是多个not表示不)。

因此,这表示如果项目isset()中的任何一个,答案是Yes ...

if(isset($_GET['new_quiz']) || isset($_GET['view_quiz']) || isset($_GET['alter_quiz'])){
    echo "Yes";
}
else{ echo "No"; }

请注意,我已经更改了Yes的{​​{1}}和No分支。

答案 1 :(得分:0)

您可能正在寻找

if(!isset($_GET['new_quiz']) && !isset($_GET['view_quiz']) && !isset($_GET['alter_quiz'])){
    echo "No";
}
else {
    echo "Yes";
}

如果URL中不存在new_quiz,view_quiz和alter_quiz,则将打印 Yes 。如果这不是您想要的结果,请详细说明您的问题。

答案 2 :(得分:0)

@paran,例如,您需要为view_quiz=yes设置一个值

if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){
echo "No";
}
else{ echo "Yes"; }

和网址

index.php?new_quiz=yes
index.php?view_quiz=yes
index.php?alter_quiz=yes

全部将返回true

答案 3 :(得分:0)

isset()允许多个参数。如果至少一个参数不存在(或为NULL),则isset()返回false。如果所有参数都存在,则isset()返回true

所以尝试一下:

if( !isset( $_GET['new_quiz'], $_GET['view_quiz'], $_GET['alter_quiz']) ) {

答案 4 :(得分:0)

首先,回答您的问题:

  

当我转到index.php?view_quiz时,其结果应为“是”,但结果为“否”。为什么?

这是因为这个

if(!isset($_GET['new_quiz']) || !isset($_GET['view_quiz']) || !isset($_GET['alter_quiz'])){

检查是否未设置任何一个参数,只要您没有同时设置所有三个参数,就总是这样:

  

index.php?alter_quiz&view_quiz&new_quiz

正如@ n​​igel-ren所说,您可能不想将逻辑更改为

if(isset($_GET['new_quiz']) || isset($_GET['view_quiz']) || isset($_GET['alter_quiz'])){
    echo 'Yes';

检查是否至少设置了一个参数。


如果您不想检查三个参数集中只有,则必须使用XOR(稍微复杂一些)

$a = isset($_GET['new_quiz']);
$b = isset($_GET['view_quiz']);
$c = isset($_GET['alter_quiz']);

if( ($a xor $b xor $c) && !($a && $b && $c) ){
    echo 'Yes';

(基于此答案:XOR of three values

如果仅设置三个参数之一,则返回true。


但是-这只是一个假设,如果我错了,请纠正我-我认为您要实现的目标是三个不同的页面(一个用于创建测验,一个用于查看测验,一个用于编辑测验) 。因此,您当前的设置可能会遇到问题。例如:如果用户使用多个参数(例如

  

index.php?alter_quiz&view_quiz

您要同时显示两个页面吗?您会忽略一个参数吗?我建议首先使用单个参数来避免此问题。例如site,其值可以为alter_quizview_quiznew_quiz。例如:

  

index.php?site = alter_quiz

然后您可以像这样工作:

// check if site is set before getting its value
$site = array_key_exists( 'site', $_GET ) ? $_GET['site'] : NULL;

// if it's not set e.g. index.php without parameters is called
if( is_null($site) ){
    // show the start page or something
}else{

    $allowed_sites = ['new_quiz', 'view_quiz', 'alter_quiz'];

    // never trust user input, check if
    // site is an allowed value
    if( !in_array($site, $allowed_sites, true) ){
        die('404 - This site is no available');
    }

    // here you can do whatever your site should do
    // e.g. include another php script which contains
    // your site
    include('path/to/your/site-' . $site . '.php');

    // or echo yes
    echo 'Yes';

}