How to get multiple selected values of select box in php?
Asked Answered
H

11

273

I have a html form which has a select list box from which you can select multiple values because its multiple property is set to multiple. Consider form method is 'GET'. The html code for the form is as follows:

<html>
    <head>
    <title>Untitled Document</title>
    </head>
    <body>
    <form id="form1" name="form1" method="get" action="display.php">
      <table width="300" border="1">
        <tr>
          <td><label>Multiple Selection </label>&nbsp;</td>
          <td><select name="select2" size="3" multiple="multiple" tabindex="1">
            <option value="11">eleven</option>
            <option value="12">twelve</option>
            <option value="13">thirette</option>
            <option value="14">fourteen</option>
            <option value="15">fifteen</option>
            <option value="16">sixteen</option>
            <option value="17">seventeen</option>
            <option value="18">eighteen</option>
            <option value="19">nineteen</option>
            <option value="20">twenty</option>
          </select>
          </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td><input type="submit" name="Submit" value="Submit" tabindex="2" /></td>
        </tr>
      </table>
    </form>
    </body>
    </html>

I want to display the selected values in select list box on display.php page. So how are the selected values accessed on display.php page using $_GET[] array.

Hoahoactzin answered 9/3, 2010 at 7:27 Comment(1)
Are you allowed to rename select2? Or does someone else control the form?Lagasse
P
429

If you want PHP to treat $_GET['select2'] as an array of options just add square brackets to the name of the select element like this: <select name="select2[]" multiple …

Then you can acces the array in your PHP script

<?php
header("Content-Type: text/plain");

foreach ($_GET['select2'] as $selectedOption)
    echo $selectedOption."\n";

$_GET may be substituted by $_POST depending on the <form method="…" value.

Pelag answered 9/3, 2010 at 7:52 Comment(5)
for me it seems, that browser does not send the post/get-parameter if nothing was selected of the multiple-select. how can you force to have an empty array, instead?Dinnie
I had to use $_POST['select2'] instead of $_GET['select2']Chalk
This is an old answer, but this is a misleading answer! (name="select2[]") is correct as @Coufu answered!Lepore
@Dinnie If you want the parameter to be sent there must be a value; you can add "selected" to the tag (ie <option value="" selected></option>) if you can tolerate having a default option in the list. You can also use CSS to make the default option invisible; however if someone selects a different option, then unselects everything.. you can wind up with no value being returned. So.. there's no clean solution using GET.Stelu
Adding [] works for me both on POST and GET, but the resulting URI (with GET) is just too awful (..multiselect.php?ms%5B%5D=1&ms%5B%5D=2)Alamo
N
200

Change:

<select name="select2" ...

To:

<select name="select2[]" ...
Nominal answered 9/3, 2010 at 7:54 Comment(1)
In some cases, why might this still not work? I am not getting success with this.Hemophilia
P
45

You can use this code to retrieve values from multiple select combo box

HTML:

<form action="c3.php" method="post">
  <select name="ary[]" multiple="multiple">
    <option value="Option 1" >Option 1</option>
    <option value="Option 2">Option 2</option>
    <option value="Option 3">Option 3</option>
    <option value="Option 4">Option 4</option>
    <option value="Option 5">Option 5</option>
  </select>
  <input type="submit">
</form>

PHP:

<?php
$values = $_POST['ary'];

foreach ($values as $a){
    echo $a;
}
?>
Penholder answered 4/11, 2010 at 11:33 Comment(0)
A
35

Use the following program for select the multiple values from select box.

multi.php

<?php
print <<<_HTML_
<html>
        <body>
                <form method="post" action="value.php">
                        <select name="flower[ ]" multiple>
                                <option value="flower">FLOWER</option>
                                <option value="rose">ROSE</option>
                                <option value="lilly">LILLY</option>
                                <option value="jasmine">JASMINE</option>
                                <option value="lotus">LOTUS</option>
                                <option value="tulips">TULIPS</option>
                        </select>
                        <input type="submit" name="submit" value=Submit>
                </form>
        </body>
</html>
_HTML_

?>

value.php

<?php
foreach ($_POST['flower'] as $names)
{
        print "You are selected $names<br/>";
}

?>
Alehouse answered 9/3, 2010 at 8:31 Comment(0)
T
8
    <html>
<head>
<title>Untitled Document</title>
</head>
<body>
<form id="form1" name="form1" method="get" action="display.php">
  <table width="300" border="1">
    <tr>
      <td><label>Multiple Selection </label>&nbsp;</td>
      <td><select name="select2[]" size="3" multiple="multiple" tabindex="1">
        <option value="11">eleven</option>
        <option value="12">twelve</option>
        <option value="13">thirette</option>
        <option value="14">fourteen</option>
        <option value="15">fifteen</option>
        <option value="16">sixteen</option>
        <option value="17">seventeen</option>
        <option value="18">eighteen</option>
        <option value="19">nineteen</option>
        <option value="20">twenty</option>
      </select>
      </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Submit" tabindex="2" /></td>
    </tr>
  </table>
</form>
</body>
</html>

You can iterate it directly like this

foreach ($_GET['select2'] as $value)
    echo $value."\n";

or you can do it like this

$selectvalue=$_GET['select2'];
foreach ($selectvalue as $value)
    echo $value."\n"; 
Tache answered 21/12, 2013 at 6:10 Comment(0)
O
5

This will display the selected values:

<?php

    if ($_POST) { 
        foreach($_POST['select2'] as $selected) {
            echo $selected."<br>";
        }
    }

?>
Oneeyed answered 27/5, 2012 at 8:14 Comment(1)
This has multiple flaws: 1) the OP was using GET method; 2) it's lacking the most important step of appending square brackets to the form element name, like name="select2[]".Runny
S
5
// CHANGE name="select2" TO name="select2[]" THEN
<?php
  $mySelection = $_GET['select2'];

  $nSelection = count($MySelection);

  for($i=0; $i < $nSelection; $i++)
   {
      $numberVal = $MySelection[$i];

        if ($numberVal == "11"){
         echo("Eleven"); 
         }
        else if ($numberVal == "12"){
         echo("Twelve"); 
         } 
         ...

         ...
    }
?>
Snorter answered 18/6, 2013 at 20:9 Comment(0)
C
4

You could do like this too. It worked out for me.

<form action="ResultsDulith.php" id="intermediate" name="inputMachine[]" multiple="multiple" method="post">
    <select id="selectDuration" name="selectDuration[]" multiple="multiple"> 
        <option value="1 WEEK" >Last 1 Week</option>
        <option value="2 WEEK" >Last 2 Week </option>
        <option value="3 WEEK" >Last 3 Week</option>
         <option value="4 WEEK" >Last 4 Week</option>
          <option value="5 WEEK" >Last 5 Week</option>
           <option value="6 WEEK" >Last 6 Week</option>
    </select>
     <input type="submit"/> 
</form>

Then take the multiple selection from following PHP code below. It print the selected multiple values accordingly.

$shift=$_POST['selectDuration'];

print_r($shift);
Comines answered 16/8, 2016 at 4:54 Comment(0)
T
0

I fix my problem with javascript + HTML. First i check selected options and save its in a hidden field of my form:

for(i=0; i < form.select.options.length; i++)
   if (form.select.options[i].selected)
    form.hidden.value += form.select.options[i].value;

Next, i get by post that field and get all the string ;-) I hope it'll be work for somebody more. Thanks to all.

Tartuffe answered 16/4, 2013 at 19:25 Comment(2)
This has multiple flaws: 1) is depending on the JavaScript being available; 2) does not separate the values when joining them into a single string, thus making it imposible to split the string back into values later on.Runny
This answer gives me the necessary direction. Thx.Latricialatrina
C
0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
Caespitose answered 7/10, 2013 at 5:51 Comment(0)
H
-1

form submit with enctype="multipart/form-data"

Hugo answered 2/1, 2023 at 17:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.