Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-If语句的计算结果是否始终为true?_Php_If Statement - Fatal编程技术网

PHP-If语句的计算结果是否始终为true?

PHP-If语句的计算结果是否始终为true?,php,if-statement,Php,If Statement,所以我无法理解这个if语句 我想做的是让这个人从$\u会话[“user\u name”]登录,如果它与两个可能的“admin”用户中的一个匹配,则提供额外的功能。但这总是千真万确的 例如,我将有三个用户:Emma、John和Robert。艾玛和约翰应该被允许额外的“管理功能”,但罗伯特是不允许的。所以 我的声明是: if ($_SESSION["user_name"] === "emma" or "john"){ //give extra functionality as well as bas

所以我无法理解这个if语句

我想做的是让这个人从$\u会话[“user\u name”]登录,如果它与两个可能的“admin”用户中的一个匹配,则提供额外的功能。但这总是千真万确的

例如,我将有三个用户:Emma、John和Robert。艾玛和约翰应该被允许额外的“管理功能”,但罗伯特是不允许的。所以

我的声明是:

if ($_SESSION["user_name"] === "emma" or "john"){
//give extra functionality as well as basic functionality
} else {
//give just basic functionality
但是这总是正确的,所以当我用用户名Robert作为我的测试帐户登录时,他也得到了额外的功能

我尝试过将
$\u SESSION
的引号
改为撇号
,还尝试过将运算符从
==
改为
=
。我甚至尝试过
=
,但发现这很难将我的
$\u SESSION
变量设置为“emma”

我为什么做错了,因为我似乎无法控制它


值得注意的是,此
If
语句包含在父
If
语句中,该语句使用冒号
endif
而不是方括号
{}
。如果返回的列为空或其中包含用户名,则父级
if
语句纯粹用于决定输出什么功能。

您需要重新声明完整条件:

if ($_SESSION["user_name"] === "emma" or $_SESSION["user_name"] === "john"){
    //give extra functionality as well as basic functionality
} else {
   ...
}
更新并解释:

if语句的伪代码语法为:

if ([some condition] [and/or] [another condition]) {
    // then do some stuff
}
这些[condition]语句中的每一个都被评估为其中之一。因此,您的原始问题可以重新编写如下内容:

if ([$_SESSION["user_name"] is equal to "emma"] or ["john" is not false, 0, or null]) {
    // we will always get in here
}

由于“john”将始终是“truthy”(它不是false,null,0),因此它将始终通过条件。

您需要重新声明完整条件:

if ($_SESSION["user_name"] === "emma" or $_SESSION["user_name"] === "john"){
    //give extra functionality as well as basic functionality
} else {
   ...
}
更新并解释:

if语句的伪代码语法为:

if ([some condition] [and/or] [another condition]) {
    // then do some stuff
}
这些[condition]语句中的每一个都被评估为其中之一。因此,您的原始问题可以重新编写如下内容:

if ([$_SESSION["user_name"] is equal to "emma"] or ["john" is not false, 0, or null]) {
    // we will always get in here
}
因为“john”总是“truthy”(它不是false,null,0),所以它总是通过条件。

术语
“john”
作为一个表达式是
true

if ( "john" )
将计算为true,并且不会抛出任何语法错误

你想要的是:

if ($_SESSION["user_name"] === "emma" || $_SESSION["user_name"] === "john") {
术语
“john”
作为一个表达式是
true

if ( "john" )
将计算为true,并且不会抛出任何语法错误

你想要的是:

if ($_SESSION["user_name"] === "emma" || $_SESSION["user_name"] === "john") {

这可能有助于将其分解为多个步骤。PHP将计算或左边的所有内容,以查看其是否正确。然后将计算或右边的内容

结果是,
“john”
的计算结果为
true

您正在寻找:

if ($_SESSION["user_name"] === "emma" or $_SESSION["user_name"] === "john") {

这可能有助于将其分解为多个步骤。PHP将计算或左边的所有内容,以查看其是否正确。然后将计算或右边的内容

结果是,
“john”
的计算结果为
true

您正在寻找:

if ($_SESSION["user_name"] === "emma" or $_SESSION["user_name"] === "john") {

试试这样的

if (($_SESSION["user_name"] === "emma") || ($_SESSION["user_name"] === "john"))
{
   //do something
}
else
{
  //other thing
}

试试这样的

if (($_SESSION["user_name"] === "emma") || ($_SESSION["user_name"] === "john"))
{
   //do something
}
else
{
  //other thing
}

我建议您使用
| |
而不是
。它们并不完全相同。请使用| |运算符,并应与双方进行比较($|会话[“user|u name”]===“emma”|$|会话[“user|u name”]===“john”)我建议您使用
| |
而不是
。它们并不完全相同。请使用| |运算符,并应与双方进行比较($|会话[“user|u name”]===“emma”|$|会话[“user|u name”]===“john”)这是第一个,所以这将被投票作为答案,因为我看到了这个答案,然后在尝试jpschroeder的建议并发现它有效的时候,其他答案出现了。它看起来很基本,但我真的不知道。所以“john”本质上是“true”,所以服务器读取的是
if($\u SESSION[“user\u name]=“emma”或true){
非常感谢!或者您可能想使用
if(在数组中($\u会话['user\u name'],数组('emma','john'))
这是第一个,所以这将被投票作为答案,因为我看到了这个答案,然后在尝试jpschroeder的建议并发现它有效的时候,其他答案出现了。它看起来很基本,但我确实不知道。所以“john”基本上是“true”,所以服务器读取的是
if($\u SESSION[“user\u name]=“emma”或true){
非常感谢!或者您可能想使用
if(在数组中($\u会话['user\u name'],数组('emma','john'))
感谢您为我解释这一点,我不知道您必须重新声明每种可能性的完整条件。我将投票给您的答案+1,因为jpschroeder几乎用正确的答案击败了您,但我非常感谢!谢谢您Axel Amthor。感谢您为我解释这一点,我不知道您必须重新声明e每种可能性的完整条件。我将投票给你的答案+1,因为施罗德几乎用正确的答案击败了你,但我非常感谢!谢谢你阿克塞尔·阿姆索尔。