0

in view, I try to call kriteria and sub kriteria:

I try to call id_kriteria, nama_kriteria kriteria from tb_kriteria for tittle, and then I call id_kriteria, namasubkriteria for option sub kriteria this is my view code:

<?php 
                    $index =0;          
                    for( $i =1; $i <= sizeof($subkriteria_); $i++){
                    ?>
                    <div class="form-group">
                        <label class="control-label col-xs-3"><?php echo $subkriteria_[$i][0]['nama_kriteria'] ?></label> // is my error
                        <div class="col-xs-8">
                                <input type="hidden" name="status_pemeliharaan" value="1" class="form-control">
                                <input type="hidden" name="id_kriteria[]" value="<?php echo $subkriteria_[$i][$index]['id_kriteria'] ?>" class="form-control"> // is my error
                            <select class="form-control"  name="isi_kriteria[]" required>
                                <option>Pilih Sub Kriteria</option>
                                <?php $no = 1; foreach ($subkriteria_[$i] as $data)     { ?>
                                <option value="<?php echo $data['value'] ?>"><?php echo $data['namasubkriteria'] ?></option>
                                <?php  $no++; } ?>
                            </select>
                        </div>
                    </div>
                    <?php } ?>

this is my controller code:

function Index()
    {
      $data['data'] = $this->PemeliharaanModel->Get();
      if($this->session->userdata['logged_in']['level']=="1"){
      $id_merk = $this->uri->segment(3);
      $data['data'] = $this->PemeliharaanModel->Get();
      $data['kendaraan_'] = $this->PemeliharaanModel->GetKendaraan();
      // $data['kriteria_'] = $this->PemeliharaanModel->GetKriteria();
      $data['subkriteria_'] = $this->PemeliharaanModel->GetSubKriteria();
      $this->template->load('template', 'Saw/DataPemeliharaan', $data);
      }else{
        $data['error'] = 'Anda tidak dapat mengakses halaman tersebut.';
        $this->template->load('template', 'error', $data);
      } 
    }

and this is my model code:

public function GetSubKriteria() {
    $this->db->select('*');
    $this->db->from('tb_kriteria');
    $query = $this->db->get();
    $krit = $query->result();
    $data = array();
    $index = 0;
        foreach($krit as $x){
            // $data[][] = array(
            //     'id_kriteria'           => $x->id_kriteria,
            //     'nama_kriteria'         => $x->nama_kriteria,
            // );
        $id_kriteriax = $this->db->where('id_kriteria', $x->id_kriteria);
        $this->db->select('*');
        $this->db->from('tb_subkriteria');
        $query = $this->db->get();
        $id_kriteriax = $query->result();
            foreach($id_kriteriax as $z){
                $idKriteriaKey = $z->id_kriteria;
                $data[$idKriteriaKey][] = array(
                    'id_kriteria'           => $x->id_kriteria,
                    'nama_kriteria'         => $x->nama_kriteria,
                    'id_subkriteria'        => $z->id_subkriteria,
                    'namasubkriteria'       => $z->namasubkriteria,
                    'value'                 => $z->value
                );
            }
            $index++;
        }
        return $data;
        // var_dump($data);
    }

but if I try this code, error Message: Undefined offset: 1

thx for your response...

Irfan F
  • 81
  • 7

1 Answers1

0

If you use a table column id as an index key, you shouldn't rely on for() loop to get the index value since it's not always have sequential value. You could use foreach() instead, adjust the model and view codes like below.

model :

public function GetSubKriteria() {
    $this->db->select('*');
    $this->db->from('tb_kriteria');
    $query = $this->db->get();
    $krit = $query->result();
    $data = array();
    $index = 0;
        foreach($krit as $kr_key => $x){
            $data[$kr_key] = array(
                'id_kriteria'           => $x->id_kriteria,
                'nama_kriteria'         => $x->nama_kriteria,
            );
            $id_kriteriax = $this->db->where('id_kriteria', $x->id_kriteria);
            $this->db->select('*');
            $this->db->from('tb_subkriteria');
            $query = $this->db->get();
            $id_kriteriax = $query->result();
            foreach($id_kriteriax as $z){
                // $idKriteriaKey = $z->id_kriteria;
                $data[$kr_key]['subkriteria'][] = array(
                    // 'id_kriteria'           => $x->id_kriteria,
                    // 'nama_kriteria'         => $x->nama_kriteria,
                    'id_subkriteria'        => $z->id_subkriteria,
                    'namasubkriteria'       => $z->namasubkriteria,
                    'value'                 => $z->value
                );
            }
            $index++;
        }
        return $data;
        // var_dump($data);
}

view :

    <?php
    $index =0;          
    foreach ($subkriteria_ as $kr_key => $kriteria) {
    ?>
    <div class="form-group">
        <label class="control-label col-xs-3"><?php echo $kriteria['nama_kriteria'] ?></label> // is my error
        <div class="col-xs-8">
                <input type="hidden" name="status_pemeliharaan" value="1" class="form-control">
                <input type="hidden" name="id_kriteria[]" value="<?php echo $kriteria['id_kriteria'] ?>" class="form-control"> // is my error
            <select class="form-control"  name="isi_kriteria[]" required>
                <option>Pilih Sub Kriteria</option>
                <?php $no = 1; foreach ($kriteria['subkriteria'] as $data)     { ?>
                <option value="<?php echo $data['value'] ?>"><?php echo $data['namasubkriteria'] ?></option>
                <?php  $no++; } ?>
            </select>
        </div>
    </div>
    <?php } ?>
Hasta Dhana
  • 4,699
  • 7
  • 17
  • 26
  • thx for your respon is helpful, but i try your code, now show the error at the view, Error was encountered Severity: ilegal string offset 'value' blabla – Irfan F Feb 26 '20 at 14:35
  • and if i try to var_dump($data); this array is just show one subkriteria, not all subkriteria data show in the array – Irfan F Feb 26 '20 at 14:54
  • hi, I've updated the codes on line `$data[$kr_key]['subkriteria'][] = array(` – Hasta Dhana Feb 27 '20 at 04:25