วิธีการรับค่าที่เลือกหลายกล่องเลือกใน 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 ดังนั้นค่าที่เลือกจะเข้าถึงได้อย่างไรในหน้า display.php โดยใช้$_GET[]อาร์เรย์


คุณได้รับอนุญาตให้เปลี่ยนชื่อselect2หรือไม่ หรือคนอื่นควบคุมแบบฟอร์ม?
Damian Yerrick

คำตอบ:


393

ถ้าคุณต้องการให้ PHP $_GET['select2']เป็นอาร์เรย์ของตัวเลือกให้เพิ่มเครื่องหมายวงเล็บเหลี่ยมลงในชื่อขององค์ประกอบที่เลือกดังนี้:<select name="select2[]" multiple …

จากนั้นคุณสามารถ acces อาร์เรย์ในสคริปต์ PHP ของคุณ

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

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

$_GETอาจถูกทดแทนโดย$_POSTขึ้นอยู่กับ<form method="…"ค่า


1
สำหรับฉันดูเหมือนว่าเบราว์เซอร์นั้นจะไม่ส่งโพสต์ / รับ - พารามิเตอร์หากไม่มีการเลือกหลายตัวเลือก คุณจะบังคับให้มีอาร์เรย์ว่างได้อย่างไร
emfi

ฉันต้องใช้ $ _POST ['select2'] แทน $ _GET ['select2']
Kyle Bridenstine

2
นี่เป็นคำตอบเก่า แต่นี่เป็นคำตอบที่ทำให้เข้าใจผิด! (name = "select2 []") ถูกต้องตามที่ @Coufu ตอบแล้ว!
ฉันไม่ได้

@emfi หากคุณต้องการส่งพารามิเตอร์ต้องมีค่า; คุณสามารถเพิ่ม "เลือก" ลงในแท็ก (เช่น<option value="" selected></option>) หากคุณสามารถทนได้ว่ามีตัวเลือกเริ่มต้นในรายการ คุณยังสามารถใช้ 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

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

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) ไม่แยกค่าเมื่อรวมเข้ากับสตริงเดี่ยวดังนั้นจึงไม่สามารถแยกสตริงกลับเป็นค่าในภายหลังได้
charlie

คำตอบนี้ให้ทิศทางที่จำเป็นแก่ฉัน ขอบคุณ.
Oleg Popov

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.