За последние 24 часа нас посетили 205699 программистов и 4643 робота. Сейчас ищет 2141 программист ...

Не работает условие OR

Тема в разделе "PHP для новичков", создана пользователем skitskis, 27 янв 2018.

Метки:
  1. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    Всем доброго времени суток )))
    PHP:
    1. <?php if($data['status'] != 3 OR !isset($prava['edit_content'])):?>
    2.                 <a class="button_i" href="#">Настройки</a>
    3.                 <?php endif;?>
    Не могу понять, не работает условие OR.
    Отдельно работает каждое, вместе не хотят. В чем проблема?
     
  2. vadimka0216

    vadimka0216 Новичок

    С нами с:
    27 янв 2018
    Сообщения:
    9
    Симпатии:
    1
    1. В php вместо OR пишут "|" вроде как
    2. PHP:
      1. <?php if(($data['status'] != 3) | (!isset($prava['edit_content']))):?>
      2.               <a class="button_i" href="#">Настройки</a>
      3.                <?php endif;?>
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Наверное с приоритетами связано. у or другой приоритет. Пишите ||
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
  5. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    Я так тоже уже побывал | | , все ровно не срабатывает. Все ровно выдает кнопку когда есть $prava['edit_content'].
    PHP:
    1. <?php if(!isset($prava['edit_content'])):?>
    2.                 <a class="button_i" href="#">Настройки</a>
    3.                 <?php endif;?>
    Если оставить только одно условие, то все ОК. Но мне нужно 2 и более...
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    иссет проверяет наличие переменной, а не контента, а ты попробуй empty()
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    в скобки условия возьми
    PHP:
    1. <?php if(($data['status'] != 3) OR (!isset($prava['edit_content']))):?>
     
  8. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    empty() не подходит.
    У меня либо есть $prava['edit_content'] либо нет!
    $prava['edit_content'] я формирую при авторизации пользователя, если у пользователя нет прав на редактирование, то я записываю это в сессию как $_SESSION['auth']['privilege']['edit_content'] = TRUE;
    И обратно, если есть права на редактирование, то я ничего не делаю. Тогда $_SESSION['auth']['privilege']['edit_content'] вообще нет.

    Я и проверяю на существование.

    И проблема в том что $_SESSION['auth']['privilege']['edit_content'] существует, то есть равна 1. А условие не срабатывает и все ровно выдает <a class="button_i" href="#">Настройки</a>.
    --- Добавлено ---
    Брал уже )))) все ровно не работает... Бред какой то, условие простейшее, а оно не работает.

    Как вариант, можно так:

    PHP:
    1. <?php if($data['status'] != 3):?>
    2.     <?php if(!isset($prava['edit_content'])):?>
    3.  
    4.     <a class="button_i" href="#">Настройки</a>
    5.  
    6.     <?php endif;?>
    7. <?php endif;?>
    Но это, мягко говоря.... жесть )))
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Так это and, а не OR. Если должно сработать два условия - это "и", если любое из двух - это "или".
     
  10. skitskis

    skitskis Новичок

    С нами с:
    21 янв 2018
    Сообщения:
    6
    Симпатии:
    0
    Почему AND, должно быть или OR. Просто выше я выставил по приоритету. если $data['status']!=3, то тогда в любом случае не показываю.
    Может быть так: $data['status'] == 2 ИЛИ !isset($prava['edit_content'] ----- тогда показываем
    Может быть так: $data['status'] == 2 ИЛИ isset($prava['edit_content'] ----- тогда не показываем
    Может быть так: $data['status']!=3 ИЛИ isset($prava['edit_content'] ----- тогда точно не показываем, так как два условия дают TRUE
     
  11. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @skitskis, нарисуйте лучше табличку... в колонках - возможные значения $prava['edit_content'], в строчках - возможные значения $data['status'], в ячейках соответствующих пересечению - статус (показывать/не показывать, то есть да/нет).
    Таким образом увидите требуемые множества... Ну и условия подобрать можно будет.
    Ещё в первом сообщении, если условие выполняется - отображается пункт "настройки". В следующих сообщениях вроде говорите об обратном, что этот пункт не должен отображаться при выполнении условий, указанных в первом сообщении.