PHP - Если утверждение всегда оценивается как истинное?

1

Так что я не могу обойти это утверждение 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 используется только для определения того, какая функциональность для вывода основывается на столбце, который был пустым, или имени пользователя в нем.

  • 2
    Я предлагаю вам использовать || вместо or . Они не совсем одинаковые.
  • 1
    использовать || оператор и должен сравниваться с обеих сторон ($ _SESSION ["user_name"] === "emma" || $ _SESSION ["user_name"] === "john")
Теги:
if-statement

4 ответа

4
Лучший ответ

Вам необходимо обновить полное состояние:

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), он всегда будет проходить условие.

  • 1
    Это было сначала, так что это будет проголосовано как ответ, потому что я видел этот ответ, и затем, пытаясь, что jpschroeder предложил, и находил, что это работает, другие ответы появились. Это кажется таким простым, но я буквально не знал. Таким образом, «john» был по сути «true», поэтому сервер читал if($_SESSION["user_name] = "emma" or true){ Большое спасибо!
  • 2
    в качестве альтернативы вы можете использовать if (in_array($_SESSION['user_name'], array('emma','john')))
3

Термин "john" как выражение true:

if ( "john" )

будет оценивать значение true и не вызывать никаких синтаксических ошибок.

Вы хотите:

if ($_SESSION["user_name"] === "emma" || $_SESSION["user_name"] === "john") {
  • 0
    Спасибо, что объяснили это для меня, я не осознавал, что вам нужно было переопределить полное условие для каждой возможности. Я буду голосовать за ваш ответ +1, потому что jpschroeder чуть ли не дал вам правильный ответ, но я очень ценю это! Спасибо Аксель Амтор.
2

Это может помочь разбить это на шаги. PHP будет оценивать все слева или видеть, является ли оно истинным или ложным. Затем он будет оценивать, что находится справа от или.

Оказывается, "john" оценивается как true.

Ты ищешь:

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

Попробуйте что-то вроде этого

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню