Любопытный феномен HTML в PHP условие if - PullRequest
0 голосов
/ 23 марта 2012

У меня есть следующий HTML-код. главная цель - скрыть div, когда переменная из части php установлена ​​в "s2". Я использую этот код:

<?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; ?>

вещь о курии - это когда я меняюсь:

<?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 из БД при использовании первого кода. с помощью последнего кода означает, что все работает и сообщения об ошибках, например, будут отображаться. так что это немного странно для меня. Различные типы статуса будут установлены в БД, так что это не проблема. запрос, который я также проверял. я также пытался показать div, которые мне нравятся, когда задан S0:

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

и элементы div, которые просто должны быть видны при задании s2:

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

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

UPDATE:

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

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

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

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

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

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

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

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

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

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

раскрывающийся список при нажатии:

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

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Вы должны исправить 1-ую строку следующим образом:

<?php if(isset($Status) && ($Status =="S0" OR $Status =="S2")):?>
0 голосов
/ 23 марта 2012

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

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

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>

, иначе ничего не появится ввыпадающий список.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...