Так что я не могу обойти это утверждение if.
То, что я пытаюсь сделать, - это получить человека, зарегистрированного из $ _SESSION ["user_name"], и если он соответствует одному из двух возможных пользователей "admin", чтобы предоставить дополнительную функциональность. Но он всегда стреляет в истину.
Для примера у меня будет три пользователя: Эмма, Джон и Роберт. Эмма и Джон должны быть допущены к дополнительной "функциональности администратора", но Роберту это не разрешено. Так...
Мое выражение:
if ($_SESSION["user_name"] === "emma" or "john"){
//give extra functionality as well as basic functionality
} else {
//give just basic functionality
Но это всегда срабатывает верно, поэтому, когда я регистрирую свою тестовую учетную запись с именем пользователя Robert, он также получает дополнительную функциональность.
Я попытался изменить кавычки "
$_SESSION
на апострофы '
, а также попытался изменить оператор с ===
на ==
. Я даже попытался =
но нашел трудный путь, что это установило мою переменную $_SESSION
в "emma ".
Что я делаю неправильно, потому что я просто не могу обдумать это?
Если это стоит отметить, этот оператор if
содержится в родительском, if
оператор, который использует двоеточия :
и endif
а не скобки {}
. Оператор parent 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
}
каждое из этих [условий] утверждений оценивается как "правдивое" или "ложное". Таким образом, ваш оригинальный вопрос можно переписать примерно так:
if ([$_SESSION["user_name"] is equal to "emma"] or ["john" is not false, 0, or null]) {
// we will always get in here
}
Поскольку "john" всегда будет "правдивым" (это не false, null, 0), он всегда будет проходить условие.
if($_SESSION["user_name] = "emma" or true){
Большое спасибо!
if (in_array($_SESSION['user_name'], array('emma','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") {
Попробуйте что-то вроде этого
if (($_SESSION["user_name"] === "emma") || ($_SESSION["user_name"] === "john"))
{
//do something
}
else
{
//other thing
}
||
вместоor
. Они не совсем одинаковые.