【问题标题】:Convert two inputs to a single array to input into db codeigniter将两个输入转换为单个数组以输入到 db codeigniter
【发布时间】:2015-07-05 14:01:06
【问题描述】:

我正忙于创建一个网页,该网页向客户发布图纸并创建收据以发送给客户。我遇到问题的部分是选择要添加到收据中的图纸并更改修订。

图纸信息分为两个表格。第一个包含图纸编号、标题、绘制者等,第二个仅包含修订历史。这些表由绘图 ID 链接。

要发布图纸,用户必须勾选复选框并更改他想要发布的图纸的修订版。

我想将它输入到数据库中,但我不确定如何创建数组。目前我的控制器获取所有下拉输入,只有勾选的复选框。我只希望数据库更新与选定复选框关联的下拉输入。

这是我的看法。

<h1>Issue drawing</h1>
<br>

<div id="body">
<div class="row">
        <div class="form-group-sm"><lable class="col-sm-2 control-label">Project number:</lable>
    <?php
        $js = 'onchange="this.form.submit()" class="form-control" id="focusInput"';
        echo form_open('dwg_issue/issue_dwg');
        echo "<div class=\"col-xs-2\">" . form_dropdown('project_no',$proj_num, $this->input->post('project_no'), $js)."</div>";
        echo form_error('project_no', '<div class="col-xs-4"><div class="alert alert-danger fade in"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>','</div></div>');
    ?>
        </div>
        </div>

        <?php
            echo "<noscript>".form_submit('submit','Submit')."</noscript>";
            echo form_close();
        ?>
    <form action="<?php echo base_url() . 'index.php/dwg_issue/issue'; ?>" method="post" accept-charset="utf-8" id="issue">

        <table title="Client information" class="table table-hover">
            <caption><b>List of drawings</b></caption>
        <thead>
            <tr><th>Project number</th><th>Drawing number</th><th>Client drawing number</th>
                <th>Title</th><th>Drawn by</th><th>Revision</th><th>Drawn Date</th><th>Select</th>
        </thead>    
        <tbody> &nbsp;
        <?php

//          var_dump($client_info);
            if(!empty($result))
            {
                foreach($result as $row)
                { 
                    echo "<tr>";
                    echo "<td>" . $row->project_no . "</td>";
                    echo "<td>" . $row->sws_dwg_no . "</td>";
                    echo "<td>" . $row->client_dwg_no . "</td>";
                    echo "<td>" . $row->dwg_title . "</td>";
                    echo "<td>" . $row->dwg_by . "</td>";
                    $rev = array('0' => $row->dwg_rev);
                    $rev_change = array(
                        'B' => 'B',
                        'C' => 'C',
                        'D' => 'D',
                        'E' => 'E'                  
                        );
                    $dropdown = array_merge($rev,$rev_change);

                    echo "<td>" . form_dropdown('dwg_rev['.$row->dwg_id.']',$dropdown) . "</td>";
                    echo "<td>" . date('Y/m/d', strtotime($row->dwg_date)) . "</td>"; 
                    echo "<td>" . form_checkbox('select['.$row->dwg_id.']',$row->dwg_id) . "</td>"; 
                    echo "</tr>";
                }
            }

        ?>
        </tbody>
       </table>

       <div class="row">
       <div class="col-xs-12 col-md-10">Please select client distribution here with other options</div>
        <?php
        echo "<div class=\"col-xs-6 col-md-2\"><button class=\"btn btn-md btn-primary btn-block\" type=\"submit\" form=\"issue\">Issue drawings</button></div>";
        ?>
        </div>
        <br>


        <?php
        echo form_close();
        ?>

</div>

我的控制器

public function issue_dwg()
{
    $data['proj_num'] = $this->model_proj->proj_num_all();
    if ($this->input->post('project_no') != '0')
    {
        $data['result'] = $this->model_issue->list_dwg($this->input->post('project_no'));
    }

    $data['main_content'] = 'issue_view';
    $this->load->view('includes/template.php', $data);


}

//This function takes the selected drawings and create and issue slip
public function issue()
{
    $rows = array();

    $num_results = count($this->input->post('select'));
    for($i = 0; $i < $num_results; $i++)
    {
        $rows[$i]['select'] = $_POST['select'][$i];
        $rows[$i]['dwg_rev'] = $_POST['dwg_rev'][$i];
    }



}

issue_dwg() 函数使用绘图编号填充下拉列表,并使用数据库结果填充视图。

issue()函数需要对发布的信息进行处理,转换成数组传递给db。

(我想添加视图页面的图像,但我没有足够的声誉来做)

【问题讨论】:

    标签: mysql arrays codeigniter user-input


    【解决方案1】:

    在解析表单时,您需要构建输入,以便在提交表单时得到关联数组:

    目前您有以下内容:

    //...
    echo form_dropdown('dwg_rev['.$row->dwg_id.']',$dropdown);
    echo form_checkbox('select['.$row->dwg_id.']',$row->dwg_id);
    //...
    

    提交后会发送如下post数组:

    "select" (array)[
       0 => "some select value",
       1 => "some select value"
    ],
    "dwg_rev" (array)[
       0 => "some dwg_rev value",
       1 => "some dwg_rev value"
    ]
    

    解决方案:

    像这样构造你的表单:

    //...
    echo form_dropdown('result['.$row->dwg_id.'][dwg_rev]',$dropdown);
    echo form_checkbox('result['.$row->dwg_id.'][select]',$row->dwg_id);
    //...
    

    这样,你最终会得到一个这样的数组:

    "result"[
       0 => [
          "select" => "some select value",
          "dwg_rev" => "some dwg_rev value"
        ]
       1 => [
          "select" => "some select value",
          "dwg_rev" => "some dwg_rev value"
        ]
    ]
    

    现在您可以轻松地在控制器中使用 foreach 进行迭代。

    【讨论】:

    • 感谢您的帮助。有效。现在我需要进行表单验证...如果所选图纸上的修订没有更改,那么它需要返回并出错。
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2019-01-14
    • 2017-07-22
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多