繁体   English   中英

PHP isset等于$ var1或$ var2

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM