如何从使用codeigniter中的循环创建的表单中获取数组中的post值

时间:2016-05-18 11:41:08

标签: php arrays codeigniter for-loop

我需要从使用for循环创建的表单中获取post值作为数组,

这是我的观点

   <?php for ($i=0;$i<5;$i++) {?>
            <div class="row">

            <div class="col-md-3">
                <div class="form-group">
                    <label>Name</label>
                    <input name="<?php echo 'fname'.$i?>" class="form-control" type="text" />
                </div>
            </div>
            <div class="col-md-3">
                <div class="form-group">
                    <label>Surname</label>
                    <input  name="<?php echo 'sname'.$i?>" class="form-control" type="text" />
                </div>
            </div>
            <div class="col-md-3">
                <div class="form-group">
                    <label>Date of Birth</label>
                    <input name="<?php echo 'dob'.$i?>" class="date-pick-years form-control" type="text" />
                </div>
            </div>
        </div>

        <?php }?>

        <input type="submit" />

如何在控制器中获取这些后置值,我需要作为数组,例如i值为2表示我需要输出为

    $array1=array('name'=>$this->input->post('name0')),'sname'=>$this->input->post('sname0')),'dob'=>$this->input->post('dob0'))

   $array2=array('name'=>$this->input->post('name1')),'sname'=>$this->input->post('sname1')),'dob'=>$this->input->post('dob1'))

Total array =array($array1,$array2);

如何在控制器中循环获取所需的输出

3 个答案:

答案 0 :(得分:0)

如果要获取语义上属于同一name值的值数组,请在html中使用[]

    <div class="col-md-3">
        <div class="form-group">
            <label>Name</label>
            <input name="fname[<?=$i?>]" class="form-control" type="text" />
        </div>
    </div>

然后使用控制器中的常用$data = $this->input->post()读取数据。数据应采用以下格式:

$post[
       fname [
           0 => 'name1',
           1 => 'name2',
           ...
       ],
       sname [
           0 => 'sname1',
           1 => 'sname2',
           ...
       ],
       ...
   ]
]

更新:将其格式化为您想要的格式

$resultArray = array();
for($i = 0; $i < <formlength>; $i++) {
    $resultArray[$i]['fname'] = $post['fname'][$i];
    $resultArray[$i]['sname'] = $post['sname'][$i];
    ...
}

答案 1 :(得分:0)

试试这个:

<?php for ($i = 0; $i < 5; $i++) { ?>
    <div class="row">

        <div class="col-md-3">
            <div class="form-group">
                <label>Name</label>
                <input name="data[item<?php echo $i; ?>][<?php echo 'fname' . $i ?>]" class="form-control" type="text"/>
            </div>
        </div>
        <div class="col-md-3">
            <div class="form-group">
                <label>Surname</label>
                <input name="data[item<?php echo $i; ?>][<?php echo 'sname' . $i ?>]" class="form-control" type="text"/>
            </div>
        </div>
        <div class="col-md-3">
            <div class="form-group">
                <label>Date of Birth</label>
                <input name="data[item<?php echo $i; ?>][<?php echo 'dob' . $i ?>]" class="date-pick-years form-control" type="text"/>
            </div>
        </div>
    </div>

<?php } ?>

你会得到:

$_POST['data'] = array (
    'item0' =>
        array (
            'fname0' => '',
            'sname0' => '',
            'dob0' => '',
        ),
    'item1' =>
        array (
            'fname1' => '',
            'sname1' => '',
            'dob1' => '',
        ),
    'item2' =>
        array (
            'fname2' => '',
            'sname2' => '',
            'dob2' => '',
        ),
    'item3' =>
        array (
            'fname3' => '',
            'sname3' => '',
            'dob3' => '',
        ),
    'item4' =>
        array (
            'fname4' => '',
            'sname4' => '',
            'dob4' => '',
        ),
);

如果你想在变量中使用它们,你可以提取它:

$data = $this->input->post('data');
if(is_array($data)) {
    extract($data);
    if(isset($item1)) {
        var_export($item1);
// it will contains:
//        array (
//            'fname1' => '',
//            'sname1' => '',
//            'dob1' => '',
//        );
    }
}

答案 2 :(得分:0)

在您的HTML代码中使用此代码,而不是根据您的要求获得正确的结果。

<?php for ($i=0;$i<5;$i++) {?>
                <div class="row">

                <div class="col-md-3">
                    <div class="form-group">
                        <label>Name</label>
                        <input name="name[<?=$i?>][fname]" class="form-control" type="text" />
                    </div>
                </div>
                <div class="col-md-3">
                    <div class="form-group">
                        <label>Surname</label>
                        <input  name="name[<?=$i?>][sname]" class="form-control" type="text" />
                    </div>
                </div>
                <div class="col-md-3">
                    <div class="form-group">
                        <label>Date of Birth</label>
                        <input name="name[<?=$i?>][dob]" class="date-pick-years form-control" type="text" />
                    </div>
                </div>
            </div>

            <?php }?>

            <input type="submit" />