Wie bekomme ich mehrere ausgewählte Werte des Auswahlfeldes in PHP?


240

Ich habe ein HTML-Formular mit einem Auswahllistenfeld, aus dem Sie mehrere Werte auswählen können, da die Eigenschaft multiple auf multiple festgelegt ist. Betrachten Sie die Formularmethode als 'GET'. Der HTML-Code für das Formular lautet wie folgt:

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

Ich möchte die ausgewählten Werte im Auswahllistenfeld auf der Seite display.php anzeigen. Wie wird auf die ausgewählten Werte zugegriffen, die auf der Seite display.php mithilfe eines $_GET[]Arrays aufgerufen werden?


Dürfen Sie umbenennen select2? Oder kontrolliert jemand anderes das Formular?
Damian Yerrick

Antworten:


393

Wenn Sie möchten, dass PHP $_GET['select2']als Array von Optionen behandelt wird, fügen Sie dem Namen des ausgewählten Elements einfach eckige Klammern hinzu :<select name="select2[]" multiple …

Dann können Sie auf das Array in Ihrem PHP-Skript zugreifen

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

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

$_GETkann durch $_POSTabhängig vom <form method="…"Wert ersetzt werden.


1
Für mich scheint der Browser den Post / Get-Parameter nicht zu senden, wenn bei der Mehrfachauswahl nichts ausgewählt wurde. Wie können Sie stattdessen ein leeres Array erzwingen?
EMFI

Ich musste $ _POST ['select2'] anstelle von $ _GET ['select2'] verwenden
Kyle Bridenstine

2
Dies ist eine alte Antwort, aber dies ist eine irreführende Antwort! (name = "select2 []") ist korrekt, da @Coufu geantwortet hat!
MeYnot

@emfi Wenn der Parameter gesendet werden soll, muss ein Wert vorhanden sein. Sie können dem Tag (dh <option value="" selected></option>) "ausgewählt" hinzufügen, wenn Sie eine Standardoption in der Liste tolerieren können. Sie können auch CSS verwenden, um die Standardoption unsichtbar zu machen. Wenn jedoch jemand eine andere Option auswählt, wird die Auswahl aller Elemente aufgehoben. Sie können ohne Wert zurückgegeben werden. Es gibt also keine saubere Lösung mit GET.
Apraetor

1
Das Hinzufügen von [] funktioniert für mich sowohl bei POST als auch bei GET, aber der resultierende URI (mit GET) ist einfach zu schrecklich (..multiselect.php? Ms% 5B% 5D = 1 & ms% 5B% 5D = 2)
Teson

182

Veränderung:

<select name="select2" ...

Zu:

<select name="select2[]" ...

Warum funktioniert dies in einigen Fällen immer noch nicht? Ich habe damit keinen Erfolg.
Mike Kormendy

35

Verwenden Sie das folgende Programm, um die mehreren Werte aus dem Auswahlfeld auszuwählen.

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

?>

35

Mit diesem Code können Sie Werte aus mehreren Kombinationsfeldern abrufen

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;
}
?>

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>

Sie können es direkt so iterieren

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

oder du kannst es so machen

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

5

Dies zeigt die ausgewählten Werte an:

<?php

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

?>

3
Dies hat mehrere Mängel: 1) Das OP verwendete die GET-Methode. 2) Es fehlt der wichtigste Schritt, eckige Klammern an den Namen des Formularelements anzuhängen, wie z 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"); 
         } 
         ...

         ...
    }
?>

2

Das könnte man auch so machen. Es hat für mich geklappt.

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

Nehmen Sie dann die Mehrfachauswahl aus dem folgenden PHP- Code. Die ausgewählten Mehrfachwerte werden entsprechend gedruckt.

$shift=$_POST['selectDuration'];

print_r($shift);

0

Ich behebe mein Problem mit Javascript + HTML. Zuerst überprüfe ich ausgewählte Optionen und speichere sie in einem versteckten Feld meines Formulars:

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

Als nächstes bekomme ich das Feld per Post und bekomme den ganzen String ;-) Ich hoffe, es wird für jemanden mehr funktionieren. Dank an alle.


1
Dies hat mehrere Mängel: 1) hängt vom verfügbaren JavaScript ab; 2) trennt die Werte nicht, wenn sie zu einer einzelnen Zeichenfolge zusammengefügt werden, sodass es unmöglich ist, die Zeichenfolge später wieder in Werte aufzuteilen.
Charlie

Diese Antwort gibt mir die notwendige Richtung. Vielen Dank.
Oleg Popov

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.