用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1897|回复: 12
收起左侧

[HELP] CI如何把视图form中的table数据传递给Controller中

[复制链接]
发表于 2016-7-13 09:50:47 | 显示全部楼层 |阅读模式
各位大侠好。
我做项目时在新增页面需要填写多行数据,前台view的form中嵌套table,table为5行,每行由多个input组成。后台如何获取到填写的多行数据呢?

我的思考:
目前前台table中每列中input的id都是一样的,是否用什么方式需要把input的id动态打上行标记,后台通过不同的id获取?
在后台是否有方法可以将table中的所有行数据,然后通过后台的循环获取每行数据,插入到数据库?
发表于 2016-7-13 11:29:04 | 显示全部楼层
本帖最后由 Closer 于 2016-7-13 11:39 编辑
不移山的愚公 发表于 2016-7-13 10:56
大咖就是大咖,牛。我马上尝试一下。
另外,我是用按钮+jquery的方式实现的动态增行,但是有个衍生出来的 ...

你可以去了解一下 JQuery 的 .before()

然後你的對象不應該是 pmc_table
他是一整個 table
你的對象應該是 tr

HTML复制代码
 
<form id="pm_info" action="<?php echo site_url('index/PmCtl/pmadd') ?>" method="post">
        <table id="pmc_table">
                <tr>
                        <th>印刷内容</th>
                        <th>纸张类型</th>
                        <th>刪除</th>
                </tr>
                <tr id="tr_0">
                        <td align="center"><input type="text" class="row-input-txt" name="print_content[]"></td>
                        <td align="center"><input type="text" class="row-input-txt" name="paper_type[]"></td>
                        <td>
                                <div class="icon-opr-td">
                                        <a class="icon-del pmc_del_ref"></a>
                                </div>
                        </td>
                </tr>
                <tr id="addRow">
                        <td colspan="3">
                                <div class="icon-opr-td">
                                        <a class="icon-add pmc_add_ref"></a>
                                </div>
                        </td>
                </tr>
        </table>
</form>
 
<div id="copyDiv" style="display:none;">
        <tr id="copyTr" style="display:none;">
                <td align="center"><input type="text" class="row-input-txt" name="print_content[]"></td>
                <td align="center"><input type="text" class="row-input-txt" name="paper_type[]"></td>
                <td>
                        <div class="icon-opr-td">
                                <a class="icon-del pmc_del_ref"></a>
                        </div>
                </td>
        </tr>
</div>
 
<script>
$(".pmc_add_ref").click(function(){
        add();
}
 
var newIndex = 1;
function add() {
        var trObj = $('#copyTr').clone();
        trObj.attr('id', 'tr_' + newIndex).show();
        $('#addRow').before(trObj);
        newIndex++;
}
</script>
 
复制代码


刪除的話就用 .remove() 就好
而你已經有 id="tr_0" 這個操作依據了

  
 楼主| 发表于 2016-7-13 10:31:22 | 显示全部楼层
本帖最后由 不移山的愚公 于 2016-7-13 10:33 编辑
Closer 发表于 2016-7-13 10:20
因為不曉得你「動態」到甚麼樣的程度才問你 ...
是一個 table 內多個 input 送出 ?
還是多個 table 的多個 ...

一个页面一个table内有多行记录。
页面view的代码比较多,我把核心代码附上,请大咖过目。
<form id="pm_info" action="<?php echo site_url('index/PmCtl/pmadd')  " method="post">
<table id="pmc_table">
      <tr>
       <th >印刷内容</th>
       <th >纸张类型</th>
      </tr>
       <?php for($i=0;$i<$line;$i++){  
       <tr >
        <td align="center" >
         <input type="text"  class="row-input-txt"  id="print_content"  name="print_content" >
        </td>
        <td align="center">
         <input type="text"  class="row-input-txt"  id="paper_type"  name="paper_type" >
        </td>
       </tr>
      <?php }
</table>
</form>

后台想把多行中的print_content、paper_type字段获取到后存入数据库的多行记录中。
 楼主| 发表于 2016-7-13 10:56:54 | 显示全部楼层
Closer 发表于 2016-7-13 10:46
阿 ...
若你有用 javascript 呼叫 html 時才需要填 id
不然一般 php 承接值以 name 作為依據

大咖就是大咖,牛。我马上尝试一下。
另外,我是用按钮+jquery的方式实现的动态增行,但是有个衍生出来的问题大咖看有解决方案吗:
我的增行按钮做在tr的第一个td里面,用jquery实现的动态增行,但是新增出来的行的按钮不能再次增行,感觉是没有事件,目前还不知道如何解决。代码如下:
    1.页面代码:
     <tr >
        <td align="center" >
         <div class="icon-opr-td">
          <a class="icon-add pmc_add_ref"  ></a>
          <a class="icon-del pmc_del_ref"    ></a>
         </div>
        </td>
      </tr >
     2.JS代码:
     function add(){
        var tr = document.getElementById("pmc_table").rows[1];
        var newTr = tr.cloneNode(true);
        document.getElementById("pmc_table").getElementsByTagName("tbody")[0].appendChild(newTr);
     }
     $(".pmc_add_ref").click(function(){
        add();
     }
发表于 2016-7-13 09:53:04 | 显示全部楼层
你的思維有沒有具體的代碼可以參考 ?
 楼主| 发表于 2016-7-13 10:01:49 | 显示全部楼层
Closer 发表于 2016-7-13 09:53
你的思維有沒有具體的代碼可以參考 ?

目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。
发表于 2016-7-13 10:20:06 | 显示全部楼层
不移山的愚公 发表于 2016-7-13 10:01
目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。 ...

因為不曉得你「動態」到甚麼樣的程度才問你 ...
是一個 table 內多個 input 送出 ?
還是多個 table 的多個 input 送出 ?
這設計概念會有點不一樣
 
发表于 2016-7-13 10:46:01 | 显示全部楼层
本帖最后由 Closer 于 2016-7-13 11:33 编辑
不移山的愚公 发表于 2016-7-13 10:31
一个页面一个table内有多行记录。
页面view的代码比较多,我把核心代码附上,请大咖过目。
...

<?php 後記得再給他 ?> 阿 ...
若你有用 javascript 呼叫 html 時才需要填 id
不然一般 php 承接值以 name 作為依據

而要讓它是數組承接,你只需要這樣 :
name="print_content[]"
name="paper_type[]"

而 php 那邊只需要這樣 :
$print_content = $this->input->post('print_content', true);
$paper_type= $this->input->post('paper_type', true);
foreach ($print_content as $k => $v) {
        // $print_content[$k]
        // $paper_type[$k]
        // 可以整理完後,存進一個變數,再批次新增
        // 或每 foreach 一次就新增一次
        // (代碼)
}

另外
$line 是你 for 執行次數的依據
這個畫面是一定固定幾次嗎 ?
若是,則維持這樣即可
若不是,你可能需要 JQuery 的幫助
設置一個 button 按下時則新增一個 <tr></tr> 的區塊

 
发表于 2016-7-13 10:50:24 | 显示全部楼层
给 input 的 name 属性的值改成类似 xxx[] 的形式,例如 <input type="text" name="xxx[]"> 这样你在 PHP 里可以取到 $_POST['xxx'],这个值是数组。
这个内容在 PHP 手册里都有说明的,跟 CI 无关。
 楼主| 发表于 2016-7-13 10:57:43 | 显示全部楼层
Hex 发表于 2016-7-13 10:50
给 input 的 name 属性的值改成类似 xxx[] 的形式,例如  这样你在 PHP 里可以取到 $_POST['xxx'],这个值 ...

谢谢,我尝试一下。

本版积分规则