CI如何把视图form中的table数据传递给Controller中
各位大侠好。我做项目时在新增页面需要填写多行数据,前台view的form中嵌套table,table为5行,每行由多个input组成。后台如何获取到填写的多行数据呢?
我的思考:
目前前台table中每列中input的id都是一样的,是否用什么方式需要把input的id动态打上行标记,后台通过不同的id获取?
在后台是否有方法可以将table中的所有行数据,然后通过后台的循环获取每行数据,插入到数据库?
本帖最后由 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: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字段获取到后存入数据库的多行记录中。 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
你的思維有沒有具體的代碼可以參考 ?
目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。:loveliness: 不移山的愚公 发表于 2016-7-13 10:01
目前只有思路,不知道代码怎么写,请大咖帮忙指点一下关键代码,具体代码我完成。 ...
因為不曉得你「動態」到甚麼樣的程度才問你 ...
是一個 table 內多個 input 送出 ?
還是多個 table 的多個 input 送出 ?
這設計概念會有點不一樣
本帖最后由 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> 的區塊
给 input 的 name 属性的值改成类似 xxx[] 的形式,例如 <input type="text" name="xxx[]"> 这样你在 PHP 里可以取到 $_POST['xxx'],这个值是数组。
这个内容在 PHP 手册里都有说明的,跟 CI 无关。 Hex 发表于 2016-7-13 10:50
给 input 的 name 属性的值改成类似 xxx[] 的形式,例如这样你在 PHP 里可以取到 $_POST['xxx'],这个值 ...
谢谢,我尝试一下。
页:
[1]
2