2012-03-23 3 views
0

У меня есть следующий код html. главная цель состоит в том, чтобы скрыть DIV, когда переменная из PHP части установлен в «s2» Я использую этот код:Любопытный феномен HTML в PHP «если» условие

<?php if(isset($Status) && $Status =="S0" OR $Status =="S2"):?> 

    <?php if(isset($Status) && $Status=="S0"): ?> 
     <div> 
      <label for="x1">x1</label> 
      <select name="x1" id="x1"> 
      <option value="<?php echo $x1;?>"></option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      </select> 
     </div> 
    <?php endif; ?> 
      some more divs 
    <?php endif; ?> 

curoius вещь о том, что когда я изменить:

<?php if(isset($Status) && $Status=="S0"): ?> 
      <div> 
       <label for="x1">x1</label> 
       <select name="x1" id="x1"> 
       <option value="<?php echo $x1;?>"></option> 
       <option value="1">1</option> 
       <option value="2">2</option> 
       </select> 
      </div> 
     <?php endif; ?> 

к:

 <div> 
      <label for="x1">x1</label> 
      <select style="display:<?php echo ($Status == "S2" ? 'none' : 'inline'); ?>;" name="x1" id="x1"> 
      <option value="<?php echo $x1;?>"></option> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      </select> 
     </div> 

все работает. явление заключается в том, что когда я отправлю форму, я получаю ошибку, что нет записей, даже если она заполняет php-эхо из db при использовании первого кода. используя последнее средство кода, все будет работать, и, например, будут отображаться ошибки. так что это немного странно для меня. различные типы статуса будут установлены в db, так что это не проблема. запрос, который я тестировал. я также попытался просто показать дивы Я хотел бы иметь, когда S0 Дано:

<?php if(isset($Status) && $Status =="S0"):?> 

и дивы, которые просто должны быть видны, когда s2 Дано:

<?php if(isset($Status) && $Status =="S2"):?> 

кто-нибудь там, кто может сказать мне, что я делаю неправильно? большое спасибо.

UPDATE:

хорошо, прежде всего спасибо за ответ на мой вопрос.

i добавил скобки и сменил & & на "и".

проблема, как представляется, значение с этой линии:

<option value="<?php echo $x1;?>"></option> 

на мой взгляд, даже если пользователь не может видеть, первый элемент из:

...?>">NOTHING IN HERE</option> 

значение для " НИЧЕГО В ЗДЕСЬ "должно быть эхо db. так что должен представить значение эха или я ошибаюсь?

ошибка, которая возникает и почему ничего не будет отправлено, говорит, что поле пусто. но с моей точки зрения это не так ?!

просто указать, почему я не хочу, чтобы отобразить первую запись:

я не люблю, когда пользователь видит выпадающий список и будет двойной пост, как:

капли вниз списка нажмите:

1 ->because this echoes the entry of the db. 
1 ->first option 
2 ->second option 
+0

2 чисто смысловые вещи; (1) не смешивать '&&' с 'OR', либо использовать' && || 'или' AND OR' (2) всегда использовать скобки, когда вы пишете IFs как с AND, так и с OR, даже если вы не используете " Думаю, что они необходимы - через 6 месяцев, вы пожелаете, чтобы у вас был :) – Joe

+0

Вы условно * все еще * неправильно. 'и' имеет более высокий приоритет, чем 'или', поэтому вам нужно использовать круглые скобки: например,' isset ($ Status) и ($ Status == "S0" или $ Status == "S2") ' – Borodin

+0

Если проблема * is *, что у вас ничего нет в элементе '

ответ

1

Вы должны исправить 1-й линии так:

<?php if(isset($Status) && ($Status =="S0" OR $Status =="S2")):?> 
0

Я вижу несколько ошибок в коде, но ничто из того, что я думаю, не вызвало бы то, что вы описали, хотя я не понимаю, какой из ваших примеров вызывает никаких записей сообщение об ошибке.

Во-первых, вы смешиваете && с OR, что заставляет выражение оцениваться иначе, чем вы ожидаете. Текстовые логические операторы (и or) идентичны символическим (&& и ||), за исключением их приоритет. Текстовые операторы группируются после на syymbolic них, так что у вас есть

if((isset($Status) && $Status =="S0") OR $Status =="S2") 

который вы должны переписать, как

if(isset($Status) and $Status =="S0" || $Status =="S2") 

или использовать круглые скобки, чтобы заставить значение приоритета

if(isset($Status) and ($Status =="S0" or $Status =="S2")) 

Во-вторых вы пропустили текст из опции x1, поэтому вместо

<option value="<?php echo $x1;?>"></option> 

вы должны иметь

<option value="<?php echo $x1;?>"><?php echo $x1;?></option> 

иначе ничего будет отображаться в раскрывающемся списке.

В противном случае я не вижу ничего, что могло бы привести к тому, что вы описали. Просьба уточнить, какой код дает вам ошибку.

+0

Я обновил свой вопрос до этого момента. –