Невозможно получить значения из динамически генерируемых полей множественного выбора в PHP

У меня есть простая форма, которая содержит поле множественного выбора, которое динамически генерируется при нажатии кнопки.

Демоверсия формы доступна здесь.

Поскольку это поле множественного выбора, пользователь сможет выбрать любое количество значений из поля выбора, и оно должно быть сохранено в базе данных. Итак, я объявил поле выбора как массив.. как это.

  <select name="select2[]" size="3" multiple="multiple">
         <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>

Но, как я уже говорил ранее, поле множественного выбора будет сгенерировано несколько раз по выбору пользователя, все введенные данные должны быть сохранены. Поэтому я изменяю имя select box с помощью jquery.

Имя полей выбора будет выглядеть как select2[]1, select2[]2, select2[]3 и т. Д. (Что недопустимо; не массив), но должно быть похоже на select21[], select22[], select23[] и так далее, который является допустимым способом объявления массива. Я не могу получить массив на стороне сервера, используя PHP следующим образом

if  ($total_count>0)
        {  //echo $total_count;
            for($i=0;$i<=$total_count;$i++)
            {
                // generated as select2[]1,select2[]2,select2[]3 ,... which is not valid.
                // thus invalid argument to foreach
                if($this->input->post('select2[]'.$i)){
                $data2=array(
                'field1' =>$this->input->post('select2[]'.$i)
                );      
            $this->db->insert('table1',$data2);

            }
         }

Есть ли обходной путь для этого чёрта?

4 ответа

Здесь вы называете ваши поля выбора как name="select2[]1" вместо этого должно быть как name="select21[]" , name="select22[]", Это станет массивом и может быть доступно через php подать как $_POST['select21'],

Называние делается в вашем javascript, как это

`$(this).attr("name",$(this).attr("name") + i);`

я предлагаю изменить его на

$(this).attr("name",i+$(this).attr("name"));

Более простой пример будет

<script>
var elem,i=0;
            $("#add_company").click(function () {
                elem = '<select name="select'+i+'[]" size="10" multiple="multiple">' +
                    '<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>';
                $("#frmHolder").append(elem);
                i++;
            });
</script>

<form id="form1" name="form2" action="get_test.php" method="post">
    <div id="frmHolder"></div>
    <input type="submit" id="submit" class="btn btn-primary" name="submit" value="Submit the Form" />
</form>

И в get_test.php просто брось $_POST и посмотреть вывод.

например.

foreach($_POST as $key=>$val){
    var_dump($val);
}

Основная проблема в вашей форме - использовать метод POST в вашей форме. Вы используете метод GET в форме при получении значений методом post

<form id="form1" name="form2" action="" method="post">
<div id="add_company_div" class="addcomp" style='display: none;'>
  <div class="col-sm-6 col-xs-12 own_pad">
  <select name="select2[]" size="3" multiple="multiple">
         <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>
  </div>

  <div id="hide_company" class="col-sm-6 col-xs-12 own_pad minus">
    Click this DIV to Close
  </div>
</div>
<input type="hidden" id="start_count_value"  name="start_count_value" value="" />   
<input type="hidden" name="class_count" class="class_count" value="" />
<div class="box-footer clearfix no-border no_pad comp-foot">
  <div id="add_company" class="btn btn-success btn-sm pull-left">Generate Multiple Select Boxes</div>
</div>
   <input type="submit" id="submit" class="btn btn-primary"  name="submit" value="Submit the Form" />
</form>

попробуйте использовать этот код PHP

<?
if(isset($_POST['submit'])) 
{
    $select=$_POST['select2'];
    foreach($select as $key=>$selects)
    {
        echo $selects; // will echo 11 12..................20

    }

}
?>

Вы также можете попробовать свой код, но так:

if($this->input->post('select2'. $i .'[]')){
$data2=array(
 'field1' =>$this->input->post('select2'. $i .'[]')
); 

Попробуй вот так

if  ($total_count>0)
        {  //echo $total_count;
            for($i=0;$i<=$total_count;$i++)
            {
                // generated as select2[]1,select2[]2,select2[]3 ,... which is not valid.

   // thus invalid argument to foreach
            if(isset($_POST['select2'][$i])){
            $data2=array(
            'field1' =>$_POST['select2'][$i]
            );      
        $this->db->insert('table1',$data2);

        }
     }
Другие вопросы по тегам