php - PHP isset 等于 $var1 或 $var2
问题描述
我正在尝试制作路由系统。
我想做的事:
网址:http://localhost/wiki.php?post_id=1
调用第二个 if
Url's:http://localhost/wiki.php?post_id=1&action=upvote
http://localhost/wiki.php?post_id=1&action=downvote
先调用 if
这是路由系统:
if(isset($_GET['post_id']) & ((isset($_GET['action']) ? $_GET['action'] : null) == "upvote" || "downvote")){
//Do stuff
}else if(isset($_GET['post_id'])){
//Do stuff
}
问题:
Url's: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
调用 first 而不是 second if too...
注意:未定义索引:第 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 个不同的路由器。
解决方案
这部分(exp) == "upvote" || "downvote"
不像你想象的那样工作。它只测试是否exp
等于"upvote"
,第二部分"downvote"
被理解为布尔值true
,所以你留在替代的第一部分。
尝试
if(isset($_GET['post_id']) && (($exp = (isset($_GET['action']) ? $_GET['action'] : null)) == "upvote" || $exp == "downvote")){
推荐阅读
- python - Python None 值未应用
- python - drawEllipse 在 GUI 上不显示任何内容
- r - 使用 grep 查找部分匹配项
- flutter - FractionallySizedCircle?飘飘然
- javascript - push 方法将数组转换为组件状态下的数字
- javascript - firestore transaction.set(ref, data, {merge: true}) 和 transaction.update(ref, data) 有什么区别?
- python - 实时颜色检测及其功能
- algorithm - 计算给定数字序列最多可以拆分为 K 的方式的数量
- python - 是否有一种非阻塞方式来检查 asyncio 子进程是否处于活动状态?
- excel - Excel 宏为不同的值创建图表