PHPで選択ボックスの複数の選択された値を取得するにはどうすればよいですか?


240

複数のプロパティが複数に設定されているため、複数の値を選択できる選択リストボックスがあるhtmlフォームがあります。フォームメソッドが「GET」であると考えてください。フォームのHTMLコードは次のとおりです。

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

選択した値をdisplay.phpページの選択リストボックスに表示したい。では、選択された値は、$_GET[]配列を使用してdisplay.phpページでどのようにアクセスされますか。


名前を変更できselect2ますか?または、他の誰かがフォームを制御していますか?
Damian Yerrick 2017

回答:


393

PHPを$_GET['select2']オプションの配列として扱いたい場合は、次のように角括弧をselect要素の名前に追加します<select name="select2[]" multiple …

次に、PHPスクリプトで配列にアクセスできます

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

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

$_GET$_POSTによっては代用される場合があり<form method="…"ます。


1
私にとっては、複数選択で何も選択されていない場合、ブラウザはpost / get-parameterを送信しないようです。代わりに、空の配列を強制するにはどうすればよいですか?
emfi 2015年

$ _GET ['select2']の代わりに$ _POST ['select2']を使用する必要がありました
Kyle Bridenstine

2
これは古い答えですが、これは誤解を招く答えです!(name = "select2 []")は、@ Coufuが回答したとおりです。
meYnot

@emfiパラメータを送信する場合は、値が必要です。<option value="" selected></option>リストにデフォルトのオプションがあることを許容できる場合は、「選択済み」をタグ(つまり)に追加できます。CSSを使用してデフォルトのオプションを非表示にすることもできます。ただし、誰かが別のオプションを選択した場合、すべての選択を解除します。値が返されない状態になる可能性があります。したがって、GETを使用したクリーンなソリューションはありません。
前任者

1
[]の追加はPOSTとGETの両方で機能しますが、結果のURI(GETを使用)はひどい(..multiselect.php?ms%5B%5D = 1&ms%5B%5D = 2)
Teson

182

変化する:

<select name="select2" ...

に:

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

場合によっては、これがまだ機能しないのはなぜですか?私はこれで成功していません。
マイクコルメンディ16年

35

次のプログラムを使用して、選択ボックスから複数の値を選択します。

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

このコードを使用して、複数の選択コンボボックスから値を取得できます

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>

このように直接反復できます

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

またはあなたはこのようにそれを行うことができます

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

5

選択した値が表示されます。

<?php

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

?>

3
これには複数の欠陥があります。1)OPがGETメソッドを使用していた。2)のように、フォーム要素名に角括弧を追加する最も重要なステップが欠けていname="select2[]"ます。
チャーリー2015年

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

あなたもこのようにすることができます。それは私のために働いた。

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

次に、以下のPHPコードから複数を選択します。選択した複数の値を適宜印刷します。

$shift=$_POST['selectDuration'];

print_r($shift);

0

JavaScript + HTMLの問題を修正します。まず、選択したオプションをチェックして、フォームの非表示フィールドに保存します。

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

次に、そのフィールドをポストして取得し、すべての文字列を取得します;-)私はそれが誰かのために働くことを願っています。ありがとうございます。


1
これには複数の欠陥があります。1)使用可能なJavaScriptに依存します。2)値を単一の文字列に結合するときに値を分離しないため、後で文字列を値に分割することは不可能になります。
チャーリー2015年

この答えは私に必要な方向を与えます。どうも。
Oleg Popov 2017

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.