views:

2132

answers:

4

I have the following multi-select box in a HTML form, where user can select one or more option.

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

When the user selects no option, the form is POSTed to a PHP backend but it creates no empty array value for $_POST['eng_0'] as if the field was not even on the form.

This is kind of like the unchecked checkbox that is not submitted problem.

Is there any way to have it POST the select even if there is no selected option? It can be in jQuery if that helps.

+3  A: 

Is there a reason you can't treat the situation where the array isn't set as if it was sent with no contents?

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

EDIT:

Add a hidden field whenever the multiple select is present in your form:

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

Then check:

if (!isset($_POST['eng_0']) && isset($_POST['eng_0_exists']))
    $_POST['eng_0'] = array();
Matt Bridges
I don't know if the array was not submitted because:1) The user did not choose any option2) The control was not even there on the form (the form is generated dynamically, using a quite complex algorithm).These are two different scenarios for me and I would like to be able to tell what is going on.
Vincent
+2  A: 

If your form is generated dynamically, you could include a hidden form element with the same name that contains a dummy value. Then, just ignore the dummy value.

scompt.com
+2  A: 

You can add a - please select - entry and preselect it.

<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>
tharkun
A: 

what if even when the user selects it, nothing about the select arrives in the $_POST?

              <div id="control">
            <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>
        </div>            

When I do print_r($_POST); on the other side the output is simply: Array ( [acao] => add [id] => 3 ) and no sign of the select tag, even when I change the value on the other side;

SparK