Baca Artikel Belajar Pemrograman Framework Codeigniter 4

Belajar Pemrograman Framework Codeigniter 4

Artikel seputar pemrgoraman framework Codeigniter 4

Codeigniter 4 : Cara Submit Form dan Upload File Dengan Ajax

Codeigniter 4 : Cara Submit Form dan Upload File Dengan Ajax

Sobatcoding.com - Codeigniter 4 cara submit form dan upload file atau photo menggunakan ajax

 

Pada kesempatan kali ini admin akan berbagi cara menyimpan data ke database menggunakan ajax dan php tanpa reload halaman menggunakan codeigniter 4. Kita juga akan mencoba untuk upload file atau gambar dan membuat preview gambar sebelum di simpan ke database. Pada tutorial kali ini menggunakan beberapa plugin seperti jquery, bootstrap, font awesome dan jquery validation sebagai validasi form.

Untuk lebih jelasnya perhatikan langkah-langkah berikut ini:

 

Menyiapkan Database

Kita buat terlebih dahulu sebuah database dan table m_users untuk sebagai contoh untuk digunakan sebagai penyimpan data nantinya. Kalian bisa import script mysql dari kode berikut ini.

CREATE TABLE IF NOT EXISTS `m_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `address` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `photo` varchar(225) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

Membuat Model

Kita buat sebuah Model bernama Users.php dan masukkan kode seperti berikut.

<?php

namespace App\Models;

use CodeIgniter\Model;

class Users extends Model
{
    protected $table      = 'm_users';
    protected $primaryKey = 'id';

    protected $useAutoIncrement = true;

    protected $returnType     = 'array';
    protected $useSoftDeletes = true;

    protected $allowedFields = ['name', 'address', 'photo'];

    protected $useTimestamps = true;
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

}

 

 

Membuat View

Buatlah sebuah view html bernama form.html, kemudian buatlah kode seperti berikut ini.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Submit Form Menggunakan Ajax</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/css/all.min.css" integrity="sha512-YWzhKL2whUzgiheMoBFwW8CKV4qpHQAEuvilg9FAn5VJUDwKZZxkJNuGM4XkWuk94WCrrwslk8yWNGmY1EduTA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
        
    </head>
    <body>
        
        <section>
            <div class="container">
                <h1>Belajar Submit Data menggunakan Ajax</h1>
                <div class="card card-body">
                    <form id="form-submit" method="POST" action="<?= base_url('upload') ?>" enctype="multipart/form-data" >
                        <div class="form-group">
                            <label>Nama</label>
                            <input type="text" class="form-control" id="name" name="fullname" placeholder="Nama Lengkap" required />
                        </div>
                        <div class="form-group">
                            <label>Alamat</label>
                            <input type="text" class="form-control" id="address" name="address" placeholder="Alamat" required />
                        </div>
                        <div class="form-group">
                            <label class="d-block">Upload Photo</label>
                            <input type="file" id="photo" name="photo" />
                        </div>
                        <div class="form-group">
                            <div id="display-photo" class="border" style="width:150px;height:150px;background:#b5b5b5">

                            </div>
                        </div>
                        <button type="submit" name="save" class="btn btn-primary "> SIMPAN</button>
                    </form>

                    <!-- Modal -->
                    <div class="modal fade" id="modal-loader" tabindex="-1" role="dialog" aria-labelledby="modalLoader" aria-hidden="true">
                        <div class="modal-dialog" role="document">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <h5 class="modal-title" id="modalLoader">Loading...</h5>
                                </div>
                                <div class="modal-body">
                                    <p class="h1 text-center"><i class="fa fa-spinner fa-spin" aria-hidden="true"></i></p>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </section>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/js/all.min.js" integrity="sha512-cyAbuGborsD25bhT/uz++wPqrh5cqPh1ULJz4NSpN9ktWcA6Hnh9g+CWKeNx2R0fgQt+ybRXdabSBgYXkQTTmA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.3/jquery.validate.js"></script>

    </body>
</html>

 

Membuat Controller

Buatlah sebuah controller bernama Upload.php kemudian buatlah kode seperti berikut ini.

<?php

namespace App\Controllers;

#use CodeIgniter\Controller;
use CodeIgniter\HTTP\Request;
use App\Models\Users;

class Upload extends BaseController
{

    public function index()
    {
        return view('form');
    }

    public function doingUpload()
    {
        $success = false;
        $message = "Gagal simpan data";
        $data    = null;

        $data = [
            'name' => $this->request->getVar('name'),
            'address'  => $this->request->getVar('address'),
        ];

        $user = new Users;
        $res  = $user->insert($data);
        if( $res )
        {
            $success = true;
            $id   = $user->getInsertID();
            $message = "Berhasil simpan data";

            if( $this->request->getFile('photo') )
            {
                $photo = $this->request->getFile('photo');
                $name  = $photo->getName();
                $temp  = $photo->getTempName();
                $ext   = $photo->getClientExtension();
                $newName = $photo->getRandomName();

                if ($photo->isValid() && ! $photo->hasMoved()) {

                    if( in_array($ext, ['jpg', 'jpeg', 'png']) )
                    {
                        $path = FCPATH. 'photos/'. $newName;
                        $photo->move( FCPATH. 'photos', $newName);
    
                        $edit = new Users;
                        $user = $edit->update($id, ['photo'=> str_replace( FCPATH , "", $path) ]);
    
                        $message = "Berhasil simpan data dan upload photo";
                    }else{
                        $message = "Gagal upload photo. File yang boleh diupload adalah tipe image";
                    }
                    

                    $data = $edit->find($id);
                }

            }
        }
        

        return $this->response->setJSON(['success' => $success, 'data' => $data, "message" => $message]);
    }


}

Membuat Javascript

Tambahkan function javascript di dalam file form.html seperti berikut ini. 

<script>
            $(document).ready(function() {
                
                $(document).on('change', '#photo', function(e) {
                    var file = $(this)[0].files[0];
                    var exts = ["image/png", "image/jpg", "image/jpeg"];
                    var max  = 1024 * 1024;
                    
                    //validasi image
                    if( !exts.includes(file.type) )
                    {
                        alert("File must be an image. JPG OR PNG");
                        return false;
                    }

                    //validasi image size
                    if( file.size >  max)
                    {
                        alert("File not large than 1 MB");
                        return false;
                    }
                    

                    if (file) {
                        var reader = new FileReader();
                        reader.onload = function(e) {
                            
                            var image = new Image();
                            image.src = e.target.result;

                            image.onload = function() {
                                
                                $("#display-photo").css("background-image", "url(" + this.src + ")");
                                $("#display-photo").css("background-position", "center");
                                $("#display-photo").css("background-size", "cover"); 
                                $("#display-photo").css("background-repeat", "no-repeat");
                                
                            };

                        }
                        reader.readAsDataURL(file);
                    } else {
                        alert('select a file to see preview');
                        $("#display-photo").css("background", "#b5b5b5");
                    }
                });

                $('#form-submit').validate({
                    errorPlacement: function(label, element) {
                        label.addClass('mt-2 text-danger');
                        label.insertAfter(element);
                    },
                    highlight: function(element, errorClass) {
                        $(element).parent().addClass('has-danger')
                        $(element).addClass('form-control-danger')
                    },
                    submitHandler: function(form) {
                        var formData = new FormData();
                            formData.append('name', $('#name').val());
                            formData.append('address', $('#address').val());
                            formData.append('photo', $('#photo').prop('files')[0]);

                        $.ajax({
                            url: $('#form-submit').attr('action'),
                            type: "POST",
                            data: formData,
                            contentType: false,
                            processData: false,
                            beforeSend: function() {
                                $('#modal-loader').modal({
                                    show: true,
                                    keyboard: false,
                                    backdrop: 'static'
                                });
                            },
                            success: function(response) {
                                $('#modal-loader').modal('hide');
                                alert(response.message);
                            }
                        }).fail(function() {
                            $('#modal-loader').modal('hide');
                            alert('error');
                        })
                        .always(function() {
                            $('#modal-loader').modal('hide');
                        });

                        return false;
                    }
                });
            })
        </script>

Kode di atas berfungsi untuk display image sebelum upload via ajax POST.

 

Output View

Berikut tampilan halaman output

Form POST Ajax

 

Sekian tutorial kali ini, semoga bermanfaat

Jika teman-teman memiliki pertanyaan atau saran mengenai artikel ini, jangan ragu untuk meninggalkan komentar pada form di bawah ini.

 

 


Daftar Artikel

01
CodeIgniter 4 : Cara Install Codeigniter 4 Melalui Composer atau Manual
Artikel membahasa cara install Codeigniter 4 melalui composer atau manual
02
CodeIgniter 4 : Cara Menjalankan CodeIgniter 4 di Xampp atau Laragon
Sobatcdoing.com - Cara menjalankan CodeIgniter 4 di Xampp atau Laragon
03
CodeIgniter 4 : Belajar Routing dan Memahami Controller di CodeIgniter 4
Sobatcoding.com - Belajar Routing dan Memahami Controller di CodeIgniter 4
04
Codeigniter 4 : Konfigurasi Database MYSQL
sobatcoding.com - cara konfigurasi / setting ke database mysql
05
CodeIgniter 4: Tentang Modeling Data dan Contoh Penggunaannya
Sobatcoding.com - Tutorial lengkap codeigniter 4 tentang modeling data
06
Belajar Query Builder pada Codeingiter 4
Sobatcoding.com - Tutorial lengkap belajar query builder pada codeigniter 4
07
Codeigniter 4 Cara Mudah Membuat Pagination dengan Bootstrap
sobatcoding.com - Membuat pagination dengan bootstrap Codeigniter 4
08
CodeIgnter 4 : Implementasi dan Integrasi Menggunakan Datatable
Sobatcoding.com - Tutorial implementasi Codeigniter 4 menggunakan Datatable
09
CodeIgniter 4: Kirim Email Menggunakan Email Hosting Via SMPT Protocol
Sobatcoding.com - Kirim email menggunakan email hosting via SMPT Protocol
10
CodeIgniter 4 Tutorial Sederhana Membuat Form Login dan Logout
Sobatcoding.com - Tutorial sederhana membuat form login dan logout
11
Membuat Fitur Middleware Menggunakan Filters Pada CodeIgniter 4
Sobatcoding.com - Tutorial Membuat Fitur Middleware Menggunakan Filters pada CodeIgniter 4
12
Codeigniter 4 : Cara Submit Form dan Upload File Dengan Ajax
Sobatcoding.com - Tutorial lengkap cara submit form dan upload file menggunakan ajax dan codeigniter 4
13
Cara Upload Codeigniter 4 Ke Hosting Cpanel Serta Menghilangkan Public dan Index.php
sobatcoding.com - Tutorial lengkap cara upload codeigniter 4 ke hosting cpanel serta menghilangkan pPublic dan index.php
14
CodeIgniter 4 : Membuat Barcode Sederhana Menggunakan PHP Barcode Generator
Sobatcoding.com - Tutorial Lengkap Membuat Barcode Sederhana Menggunakan PHP Barcode Generator di Codeigniter 4
15
Codeigniter 4 : Membuat QR Menggunakan Library QR Code
Sobatcoding.com - Tutorial lengkap cara membuat QR Code Sederhana dengan Codeigniter 4
16
REST API Codeigniter 4 Menggunakan JWT Auth
Sobatcoding.com - Tutorial membuat REST API menggunakan JWT Auth

Produk kami