I have a select multiple list that has a few items in it. It is a list of IP addresses for an ACL. People can add/remove IPs, and then save the list. However, unless you select an item on the list, $_POST[selectName]
does not contain any values. How can I accomplish this? I know I can do this with javascript but I would rather stick to PHP.
Asked
Active
Viewed 2.0k times
7
-
4The browser doesn't send those values to PHP, you'll need Javascript to manipulate the submission process. Hence, there is no PHP only way to do this – Pekka Mar 03 '13 at 20:30
-
Have you seen this? http://stackoverflow.com/questions/2407284/how-to-get-multiple-selected-values-of-select-box-in-php – Kamil Mar 03 '13 at 20:31
-
2The traditional way to do this is use making the select multi-selectable, then on form submission have javascript select all options. – Jodes Mar 03 '13 at 20:38
2 Answers
18
Edit/corrected: You need JS. There is no way to send all (selected and not selected) options via POST. You have to programatically select all options before submission.
File with form (file1.php):
<script type="text/javascript">
function selectAll()
{
selectBox = document.getElementById("someId");
for (var i = 0; i < selectBox.options.length; i++)
{
selectBox.options[i].selected = true;
}
}
</script>
<form method="post" action="file2.php">
<select id="someId" name="selectName[]" multiple>
<option value="123.123.123.123">123.123.123.123</option>
<option value="234.234.234.234">234.234.234.234</option>
</select>
<input type="submit" name="submit" value=Submit onclick="selectAll();">
</form>
File that receives POST (file2.php):
<?php
foreach ($_POST['selectName'] as $item)
{
print "$item<br/>";
}
?>

Kamil
- 13,363
- 24
- 88
- 183
-
He wants *all* the available values sent from a `multiple`, not just the selected ones. – Pekka Mar 03 '13 at 20:37
-
-
-
-
That looks okay, although it might be better to bind the selectAll() to the form's `submit` event (ie. `onsubmit`) – Pekka Mar 03 '13 at 20:57
1
Just to tack on this you could also use the jQuery version of @Kamil's code which is a little simpler than the loop:
<script type="text/javascript">
jQuery('[name="form1"]').on("submit",selectAll);
function selectAll()
{
jQuery('[name="selectName[]"] option').prop('selected', true);
}
</script>
<form name="form1" method="post" action="file2.php">
<select id="someId" name="selectName[]" multiple>
<option value="123.123.123.123">123.123.123.123</option>
<option value="234.234.234.234">234.234.234.234</option>
</select>
<input type="submit" name="submit" value=Submit onclick="selectAll();">
</form>

RestlessWeb
- 143
- 1
- 8