PHP设置为等于$var1或$var2

PHP设置为等于$var1或$var2,php,url-routing,Php,Url Routing,我在试着做一个路由系统 我想做什么: Url:http://localhost/wiki.php?post_id=1如果需要,调用第二个 Url: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'])

我在试着做一个路由系统

我想做什么:

Url:
http://localhost/wiki.php?post_id=1
如果需要,调用第二个

Url:
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
}
问题:

Url:
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=$\u GET['action']它在第一个if中的内部

在测试过程中,我发现如果我更改
if(isset($\u-GET['post\u-id'])和((isset($\u-GET['action'])?$\u-GET['action']:null)=“upvote”| |“downvote”){

它工作得很好。但我想学习如何正确操作,而不仅仅是简单地制作两个不同的路由器。

这部分
(exp)=“upvote”| |“downvote”
不像你想象的那样工作。它只测试
exp
是否等于
“upvote”
,第二部分
“downvote”
被理解为一个布尔值,它是
真的
,因此您将停留在备选方案的第一部分

试一试

if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
| |“downvote”
将始终返回true,因为您没有将其与任何内容进行比较。您必须在该字符串前面添加
(isset($\u GET['action'])?$\u 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
}

为澄清起见,单个(与号)
为“按位”:

因此,您需要将
&
更改为
&

从手册中:

$a和$b以及在$a和$b中设置的位都已设置

您需要的是逻辑的
&&
运算符:

如果$a和$b都为TRUE,则为$a&&$b和TRUE


您丢失了-&是问题所在,如果您以后需要更改,我只更改此动态路由!

您有一个单独的-&&应该在哪里。此外,您的or条件只是检查字符串
downvote
,该字符串将计算为true。@ArtisUļjanovs条件检查不会影响您的重定向,我将确保t使用此选项后,您的路径仍然正确。@很抱歉,已删除我的评论。未看到。不知何故,我的服务器已关闭,这就是我出现此错误的原因
if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
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';
    }