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

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

Демо формы доступно Вот.

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

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

Но, как я уже говорил ранее, поле множественного выбора будет сгенерировано несколько раз по выбору пользователя, все введенные данные должны быть сохранены. Поэтому я изменяю имя selectbox с помощью 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);

}
}

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

0

Решение

Здесь вы называете ваши поля выбора как 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);
}
1

Другие решения

основная проблема в вашей форме — использовать метод 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

}

}
?>
0

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

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

}
}
0

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

if($this->input->post('select2'. $i .'[]')){
$data2=array(
'field1' =>$this->input->post('select2'. $i .'[]')
);
0
По вопросам рекламы [email protected]