显示从数组中获取的值的错误

时间:2012-01-03 06:11:12

标签: php jquery

我有一个数据库表,我从中获取值并在视图页面中显示它。然后管理员将单击表格中每行旁边的复选框。单击每个复选框,我将获得该值的值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;

请帮我解决这个问题

2 个答案:

答案 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;