我正在尝试制作路由系统。
我想做什么:
网址: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中。
在测试时,我发现如果我更改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个不同的路由器。
答案 0 :(得分:3)
这部分(exp) == "upvote" || "downvote"
不能像您想象的那样工作。它仅测试exp
是否等于"upvote"
,第二部分"downvote"
被理解为布尔值true
,因此您将停留在替代方法的第一部分。
尝试
if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
答案 1 :(得分:2)
为清楚起见,单个(“&”号)/usr/share/nginx/html/dashboard/
是“按位”的:
因此,您需要将&
更改为&
。
从手册:
$ a&$ b并且设置了$ a和$ b中设置的位。
您追求的是逻辑&&
运算符:
$ a && $ b如果$ a和$ b都为TRUE,则为TRUE。
答案 2 :(得分:0)
|| "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
}
答案 3 :(得分:0)
$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';
}
您缺少&&是问题,如果您以后需要更改,我只是将其更改为动态路线!