Como obter vários valores selecionados da caixa de seleção em php?

240

Eu tenho um formulário html que possui uma caixa de listagem de seleção na qual você pode selecionar vários valores porque sua propriedade múltipla está definida como múltipla. Considere que o método do formulário é 'GET'. O código html para o formulário é o seguinte:

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

Quero exibir os valores selecionados na caixa de listagem selecionada na página display.php. Então, como os valores selecionados são acessados ​​na página display.php usando $_GET[]array.

Param-Ganak
fonte
Você pode renomear select2? Ou alguém controla o formulário?
Damian Yerrick

Respostas:

393

Se você deseja que o PHP trate $_GET['select2']como uma matriz de opções, adicione colchetes ao nome do elemento select como este:<select name="select2[]" multiple …

Então você pode acessar a matriz no seu script PHP

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

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

$_GETpode ser substituído $_POSTdependendo do <form method="…"valor.

Alex Jasmin
fonte
1
para mim, parece que esse navegador não envia o parâmetro post / get-se nada foi selecionado na seleção múltipla. como você pode forçar a ter uma matriz vazia?
EMFI
Eu tive que usar $ _POST [ 'select2'] em vez de $ _GET [ 'select2']
Kyle Bridenstine
2
Esta é uma resposta antiga, mas é uma resposta enganosa! (name = "select2 []") está correto quando o @Coufu respondeu!
meYnot
@emfi Se você deseja que o parâmetro seja enviado, deve haver um valor; você pode adicionar "selecionado" à tag (ou seja <option value="" selected></option>) se você tolerar ter uma opção padrão na lista. Você também pode usar CSS para tornar a opção padrão invisível; no entanto, se alguém selecionar uma opção diferente, desmarcará tudo. Você pode terminar sem que nenhum valor seja retornado. Então .. não há solução limpa usando GET.
Apraetor 5/03
1
Adicionar [] funciona para mim tanto no POST quanto no GET, mas o URI resultante (com GET) é péssimo demais (..multiselect.php? Ms% 5B% 5D = 1 e ms% 5B% 5D = 2)
Teson
182

Mudança:

<select name="select2" ...

Para:

<select name="select2[]" ...
Coufu
fonte
Em alguns casos, por que isso ainda não funciona? Não estou obtendo sucesso com isso.
Mike Kormendy
35

Use o programa a seguir para selecionar os vários valores na caixa de seleção.

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/>";
}

?>
rekha_sri
fonte
35

Você pode usar esse código para recuperar valores da caixa de combinação de seleção múltipla

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;
}
?>
Abdul Kalam Azad
fonte
7
    <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>

Você pode iterá-lo diretamente assim

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

ou você pode fazer assim

$selectvalue=$_GET['select2'];
foreach ($selectvalue as $value)
    echo $value."\n"; 
Vivek
fonte
5

Isso exibirá os valores selecionados:

<?php

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

?>
ahmed
fonte
3
Isso tem várias falhas: 1) o OP estava usando o método GET; 2) está faltando a etapa mais importante de anexar colchetes ao nome do elemento do formulário, como name="select2[]".
22615 charlie
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"); 
         } 
         ...

         ...
    }
?>
Rynika
fonte
2

Você poderia fazer assim também. Funcionou para mim.

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

Em seguida, faça a seleção múltipla seguindo o código PHP abaixo. Imprime os vários valores selecionados de acordo.

$shift=$_POST['selectDuration'];

print_r($shift);
Dulith De Costa
fonte
0

Corrijo o meu problema com javascript + HTML. Primeiro eu verifico as opções selecionadas e as salvo em um campo oculto do meu formulário:

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

Em seguida, recebo por esse campo e recebo toda a string ;-) Espero que funcione mais para alguém. Obrigado a todos.

Drako
fonte
1
Isso tem várias falhas: 1) depende do JavaScript estar disponível; 2) não separa os valores ao uni-los em uma única sequência, tornando impossível dividir a sequência em valores posteriormente.
22615 charlie
Essa resposta me dá a direção necessária. THX.
Oleg Popov
0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
SwR
fonte