Подтвердить что ты не робот

Как POST пуст <select.. multiple> HTML-элементы, если пустые?

У меня есть следующий многоэкранный выбор в HTML-форме, где пользователь может выбрать один или несколько параметров.

<select id="eng_0" name="eng_0[]" multiple size="3">
  <option value="Privilégier">Privilégier</option>
  <option value="Accepté">Accepté</option>
  <option value="Temporaire">Temporaire</option>
</select>

Когда пользователь не выбирает никакой вариант, форма POSTed на PHP-сервере, но не создает пустого значения массива для $_POST ['eng_0'], как если бы поле не было даже в форме.

Это похоже на непроверенный флажок, который не отправлен.

Есть ли способ получить POST объекта select, даже если нет выбранного варианта? Это может быть в jQuery, если это помогает.

4b9b3361

Ответ 1

Если ваша форма генерируется динамически, вы можете включить скрытый элемент формы с тем же именем, который содержит фиктивное значение. Затем просто игнорируйте фиктивное значение, если значение, которое вы получаете для этой переменной, ['dummy_value'], тогда вы можете рассматривать это как значение "ничего не выбрано" в вашем коде.

Ответ 2

Есть ли причина, по которой вы не можете рассматривать ситуацию, когда массив не настроен так, как если бы он был отправлен без содержимого?

if (!isset($_POST['eng_0']))
    $_POST['eng_0'] = array();

EDIT:

Добавьте скрытое поле, если в вашей форме присутствует множественный выбор:

<input type="hidden" name="eng_0_exists" value="1"/>

Затем проверьте:

if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
    $_POST['eng_0'] = array();

Ответ 3

Вы можете добавить a - выберите select - entry и выберите его.

<select id="eng_0" name="eng_0[]" multiple size="3">
  <option value="nothing" selected="selected">- please select -</option>
  <option value="Privilégier">Privilégier</option>
  <option value="Accepté">Accepté</option>
  <option value="Temporaire">Temporaire</option>
</select>

Ответ 4

что, если даже когда пользователь его выберет, ничего не будет найдено в $_POST?

            <form action="cart.php" method="POST">
                <input type="hidden" id="acao" name="acao" value="add" />
                <input type="hidden" id="id" name="id" value="<?=$cnt->cnt_codigo?>" />
                <?php
                    $resOpc = mysql_query("SELECT * FROM loja_opcionais ORDER BY descricao")or die(mysql_error());
                    if(mysql_num_rows($resOpc) > 0){
                ?>
                <select id="opcional" nome="opcional">
                    <?php
                        while($opc = mysql_fetch_object($resOpc)){
                    ?>
                    <option value="<?=$opc->descricao?>"><?=$opc->descricao?></option>
                    <?php
                        }
                    ?>
                </select>
                <?php
                    }
                ?>
                <button class="botao" type="submit">Adicionar ao Carrinho</button>
            </form>

Когда я делаю print_r ($ _ POST); с другой стороны, выход просто: Array ([acao] = > добавить [id] = > 3) и никаких признаков тега select, даже когда я изменяю значение с другой стороны;

Ответ 5

Добавьте что-то вроде

    $("#field").change(function() {
      if (($("#field").val() || []) == "") $("form").append("<input type='hidden' name='field' value=''>");
    });

Ответ 6

если нет $_POST, Post пустая строка (ничего) является абсолютно самым простым решением.

Здесь мое решение для формы с <select name="related[]" multiple>

просто добавьте следующую строку в раздел php, который обрабатывает сохранение вашей формы:

if (!isset($_POST['related'])) $_POST['related']="";

Ответ 7

Включите <input type="hidden" name="yourfield" value="" /> в свою форму, где имя будет таким же, как для вашего multiple="multiple".


К сожалению, браузеры не отправляют пустые параметры формы для multiple="multiple", как это делают для не-множественных выборок или обычных входов.

Использование фиктивного значения, предложенного в принятом ответе, не является очень чистым решением.

(Этот вопрос не имеет ничего общего с jQuery)

Ответ 8

Если вы добавите скрытый ввод перед элементом множественного выбора, он отправит скрытое входное значение, если ни один из элементов множественного выбора не был выбран. Как только вы выберете вариант, однако, это выбранное значение используется вместо этого.

Таким образом, я смог отличить 2 разных сценария в Laravel/php, будучи:

  • Задайте все myitems пустым (требуется скрытый ввод, поэтому PHP получает пустую строку для myitems)
  • Обновите другие свойства модели, не касаясь myitems (поэтому исключая любой ввод myitems формы. PHP не получит ключ myitems)

Пример кода:

<input type="hidden" name="myitems" value="" />
<select name="myitems[]" multiple>
  <option value="1">Foo</option>
  <option value="2">Bar</option>
</select>