0

ボタンのクリックで動的に生成される複数選択ボックスを含む単純なフォームがあります。

フォームのデモはこちらから入手できます。

複数選択ボックスであるため、ユーザーは選択ボックスから任意の数の値を選択でき、データベースに保存する必要があります。というわけで、セレクトボックスを配列として宣言してみました。

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

ただし、前に述べたように、複数選択ボックスはユーザーの選択に従って複数回生成されるため、入力されたすべてのデータを保存する必要があります。そこで、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

4 に答える 4

1

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);
}
于 2015-03-23T05:15:05.617 に答える
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);

        }
     }
于 2015-03-23T05:06:45.293 に答える