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']))
否
答案 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
正如@ nigel-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_quiz
,view_quiz
或new_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';
}