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 object even if there is no selected option? It can be in jQuery if that helps.
Include
<input type="hidden" name="yourfield" value="" />
to your form where the name is the same as for yourmultiple="multiple"
select.It is unfortunate that browsers do not send empty form parameters for
multiple="multiple"
selects like they do for non-multiple selects or a normal inputs.Using a dummy value as proposed in the accepted answer is not a very clean solution.
(This question has nothing to do with jQuery)
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, if the value you get for that variable is
['dummy_value']
then you can treat that as meaning "nothing selected" in your code.You can add a - please select - entry and preselect it.
Add something like
if there is no $_POST, Post an empty string (nothing) is absolutely the most simple solution.
Here my solution for a Form with a
<select name="related[]" multiple>
just add the following line in the php section that handles the storing of your form:
Is there a reason you can't treat the situation where the array isn't set as if it was sent with no contents?
EDIT:
Add a hidden field whenever the multiple select is present in your form:
Then check: