[英]PHP isset equal $var1 or $var2
我正在尝试制作路由系统。
我想做的事:
网址: http://localhost/wiki.php?post_id=1
如果第二秒调用
网址: http://localhost/wiki.php?post_id=1&action=upvote
http://localhost/wiki.php?post_id=1&action=downvote
如果首先调用
这是路由系统:
if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || "downvote")){
//Do stuff
}else if(isset($_GET['post_id'])){
//Do stuff
}
问题:
网址: http://localhost/wiki.php?post_id=1&action=upvote
http://localhost/wiki.php?post_id=1&action=downvote
正常工作。
但是URL: http://localhost/wiki.php?post_id=1
也会首先调用而不是第二个...
注意:未定义的索引:第18行的D:\\ xampp \\ htdocs \\ controllers \\ WikiController.php中的操作
第18行: $rate = $_GET['action'];
它首先在里面。
在测试时,我发现如果更改if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || "downvote")){
太
if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote")){
要么
if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "downvote")){
工作正常。 但是我想学习如何正确地做到这一点,而不仅仅是简单地制造2个不同的路由器。
这部分(exp) == "upvote" || "downvote"
(exp) == "upvote" || "downvote"
不能像您(exp) == "upvote" || "downvote"
那样工作。 它仅测试exp
是否等于"upvote"
,第二部分"downvote"
被理解为是布尔值,因此为true
,因此您将停留在替代的第一部分。
尝试
if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
为了清楚起见,单个(符号) &
是“逐位”:
因此,您需要将&
更改为&&
。
从手册中:
$ a&$ b并且设置了在$ a和$ b中设置的位。
您所追求的是逻辑&&
运算符:
$ a && $ b如果$ a和$ b都为TRUE,则为TRUE。
|| "downvote"
|| "downvote"
将始终返回true,因为您没有将它与任何东西进行比较。 您还必须在该字符串前面添加(isset($_GET['action']) ? $_GET['action'] : null) ==
。
因此,您的陈述将是:
if(isset($_GET['post_id']) && ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || (isset($_GET['action']) ? $_GET['action'] : null) == "downvote")){
//Do stuff
}else if(isset($_GET['post_id'])){
//Do stuff
}
$routes = [
'upvote','downvote'
];
if(isset($_GET['post_id']) && isset($_GET['action']) && in_array($_GET['action'],$routes)){
echo 'running if';
}else if(isset($_GET['post_id'])){
echo 'running else if';
}
您缺少&&是问题,如果您将来需要更改,我只是将其更改为动态路线!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.