Home » Codeigniter » Mengatasi invalid argument supplied for foreach()

Mengatasi invalid argument supplied for foreach()

Published by Ade Kurniawan on

invalid argument supplied for foreach()

Invalid argument supplied for foreach merupakan error yang muncul kerena suplai data yang diberikan ke foreach untuk ditampilkan secara berulang merupakan data tidak valid. contoh seperti data dalam script di bawah ini

<?php 
    $data = "contoh data";

    foreach ($data as $key ) {
        echo $key;
    }
?>

Saat dijalankan Outputnya akan menjadi invalid argument

error Invalid argument supplied for foreach php

Untuk mengatasi error invalid argument ini dapat dilakukan dengan cara memperbaiki suplai data yang akan di masukkan ke foreach tersebut.

Contoh di atas kita memasukkan data string ($data) ke dalam foreach. string bukanlah sebuah data berbentuk larik yang perlu di tampilkan secara berulang. Untuk Menampilkan string di php cukup menggunakan echo.

Untuk masalah invalid argument supplied for foreach seperti di atas dapat diatasi dengan mengubah suplai data. Perubahan dari contoh di atas dapat dilakukan dengan cara mengganti data string (variabel data) menjadi array seperti di bawah ini:

<?php 
    $data    = array('1','2','3');
    
    foreach ($data as $key ) { 
        echo $key."<br>";       
    }    
?>

Output

mengatasi Invalid argument supplied for foreach

Untuk array assosiatif dapat mengubahnya menjadi skrip di bawah ini:

<?php     
    $data[] = array( 'author'    => 'Ade Kurniawan',
            'website'  => "indonetsource",            
            'deskripsi' => 'Website Belajar Pemrorgraman' 
            );
    
    foreach ($data as $key ) {        
        echo $key['website']. "<br>";        
        echo $key['author']. "<br>";        
        echo $key['deskripsi']. "<br>";        
    }    
?>

Output

data indonetsoure

Mengatasi invalid argument supplied for foreach() di Codeigniter

Kita lengkapi contoh error ini dengan membuat file database, controller, model dan view pada project codeigniter.

Untuk database yang digunakan kita gunakan database yang telah dibuat sebelumnya pada tutorial cara praktis membuat database di phpmyadmin.

Sedangkan untuk Model view dan Controller adalah seperti script di bawah ini:

Siswa_model.php

<?php 
class Siswa_model extends CI_Model{

	public function get_data(){
		$this->db->get('siswa');
	}

}

Controller

Siswa.php

<?php 
class Siswa extends CI_Controller{
	
	function __construct()
	{
		parent::__construct();	
		$this->load->model(array('siswa_model'));
	}

	public function data_siswa(){
		$data['siswa'] = $this->siswa_model->get_data()->result();			
		$this->load->view('view_siswa',$data);
	}	
}

View

view_siswa.php

<!DOCTYPE html>
<html>

<head>
    <link rel="stylesheet" href="http://localhost/indonetsource/bootstrap/css/bootstrap.min.css">
</head>

<body>
    <div class="container">
        <div class="card">
            <div class="card-header">
                <h2>Data Siswa</h2>
            </div>           

            <div class="card-body">
                  <table class="table table-sm table-bordered">
                    <thead>
                        <tr>
                            <th>No</th>
                            <th>Nama</th>
                            <th>Jenis Kelamin</th>                            
                            <th>Alamat</th>                            
                        </tr>
                    </thead>
                    <tbody>
                        <?php
                        $no = 1;                        
                        foreach ($siswa as $key) :
                        ?>
                            <tr>
                                <td><?= $no++ ?></td>
                                <td><?= $key->nama; ?></td>
                                <td><?= $key->jenis_kelamin; ?></td>                                
                                <td><?= $key->alamat; ?></td>                                
                            </tr>
                        <?php endforeach ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
<script src="http://localhost/indonetsource/bootstrap/js/jquery-3.5.1.min.js"></script>
<script src="http://localhost/indonetsource/bootstrap/js/popper.min.js"></script>
<script src="http://localhost/indonetsource/bootstrap/js/bootstrap.min.js"></script>

</html>

Jalankan Program tersebut maka outputnya akan menjadi seperti di bawah ini:

error invalid argument codeigniter

Seperti yang kita lihat pada gambar di atas invalid argument supplied for foreach muncul pada program yang kita buat.

Untuk mengatasi hal tersebut silahkan perbaiki model menjadi berikut:

<?php 
class Siswa_model extends CI_Model{

	public function get_data(){
		return $this->db->get('siswa')->result();
	}

}

error tersebut diperbaiki dengan cara memperbaiki model. Perubahan yang dilakukan pada model adalah dengan menambahkan return.

output program setelah ditambahkan return

data siswa
Output seleteah diperbaiki

Pada gambar di atas kita telah berhasil mengatasi error invalid argumen suplied. Selanjutnya jika masih terjadi error kemungkinan permasalahan terjadi di controller atau view.

Error terjadi akibat kesalahan di controller dalam menulis variabel yang akan dikirim ke view:

Seperti gambar di bawah ini:

error invalid argument supplied for foreach codeigniter

Error ini terjadi karena perbedaan parameter yang digunakan dalam mengirim data antara view dan controller

public function data_siswa(){
		$data['siswa1'] = $this->siswa_model->get_data()->result();			
		$this->load->view('view_siswa',$data);
	}

Perhatikan script di atas $data[‘siswa1’] seharusnya ditulis $data[‘siswa’] untuk memperbaiki error yang muncul.

Kesimpulan

invalid argument supplied for foreach() merupakan sebuah error yang muncul akibat suplai data ke foreach tidak dalam bentuk array. Untuk Memperbaikinya cukup dengan memperhatikan data tersebut sebelum di tampilkan melalui foreach.


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *