2015-10-13 5 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.

EDIT, я добавил счетчик для каждой строки, так что это будет 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

u shud использовать только переключатели и менять свое имя в каждой строке. может использоваться некоторый идентификатор счетчика или базы данных. –

+0

@NiranjanNRaju Какой shoud я меняю имя? Я использовал два флажка, потому что, если бы я использовал один, я тоже хочу получить значение галочки, если это возможно. – 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_id и customer. Я просто добавляю и удаляю каждый раз, когда пользователь хочет включить или отключить своего клиента. Вот почему я хочу получить оба массива.

Контроллер:

// 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 ***/ 
Смежные вопросы