2017-09-30 22 views
-2

所以我把2個值放在我的複選框中,第一個是數量,第二個是id。我已經使用empty(),但仍然無法解決這個「未定義的偏移」問題。任何建議?未定義偏移:1甚至使用空()

<input type="checkbox" name="checkbox[]" value="1::<?php echo $players->player_id?>"> 
<input type="checkbox" name="checkbox2[]" value=".5::<?php echo $players->player_id?>"> 
<input type="checkbox" name="checkbox3[]" value=".5::<?php echo $players->player_id?>"> 
<input type="checkbox" name="checkbox4[]" value="-.5::<?php echo $players->player_id?>">   

在我的位指示

public function update() { 
    for ($i = 0; $i < count($this->input->post('checkbox')); $i++) { 
     $checkboxvalue = explode('::', $this->input->post('checkbox')[$i]); 
     $checkboxvalue2 = explode('::', $this->input->post('checkbox2')[$i]); 
     $checkboxvalue3 = explode('::', $this->input->post('checkbox3')[$i]); 
     $checkboxvalue4 = explode('::', $this->input->post('checkbox4')[$i]); 
     if(empty($checkboxvalue[0])){ 
      $checkboxvalue[0] = 0; 
     } 
     if(empty($checkboxvalue[0])){ 
      $checkboxvalue2[0] = 0; 
     } 
     if(empty($checkboxvalue[0])){ 
      $checkboxvalue3[0] = 0; 
     } 
     if(empty($checkboxvalue[0])){ 
      $checkboxvalue4[0] = 0; 
     } 
     $totals = $checkboxvalue[0] + $checkboxvalue2[0] + $checkboxvalue3[0] + $checkboxvalue4[0]; 
     $data = array(
      'player_id' => $checkboxvalue[1], 
      'player_att1' => $checkboxvalue[0], 
      'player_att2' => $checkboxvalue2[0], 
      'player_att3' => $checkboxvalue3[0], 
      'player_att4' => $checkboxvalue4[0], 
      'player_atotal' => $totals, 
     ); 
     $this->load->model('Evaluation_model'); 
     $this->Evaluation_model->editview($checkboxvalue[1], $data); 
     $checkboxvalue = array(); 
    } 
    redirect(base_url('Evaluations')); 
} 

幫助是非常讚賞。

PS: enter image description here

+1

您應該爲所有複選框使用相同的名稱,以便循環並獲取值。你所做的是有不同的複選框作爲數組..長話短說,使所有的複選框名稱='複選框[]' – Akintunde007

+0

@Akintunde我懷疑這是一行多行形式,每行有4個複選框。所以數組遍歷行。 – Barmar

+0

糟糕!似乎你是對的@Barmar。 OP也沒有詳細解釋上面的代碼應該做什麼。這看起來像代碼點火器語法。 $ this-> input-> post('checkbox')這行看起來好像只查找屬性複選框,而不是checkbox2,例如 – Akintunde007

回答

1

只有最好的盒子被髮送到服務器。因此,每個複選框數組將具有不同數量的元素,具體取決於檢查這些框的數量。您不能使用count($this->input->post('checkbox'))作爲所有複選框的限制。

您需要爲每個複選框使用單獨的循環。您可以使用關聯陣列關閉播放器ID以收集每個複選框的數據。

public function update() { 
    $players = array(); 

    foreach ($this->input->post('checkbox') as $checkbox) { 
     list($value, $player_id) = explode('::', $checkbox); 
     self::update_player($players, $player_id, 'player_att1', $value); 
    } 
    foreach ($this->input->post('checkbox2') as $checkbox) { 
     list($value, $player_id) = explode('::', $checkbox); 
     self::update_player($players, $player_id, 'player_att2', $value); 
    } 
    foreach ($this->input->post('checkbox3') as $checkbox) { 
     list($value, $player_id) = explode('::', $checkbox); 
     self::update_player($players, $player_id, 'player_att3', $value); 
    } 
    foreach ($this->input->post('checkbox4') as $checkbox) { 
     list($value, $player_id) = explode('::', $checkbox); 
     self::update_player($players, $player_id, 'player_att4', $value); 
    } 
    $this->load->model('Evaluation_model'); 
    foreach ($players as $player_id => $data) { 
     $this->Evaluation_model->editview($player_id, $data); 
    } 
    redirect(base_url('Evaluations')); 
} 

static function update_player(&$players, $id, $property, $value) { 
    if (!isset($players[$id])) { 
     $players[$id] = array(
      'player_id' => $id, 
      'player_att1' => 0, 
      'player_att2' => 0, 
      'player_att3' => 0, 
      'player_att4' => 0, 
      'player_atotal' => 0 
     ); 
    } 
    $players[$id][$property] = $value; 
    $players[$id]['player_atotal'] += $value; 
} 
+1

但是,從這個角度來看,如何確定哪個複選框集與表的每一行相關聯?你不能。您需要將複選框命名爲「checkbox [0]」以獲得一致的數組。 –

+0

我不認爲該行是必要的,玩家ID是在該值。 – Barmar

+0

公平點,雖然這似乎是一個奇怪的方式來提交表單數據:DI猜測理想情況下,它將沿着'name =「球員的線[#ID] [#KEY]」value =「#VALUE」'... –