¿Cómo obtener múltiples valores seleccionados del cuadro de selección en php?

240

Tengo un formulario html que tiene un cuadro de lista de selección desde el que puede seleccionar múltiples valores porque su propiedad múltiple está establecida en múltiple. Considere que el método de formulario es 'GET'. El código html para el formulario es el siguiente:

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

Quiero mostrar los valores seleccionados en el cuadro de lista de selección en la página display.php. Entonces, ¿cómo se accede a los valores seleccionados en la página display.php usando $_GET[]array?

Param-Ganak
fuente
¿Se te permite cambiar el nombre select2? ¿O alguien más controla el formulario?
Damian Yerrick

Respuestas:

393

Si desea que PHP lo trate $_GET['select2']como una matriz de opciones, simplemente agregue corchetes al nombre del elemento seleccionado de esta manera:<select name="select2[]" multiple …

Entonces puede acceder a la matriz en su script PHP

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

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

$_GETpuede ser sustituido por $_POSTdependiendo del <form method="…"valor.

Alex Jasmin
fuente
1
para mí parece que ese navegador no envía el parámetro post / get si no se seleccionó nada de la selección múltiple. ¿Cómo puedes forzar a tener una matriz vacía en su lugar?
emfi
Tuve que usar $ _POST ['select2'] en lugar de $ _GET ['select2']
Kyle Bridenstine
2
Esta es una respuesta antigua, ¡pero esta es una respuesta engañosa! (name = "select2 []") es correcto ya que @Coufu respondió!
meYnot
@emfi Si desea que se envíe el parámetro, debe haber un valor; puede agregar "seleccionado" a la etiqueta (es decir <option value="" selected></option>) si puede tolerar tener una opción predeterminada en la lista. También puede usar CSS para hacer invisible la opción predeterminada; sin embargo, si alguien selecciona una opción diferente, luego deselecciona todo ... puede terminar sin que se devuelva ningún valor. Entonces ... no hay una solución limpia usando GET.
Apraetor
1
Agregar [] funciona para mí tanto en POST como en GET, pero el URI resultante (con GET) es demasiado horrible (..multiselect.php? Ms% 5B% 5D = 1 & ms% 5B% 5D = 2)
Teson
182

Cambio:

<select name="select2" ...

A:

<select name="select2[]" ...
Coufu
fuente
En algunos casos, ¿por qué podría esto seguir sin funcionar? No estoy teniendo éxito con esto.
Mike Kormendy
35

Use el siguiente programa para seleccionar los valores múltiples del cuadro de selección.

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

Puede usar este código para recuperar valores del cuadro combinado de selección múltiple

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

Puedes iterarlo directamente así

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

o puedes hacerlo así

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

Esto mostrará los valores seleccionados:

<?php

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

?>
ahmed
fuente
3
Esto tiene múltiples fallas: 1) el OP estaba usando el método GET; 2) le falta el paso más importante de agregar corchetes al nombre del elemento de formulario, como name="select2[]".
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
fuente
2

También podrías hacer esto. A mí me funcionó.

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

Luego tome la selección múltiple del siguiente código PHP a continuación. Imprime los valores múltiples seleccionados en consecuencia.

$shift=$_POST['selectDuration'];

print_r($shift);
Dulith De Costa
fuente
0

Arreglo mi problema con javascript + HTML. Primero verifico las opciones seleccionadas y las guardo en un campo oculto de mi formulario:

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

A continuación, recibo por correo ese campo y obtengo toda la cadena ;-) Espero que funcione para alguien más. Gracias a todos.

Drako
fuente
1
Esto tiene múltiples fallas: 1) depende de que JavaScript esté disponible; 2) no separa los valores al unirlos en una sola cadena, por lo que es imposible dividir la cadena en valores más adelante.
Charlie
Esta respuesta me da la dirección necesaria. Gracias.
Oleg Popov
0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
SwR
fuente