2015-10-13 77 views
1

我有一个表格,每行有3列:名称,启用,禁用。启用和禁用列有一个复选框和名称状态,我试图做每行只有一个打勾的复选框。这些是我的代码(每个行和两列)为止:每个行只检查复选框

<?php foreach($customers as $customer):?> 
<tr> 
    <td align="center"><?php echo $customer;?></td> 
    <?php 
    $check = FALSE; 
    if($user_customer != FALSE) 
     foreach($user_customer as $object) 
      foreach($object as $current_customer) 
       if($current_customer == $customer) 
        $check = TRUE; 
    ?> 

    <td align='center'> 
     <?php 
      if($check == FALSE) 
       $data = array('name' => 'enable[]', 'value' => $customer, 'checked' => FALSE); 
      else 
       $data = array('name' => 'enable[]', 'value' => $customer, 'checked' => TRUE); 

      echo form_checkbox($data); 
     ?> 
    </td> 
    <td align='center'> 
     <?php 
      if($check == TRUE) 
       $data = array('name' => 'disable[]', 'value' => $customer, 'checked' => FALSE); 
      else 
       $data = array('name' => 'disable[]', 'value' => $customer, 'checked' => TRUE); 

      echo form_checkbox($data); 
     ?> 
    </td> 

</tr> 
<?php endforeach?> 

后提交我的形式将相应的存储值到数据库中,但是我不希望用户能够打勾两个复选框一次。我尝试使用单选按钮,但是每列只限于一次检查。我正在尝试使每行都有帮助?

P.S.我不喜欢使用任何Javascript。

编辑,我说的每一行计数器,因此这将是radio_1第一行等,这是我编辑的部分:

<td align='center'> 
    <?php 
     if($check == FALSE) 
      $data = array('name' => "radio_$counter", 'value' => $customer, 'checked' => FALSE); 
     else 
      $data = array('name' => "radio_$counter", 'value' => $customer, 'checked' => TRUE); 

     echo form_radio($data); 
    ?> 
</td> 
<td align='center'> 
    <?php 
     if($check == TRUE) 
      $data = array('name' => "radio_$counter", 'value' => $customer, 'checked' => FALSE); 
     else 
      $data = array('name' => "radio_$counter", 'value' => $customer, 'checked' => TRUE); 

     echo form_radio($data); 
    ?> 
</td> 

EDIT 2,这是我如何用来检索它在我的控制器功能:

// These were the arrays that I assigned to each checkbox according to the column 
$enable = $this->input->post('enable'); 
$disable = $this->input->post('disable'); 

// I used it for inserting and deleting values 
$insert = $this->home_model->insert_customer(array('user_id'=>$user_id, 'customer'=>$enable)); 
$delete = $this->home_model->delete_customer($user_id, $disable); 
+0

只能使用单选按钮并在每行中更改其名称。可能会使用一些计数器或数据库ID。 –

+0

@NiranjanNRaju我把名字改成了什么?我使用了两个复选框,因为如果我使用了一个复选框,我也想获得不确认的值,如果可能的话。 – hzq

+0

第一行的单选按钮名称=> radio_1,第二行,radio_2 ...等 –

回答

0

最终我设法解决我的问题,而不使用JavaScript。

首先,在我看来,我在td中使用了一个隐藏输入和一个复选框输入。正如你在下面看到的,有两个不同的数组。隐藏的输入数组名称为disable[],并且在提交表单时将包含所有选中的复选框值的复选框数组名为enable[]

无论如何,隐藏的输入数组disable[]将始终提交值。所以现在我们有disable[]阵列中的所有客户名称。

查看:

<td align='center'> 
    <input type="hidden" value="<?php echo $customer?>" name='disable[]'> 
    <?php 
     if($check == FALSE) 
     { 
      $data = array('name' => 'enable[]', 'value' => $customer, 'checked' => FALSE); 
     } 
     else 
      $data = array('name' => 'enable[]', 'value' => $customer, 'checked' => TRUE); 

     echo form_checkbox($data); 
    ?> 
</td> 

现在,这是我操纵数组来得到我想要的值。在我的情况下,我的数据库表只有两列,分别是user_idcustomer。每次用户想要启用或禁用他/她的客户时,我都会添加和删除。这就是为什么我想要两个数组。

控制器:

// Array containing selected/checked customers 
$enable = $this->input->post('enable'); 

// Array containing all customers 
$disable = $this->input->post('disable'); 

// Loop through selected customers 
foreach($enable as $index => $value) 
{ 
    // Check if customer exists in database 
    if($this->home_model->check_customer($user_id, $enable[$index])) 
    { 
     // If exists, unset from enable to prevent duplicate insert 
     unset($enable[$index]); 
    } 

    /* Unset the remaining 
    (or all selected customers if it doesn't exists in DB) 
    selected customers from disable array */ 

    $key = array_search($value, $disable); 
    unset($disable[$key]); 
} 

现在在同一个控制器,只要做3个简单的检查,看看是否确保其查询来执行,就像如果有客户插入和删除,如果只有客户插入,或者如果只有客户要删除

// Check enable and disable array are not empty 
if(! empty($enable) && ! empty($disable)) 
{ 
    $insert = $this->home_model->insert_customer(array('user_id'=>$user_id, 'customer'=>$enable)); 
    $delete = $this->home_model->delete_customer($user_id, $disable); 
} 
// If enable array is not empty but disable is empty, insert only 
elseif(! empty($enable) && empty($disable)) 
{ 
    $insert = $this->home_model->insert_customer(array('user_id'=>$user_id, 'customer'=>$enable)); 
} 
// If enable is empty but disable is not empty, delete only 
elseif(empty($enable) && ! empty($disable)) 
{ 
    $delete = $this->home_model->delete_customer($user_id, $disable); 
} 

/*** Proceed with whatever you want to do like go to new page etc ***/