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[]array.를 사용하여 display.php 페이지에서 선택된 값에 어떻게 액세스합니까 ?


이름을 바꿀 수 select2있습니까? 아니면 다른 사람이 양식을 제어합니까?
Damian Yerrick

답변:


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

$ _GET [ 'select2'] 대신 $ _POST [ 'select2']를 사용해야했습니다
Kyle Bridenstine

2
이것은 오래된 답변이지만 오해의 소지가 있습니다! @Coufu가 답변 한대로 (name = "select2 []")가 정확합니다!
meYnot

@emfi 매개 변수를 보내려면 값이 있어야합니다. <option value="" selected></option>목록에 기본 옵션이있는 것을 허용 할 수 있다면 태그 (예 :)에 "selected"를 추가 할 수 있습니다 . CSS를 사용하여 기본 옵션을 보이지 않게 할 수도 있습니다. 그러나 누군가 다른 옵션을 선택하면 모든 항목을 선택 취소합니다. 값을 반환하지 않고 종료 할 수 있습니다. 따라서 GET을 사용하는 깨끗한 솔루션은 없습니다.
apraetor

1
[]를 추가하면 POST와 GET에서 모두 작동하지만 결과 URI (GET 포함)는 너무 끔찍합니다 (..multiselect.php? ms % 5B % 5D = 1 & ms % 5B % 5D = 2)
Teson

182

변화:

<select name="select2" ...

에:

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

어떤 경우에는 왜 이것이 여전히 작동하지 않습니까? 나는 이것으로 성공하지 못했습니다.
Mike Kormendy 2016 년

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[]".
Charlie 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

당신도 이것처럼 할 수 있습니다. 그것은 나를 위해 일했다.

<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) 단일 문자열로 결합 할 때 값을 분리하지 않으므로 나중에 문자열을 값으로 다시 분할 할 수 없습니다.
찰리

이 대답은 필요한 방향을 알려줍니다. 고마워.
Oleg Popov

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.