вставьте флажок с двумя значениями codeigniter - PullRequest
0 голосов
/ 13 апреля 2020

на мой взгляд:

<form  method="post" action="<?php echo base_url(); ?>Data/Penilaian/Selected">
  <table class="table datatable-responsive" id="example">
    <thead>
      <tr>
      <th><button class="btn btn-info">Submit</button></th>
      <th>No</th>
       <th>Kendaraan</th>
       <th>Plat Nomor</th>
      <th>Total</th>  
      </tr>
    </thead>
    <tbody>
    <?php 
      $no=1; 
      if(!empty($getsifat)) {
        foreach ($getsifat as $kr_key => $kendaraan) { ?>
        <tr>
          <td>
          <?php foreach ($kendaraan['sub']['count'] as $data)     { ?>
            <input type="checkbox" name="id_kendaraan[]" value="<?php echo $kendaraan['id_kendaraan'] ?>">
            <input type="hidden" name="total[]" value="<?php echo $data['total'] ?>" > //this my problem
          <?php } ?>
          </td>
          <td><?php echo $no ?> </td>
          <td><?php echo $kendaraan['nama'] ?> </td>
          <td><?php echo $kendaraan['platno'] ?></td>
          <?php
          foreach ($kendaraan['sub']['count'] as $data)     { ?>
          <!-- <input type="hidden" name="total[]" value="<?php echo $data['total'] ?>"> -->
          <td><?php echo $data['total'] ?></td>
          <?php } ?>
        </tr> 
    <?php 
      $no++; 
        }
      } 
    ?>
    </tbody>
  </table>
  </form>

в поле зрения я хочу вставить $id_kendaraan и $total значение

это мой контроллер:

 function Selected(){
          $id_kendaraan = $this->input->post('id_kendaraan');
          $total = $this->input->post('total');
          $data = array();
          for ( $i = 0; $i < count( $id_kendaraan ); $i++ ) {
            $data = array(
            'id_kendaraan' =>  $id_kendaraan[$i],
            'total' =>  $total[$i]
            );
            $this->PenilaianModel->TambahSelected($id_kendaraan, $data);
            }
          redirect('Data/Penilaian', 'refresh');
        }

мой модель:

function TambahSelected($id_kendaraan, $data)
    {
    $this->db->where('id_kendaraan', $id_kendaraan);
    $this->db->insert('tb_ranking', $data);
    }

Я хочу вставить $ id_kendaraan и $ total в мою базу данных, но если я попробую этот код: например, посмотрите:

id kendaraan value = 1, total value = 20
id kendaraan value = 2, total value = 35
id kendaraan value = 3, total value = 44

, если я проверил $ ​​id_kendaraan 2 и нажмите представить, в моих базах данных значение $ id_kendaraan = 2, $ total value = 20, неверно ... в моем БД эти данные должны быть равны $ id_kendaraan value = 2, $ total value = 35

и если я попытаюсь проверить $ id_kendaraan 3 и нажать "отправить", в моих базах данных значение $ id_kendaraan = 3, общее значение $ 20 = неверно ... в моей базе данных эти данные должны быть равны $ id_kendaraan значение = 3, общее значение $ = 44

, и если я попытаюсь проверить $ id_kendaraan 2,3 и нажать кнопку отправить, в моих базах данных значение $ id_kendaraan = 2, значение $ total = 20 и значение $ id_kendaraan = 3, общее значение = 35, не является правильно ... в моей БД эти данные должны быть $ id_kendaraan value = 2, $ total value = 35 и $ id_kendaraan value = 3, $ общая стоимость = 44

спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Это происходит потому, что скрытый массив отправит все данные, но ваш флажок будет отправлять только выбранные значения массива. Таким образом, несоответствие ключей произойдет в вашем коде на стороне сервера. Для решения этой проблемы вам нужно однозначно обслуживать ключи массива.

Измените код переднего конца следующим образом.

<?php 
  $no=1; 
  if(!empty($getsifat)) {
    $inputid = 0;
    foreach ($getsifat as $kr_key => $kendaraan) { 
      $attch1 = $attch2 = "";
      foreach ($kendaraan['sub']['count'] as $data){
        $attch1 .= '<input type="checkbox" name="id_kendaraan['.$inputid.']" value="'.$kendaraan['id_kendaraan'].'">';
        $attch1 .= '<input type="hidden" name="total['.$inputid.']" value="'.$data['total'].'" >';

        $attch2 .= '<td>'.$data['total'].'</td>';
        $inputid++;
      }
    ?>
    <tr>
      <td><?php echo $attch1 ?> </td>
      <td><?php echo $no ?> </td>
      <td><?php echo $kendaraan['nama'] ?> </td>
      <td><?php echo $kendaraan['platno'] ?></td>
      <?php echo $attch2 ?>
    </tr> 
<?php 
  $no++; 
    }
  } 
?>

Перепишите контроллер как

 public function Selected(){
    $id_kendaraan = $this->input->post('id_kendaraan');
    $total = $this->input->post('total');
    $data = array();
    foreach ($id_kendaraan as $key => $value) {
        $data = array(
        'id_kendaraan' =>  $value,
        'total' =>  $total[$key]
        );
        $this->PenilaianModel->TambahSelected($id_kendaraan, $data);
    }          
    redirect('Data/Penilaian', 'refresh');
  }

ПРИМЕЧАНИЕ:

  1. Вы повторяли одно и то же l oop дважды. Я сделал это как один.

  2. в строке Вы печатаете внутри l oop. Я предполагаю, что он выйдет за пределы l oop.

  3. без необходимости строки $this->db->where('id_kendaraan', $id_kendaraan) в контексте вставки.

0 голосов
/ 13 апреля 2020

Удалить эту строку

$this->db->where('id_kendaraan', $id_kendaraan);

Чтобы обновить значения, вы должны использовать where.

...