PHP等于$ var1或$ var2

时间:2018-10-11 13:04:46

标签: php url-routing

我正在尝试制作路由系统。

我想做什么:

网址: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个不同的路由器。

4 个答案:

答案 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';
    }

您缺少&&是问题,如果您以后需要更改,我只是将其更改为动态路线!