Php seçim kutusunun birden çok seçilen değerleri almak nasıl?


240

Birden fazla özelliği birden ayarlandığı için birden çok değer seçebilirsiniz bir seçim listesi kutusu olan bir html formu var. Form yönteminin 'GET' olduğunu düşünün. Formun html kodu aşağıdaki gibidir:

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

Seçilen değerleri display.php sayfasındaki liste kutusunda seçmek istiyorum. Öyleyse seçilen değerler display.php sayfasında $_GET[]dizi kullanılarak nasıl erişilebilir .


Yeniden adlandırma izniniz var select2mı? Yoksa başka biri formu kontrol ediyor mu?
Damian Yerrick

Yanıtlar:


393

PHP'nin $_GET['select2']bir dizi seçenek olarak işlemesini istiyorsanız , select öğesinin adına böyle köşeli parantez eklemeniz yeterlidir :<select name="select2[]" multiple …

Sonra PHP betiğinizde diziye erişebilirsiniz

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

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

$_GETdeğere $_POSTbağlı olarak ikame edilebilir <form method="…".


1
benim için, çoklu seçimden hiçbir şey seçilmediyse tarayıcı post / get-parametresini göndermiyor gibi görünüyor. bunun yerine boş bir diziye sahip olmayı nasıl zorlayabilirsiniz?
emfi

$ _GET ['select2'] yerine $ _POST ['select2'] kullanmalıydım
Kyle Bridenstine

2
Bu eski bir cevap, ama bu yanıltıcı bir cevap! (name = "select2 []") @Coufu'nun yanıtladığı gibi doğrudur!
meYnot

@emfi Parametrenin gönderilmesini istiyorsanız bir değer olmalıdır; <option value="" selected></option>listede varsayılan bir seçeneğe sahip olup olmadığınızı tolere edebiliyorsanız etikete "seçili" ekleyebilirsiniz (örn. ). Varsayılan seçeneği görünmez yapmak için CSS'yi de kullanabilirsiniz; ancak birisi farklı bir seçenek seçerse, o zaman her şeyin seçimini kaldırır .. hiçbir değer döndürülmeden kurtarabilirsiniz. Yani .. GET kullanarak temiz bir çözüm yok.
Apraetor

1
[] Eklemek hem POST hem de GET'te benim için çalışıyor, ancak ortaya çıkan URI (GET ile) çok korkunç (..multiselect.php? Ms% 5B% 5D = 1 & ms% 5B% 5D = 2)
Teson

182

Değişiklik:

<select name="select2" ...

Kime:

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

Bazı durumlarda, bu neden hala işe yaramayabilir? Bununla başarı elde edemiyorum.
Mike Kormendy

35

Seçim kutusundan birden çok değer seçmek için aşağıdaki programı kullanı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/>";
}

?>

35

Bu kodu, birden çok seçim açılan kutusundan değer almak için kullanabilirsiniz

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>

Doğrudan bu şekilde yineleyebilirsiniz

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

ya da böyle yapabilirsin

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

5

Bu seçilen değerleri gösterecektir:

<?php

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

?>

3
Bunun birden fazla kusuru vardır: 1) OP, GET yöntemini kullanıyordu; 2) form öğesi adına köşeli parantez eklemenin en önemli adımı eksik 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

Siz de bunu yapabilirsiniz. Benim için çalıştı.

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

Ardından, aşağıdaki PHP kodundan aşağıdaki çoklu seçimi yapın . Seçilen çoklu değerleri buna göre yazdırır.

$shift=$_POST['selectDuration'];

print_r($shift);

0

Javascript + HTML ile sorunumu düzeltirim. Önce seçilen seçenekleri kontrol ediyorum ve formumun gizli bir alanına kaydediyorum:

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

Sonra, ben bu alana posta yoluyla almak ve tüm dize olsun ;-) Umarım birileri için daha fazla olacak. Herkese teşekkürler.


1
Bunun birden fazla kusuru vardır: 1) mevcut JavaScript'e bağlıdır; 2) değerleri tek bir dizeye birleştirirken değerleri ayırmaz, böylece dizeyi daha sonra değerlere bölmeyi imkansız hale getirir.
charlie

Bu cevap bana gerekli yönü veriyor. Teşekkürler.
Oleg Popov

0
foreach ($_POST["select2"] as $selectedOption)
{    
    echo $selectedOption."\n";  
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.