Search code examples
phpsqlcodeigniterchartshigh-traffic

Why always "Invalid argument supplied for foreach"


i want make a chart on codeigniter but i always fail. pls help me wrong text : A PHP Error was encountered

Severity: Warning Message: Invalid argument supplied for foreach() Filename: chart/index.php Blockquote Line Number : 16

MY VIEW :

      <!-- **********************************************************************************************************************************************************
      MAIN CONTENT
      *********************************************************************************************************************************************************** -->
      <!--main content start-->
      <section id="main-content">
          <section class="wrapper">
            <!-- BASIC FORM ELELEMNTS -->
            <div class="row mt">

                <div class="col-lg-12">

   <?php
   #periksa array
        foreach($data as $data){
            $id_reservasi[] = $data->id_reservasi;
            $stok[] = (float) $data->stok;
        }
    ?>
</head>
<body>

    <canvas id="canvas" width="1000" height="280"></canvas>

    <!--Load chart js-->
    <script type="text/javascript" src="<?php echo base_url().'assets/chartjs/chart.min.js'?>"></script>
    <script>

            var lineChartData = {
                labels : <?php echo json_encode($id_reservasi);?>,
                datasets : [

                    {
                        fillColor: "rgba(60,141,188,0.9)",
                        strokeColor: "rgba(60,141,188,0.8)",
                        pointColor: "#3b8bba",
                        pointStrokeColor: "#fff",
                        pointHighlightFill: "#fff",
                        pointHighlightStroke: "rgba(152,235,239,1)",
                        data : <?php echo json_encode($stok);?>
                    }

                ]

            }

        var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);

    </script>
      </div><!-- /col-lg-4 -->  
            </div><!-- /row -->

        </section>
      </section><!-- /MAIN CONTENT -->

MY MODEL :

function get_chart(){
    $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");          
        if($query->num_rows() > 0){
            foreach($query->result() as $data){
                $hasil[] = $data;
            }
            return $hasil;
        }
    }

MY CONTROLLER :

public function chart() {
        $x['data']=$this->sistem_model->get_chart();
        $this->template_system->load('template_system','sistem/data/chart/index',$x);

    }

please give me solution...


Solution

  • Change foreach($data as $data){ ....} to

    if ( is_array($data) ) {
       foreach($data as $item){
          $id_reservasi[] = $item->id_reservasi;
          $stok[] = (float) $item->stok;
       }
    }
    

    or change your function get_chart to always return array:

    function get_chart(){
        $hasil = [];
        $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");          
        if($query->num_rows() > 0){
            foreach($query->result() as $data){
                 $hasil[] = $data;
            }
        }
        return $hasil;
    }
    

    foreach help