不移山的愚公 发表于 2016-7-13 09:50:47

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

各位大侠好。
我做项目时在新增页面需要填写多行数据,前台view的form中嵌套table,table为5行,每行由多个input组成。后台如何获取到填写的多行数据呢?

我的思考:
目前前台table中每列中input的id都是一样的,是否用什么方式需要把input的id动态打上行标记,后台通过不同的id获取?
在后台是否有方法可以将table中的所有行数据,然后通过后台的循环获取每行数据,插入到数据库?

Closer 发表于 2016-7-13 11:29:04

本帖最后由 Closer 于 2016-7-13 11:39 编辑

不移山的愚公 发表于 2016-7-13 10:56
大咖就是大咖,牛。我马上尝试一下。
另外,我是用按钮+jquery的方式实现的动态增行,但是有个衍生出来的 ...
你可以去了解一下 JQuery 的 .before()

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


<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;
        var newTr = tr.cloneNode(true);
        document.getElementById("pmc_table").getElementsByTagName("tbody").appendChild(newTr);
   }
   $(".pmc_add_ref").click(function(){
        add();
   }

Closer 发表于 2016-7-13 09:53:04

你的思維有沒有具體的代碼可以參考 ?

不移山的愚公 发表于 2016-7-13 10:01:49

Closer 发表于 2016-7-13 09:53
你的思維有沒有具體的代碼可以參考 ?

目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。:loveliness:

Closer 发表于 2016-7-13 10:20:06

不移山的愚公 发表于 2016-7-13 10:01
目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。 ...
因為不曉得你「動態」到甚麼樣的程度才問你 ...
是一個 table 內多個 input 送出 ?
還是多個 table 的多個 input 送出 ?
這設計概念會有點不一樣
 

Closer 发表于 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> 的區塊

 

Hex 发表于 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'],这个值 ...

谢谢,我尝试一下。
页: [1] 2
查看完整版本: CI如何把视图form中的table数据传递给Controller中