我有一个数据库表,我从中获取值并在视图页面中显示它。然后管理员将单击表格中每行旁边的复选框。单击每个复选框,我将获得该值的值checkbox.the代码(视图文件和js)就是这个
查看文件:
<input type="checkbox" name="options" id="options" value="<?php echo $row->slNo?>">
<input type="checkbox" id="selectAll" name="selectAll" />
JS:
$('#selectAll').change(function(){
if($(this).attr('checked'))
{
$('[name=options]').attr('checked',true);
function updateTextArea()
{
var allVals = $('#rrol :checked').map(function()
{
return $(this).val();
}).get();
$('#getrolevalues').val(allVals);
}
$(function()
{
$('#rrol input').click(updateTextArea);
updateTextArea();
});
}
else
{
$('[name=options]').attr('checked',false);
function updateTextArea()
{
var allVals = $('#rrol :checked').map(function()
{
return $(this).val();
}).get();
$('#getrolevalues').val(allVals);
}
$(function()
{
$('#rrol input').click(updateTextArea);
updateTextArea();
});
}
});
我保存了隐藏文本框中的值,并将其发送到controller.code(查看文件和js),因为它位于
下面查看文件:
<input type="hidden" id="getrolevalues">
JS:
$("#submit").click(function(){
var js=$('#getrolevalues').val();
$.post(url+"/roles/tabledata",{"gotoption":js},function(data){
$('#roleschk').html(data.result);
},"json");
到目前为止一切正常。但是在发送了我存储在数组中的值后,我在控制器中得到一个错误。我得到数组值,然后我使用explode函数来分隔每个值。然后我用它循环将这些值发送到模型并获取值并显示结果。代码在
下面控制器:
function tabledata()
{
echo $data=$this->input->post('gotoption');
$pieces = explode( ",", $data);
//echo $pieces[1];
//echo $e=count($pieces);
$sql=array();
for($i = 0; $i< count($pieces); $i++)
{
$piec= $pieces[$i];
$sql[]=$this->rolesmodel->roleselect($piec);
}
$sql['dipl']=$sql;
$slr=$this->load->view('roleschecked',$sql,true);
$value=array(
'result'=>$slr
);
echo json_encode($value);
}
模型:
function roleselect($piec)
{
/*for($i = 0; $i< count($pieces); $i++)
{ */
echo $chkroles="SELECT * FROM dummyroles WHERE slNo='$piec'";
$qry=$this->db->query($chkroles);
// }
return $qry;
}
还有我在其中显示结果的roleschecked视图文件:
<p>You Have selected the following persons</p>
<table border=2>
<tr>
<th>Sl.No</th>
<th>Name</th>
<th>Roles</th>
</tr>
<?php foreach($dipl as $row)
{?>
<tr>
<td><?php echo $row()->slNo[0]?></td>
</tr>
<?php }?>
</table>
现在的问题是,当我在控制器中使用这样的时候,我得到的最后一个值
.........
.........
$sql['dipl']=$this->rolesmodel->roleselect($piec);
.........
如果我这样使用,我会收到错误
.........
$sql[]=$this->rolesmodel->roleselect($piec);
.............
$sql['dipl']=$sql;
请帮我解决这个问题
答案 0 :(得分:1)
为什么要在隐藏字段中以逗号分隔所有复选框?
您可以像数组一样直接发布它们:
<input type="checkbox" name="options[]" value="123" />
<input type="checkbox" name="options[]" value="543" />
在控制器中,您将选中复选框
$options = $this->input->post('options');
因此,您的tabledata()
函数将如下所示:
function tabledata(){
$options = $this->input->post('options');
$sql=array();
foreach($options as $option){
$sql[]=$this->rolesmodel->roleselect(intval($option));
}
// I'm not sure why you are assigning this back into the same array?!
$sql['dipl']=$sql;
$slr=$this->load->view('roleschecked',$sql,true);
$value=array(
'result'=>$slr
);
echo json_encode($value);
}
请查看注释行,将所有SQL语句分配回sql数组,这看起来很奇怪。
答案 1 :(得分:0)
对我来说,看起来konsolenfreddy建议 - 看看$ sql ['dipl']赋值。当您第一次为$ sql分配值时,您有一系列查询结果。然后再次分配$ sql,但是你在同一个数组上执行 - $ sql,但是使用索引'dipl'。你得到的是数组数组。看一下这个例子:
$aSql = array();
$aSql[] = 'foo';
$aSql['bar'] = $aSql;
var_dump($aSql);
result >>>
array(2) {
[0]=>
string(3) "foo"
["bar"]=>
array(1) {
[0]=>
string(3) "foo"
}
}
尝试重命名内部$ sql,如下所示:
// function tabledata()
$innerSql = array();
for($i = 0; $i < count($pieces); $i++) {
$piec = $pieces[$i];
$innerSql[] = $this->rolesmodel->roleselect($piec);
}
$sql['dipl'] = $innerSql;