2017-09-30 17 views
-2

チェックボックスに2つの値を入れます。最初の値は2番目の値、2番目の値はidです。私はすでに空()を使用していますが、まだ私はこの "未定義オフセット"問題を解決できません。なにか提案を?空白()を使用しても定義されていないオフセット: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?>">   

そして、私のcontollerで

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

すべてのチェックボックスに同じ名前を使用して、ループして値を取得する必要があります。あなたが行ったことは、配列とは異なるチェックボックスを持っているということです。長いストーリー、すべてのチェックボックスを作るcheckbox [] ' – Akintunde007

+0

@Akintunde私はこれが複数行のフォームの1つの行だと思うし、各行には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 = "players" [#ID] [#KEY] "value ="#VALUE "'の行に沿っていると推測します。 –

関連する問題