Proses Input data masih duplikat/double

Halo izin bertanya, saya ada aplikasi absen menggunakan FW CI dimana ketika sudah melakukan masuk maka button absen masuk sy disable akan tetapi dari user kadang pengaruh jaringan (mungkin) ataupun laptop/pc yang digunakan saat absen lemot sehingga kadang mengklik button absen masuk keseringan sehingga data yang terinput lebih dari satu, nah pertanyaannya bagaimana mengatasi agar tidak mengklik lebih dari 1 dan data tikdak bisa terinput lebih dari 1 kali. terima kasih 
avatar Mantofani

@Mantofani

56 Kontribusi 3 Poin


Jawaban

Apakah berhubungan dgn javascript juga saat proses nya? Kalau menggunakan ajax JQuery. Cara yang bisa kupikirkan itu

Menggunakan method complete nya ajax.
if(lagi_proses == false){

 lagi_proses = true;
 $.ajax({
   url:..
   ..
   .
   success:function(){
     // jika success
   },
   error:function(){
     // jika error
   },
   complete:function(){
     // tidak peduli jika success
     // ataupun error.
     // bakal dieksekusi programnya disini
     // jika dah dapat respon balik
     lagi_proses = false;
   }

}) }
Nah itu jika jquery. 
Bila bukan bisa disesuaikan dgn yang kamu gunakan
avatar GrennKren

@GrennKren

61 Kontribusi 45 Poin

  • iya mas sy pakai jquery di prosesnya, boleh dibantu sesuaikan mas sy sertakan script nya dibawah. trma kasih sebelumnya - @Mantofani
  • Gak perlu banyak yang diubah. Cukup seperti di atas - @GrennKren
  • Jadi cara kerjanya itu ketika si user mengklik tombol submit absen.. variabel lagi_proses di set ke true untuk mencegah ajax dipanggil . Dan menunggu proses selesai baru diset kembali ke false - @GrennKren

Tampikan semua |


public function cek_in()
    {
        $id_user = $this->session->userdata('id_user');
        $tanggal = date('Y-m-d');
        $time_in = date('Y-m-d H:i:s');
        $tgl = date('dmYHis');

        $image = $this->input->post('image');
        $kondisi = $this->input->post('kondisi');
        $tempat_bekerja = $this->input->post('tempat_bekerja');
        $transportasi = $this->input->post('transportasi');

        $image = str_replace('data:image/jpeg;base64,', '', $image);
        $image = base64_decode($image);
        $filename = $id_user . '_' . $tgl . '.png';
        file_put_contents(FCPATH . '/uploads/masuk/' . $filename, $image);

        if (strtotime($time_in) >= strtotime(date('Y-m-d') . ' 09:00:00')) {
            $jadwal = 'Shifting';
        } else {
            $jadwal = 'Reguler';
        }

        if (($jadwal == 'Reguler' and $time_in > date('Y-m-d') . ' 08:15:00') or ($jadwal == 'Shifting' and $time_in > date('Y-m-d') . ' 17:15:00')) {
            $keterangan = 'Terlambat';
        } else {
            $keterangan = '';
        }


        $data = array(
            'id_user' => $id_user,
            'tanggal' => $tanggal,
            'time_in' => $time_in,
            'jadwal' => $jadwal,
            'keterangan' => $keterangan,
            'check_in_image' => $filename,
            'kondisi' => $kondisi,
            'tempat_bekerja' => $tempat_bekerja,
            'transportasi' => $transportasi,
        );

        $this->model_absensi->cek_in($data, 'tbl_absensi');
        $this->session->set_flashdata('absen', '<div class="alert alert-success alert-dismissible fade show" role="alert">
       Absen Masuk Berhasil.... Semangat Bekerja.....
      </div>');

        redirect('absensi/tampil_detail_absensi');
    }
Ini Controllernya 

 <?php if ($disable_cek_in == '') { ?>
    <script language="JavaScript">
        var kondisi = '';
        var tempat_bekerja = '';
        var transportasi = '';
        $(function() {
            Webcam.set({
                width: 400,
                height: 300,
                image_format: 'jpeg',
                jpeg_quality: 90
            });
            Webcam.attach('#webcam-cek-in');

            $("input[name='kondisi']").change(function() {
                kondisi = $("input[name='kondisi']:checked").val();
            });
            $("input[name='tempat_bekerja']").change(function() {
                tempat_bekerja = $("input[name='tempat_bekerja']:checked").val();
            });
            $("input[name='transportasi']").change(function() {
                transportasi = $("input[name='transportasi']:checked").val();
            });
        });
        $('#form-cek-in').submit(function(event) {
            event.preventDefault();
            var image = '';
            Webcam.snap(function(data_uri) {
                image = data_uri;
            });
            $('#transportasi').change(function() {
                var is_external = $("input[name='is_external']:checked").val(); //name is is_external not radio
                alert("selected values: " + is_external); //Return undefined  
            });
            if (image != '' && kondisi != '' && tempat_bekerja != '' && transportasi != '') {
                $.ajax({
                    url: '<?php echo site_url('crew/absensi/cek_in'); ?>',
                    type: 'POST',
                    dataType: 'json',
                    data: {
                        image: image,
                        kondisi: kondisi,
                        tempat_bekerja: tempat_bekerja,
                        transportasi: transportasi
                    },
                    success: function(returnData) {
                        var res = JSON.parse(returnData);
                        // location.reload();
                        window.location.href = '<?php echo site_url('crew/absensi/getdataabsensi')?>?m=m';
                    },
                    error: function(xhr, status, error) {
                        var errorMessage = xhr.status + ': ' + xhr.statusText
                        // location.reload();
                        window.location.href = '<?php echo site_url('crew/absensi/getdataabsensi')?>?m=m';
                    }
                });
            } else {
                alert('Kondisi, Tempat Kerja dan Transportasi harus diisi!')
            }
        });
    </script>
<?php } ?>
ini Proses di viewnya mas

boleh dibantu sesuaikan?
avatar Mantofani

@Mantofani

56 Kontribusi 3 Poin


Kalau html button anda set sebagai disable, segera setelah user menekannya, mestinya tidak akan bisa double. Ini kayaknya terlambat di-disable.

Coba di bagian sebelum melakukan ajax call, langsung anda disable. Sebelumnya, berikan id kepada submit button anda, misalnya "btn_submit"

$('#form-cek-in').submit(function(event) {
            event.preventDefault();
            var image = '';
            Webcam.snap(function(data_uri) {
                image = data_uri;
            });
            $('#transportasi').change(function() {
                var is_external = $("input[name='is_external']:checked").val(); //name is is_external not radio
                alert("selected values: " + is_external); //Return undefined  
            });
            if (image != '' && kondisi != '' && tempat_bekerja != '' && transportasi != '') {
                document.getElementById('btn_submit').disabled = true;
                $.ajax({
                    url: '<?php echo site_url('crew/absensi/cek_in'); ?>',
                    type: 'POST',
                    dataType: 'json',
                    data: {
                        image: image,
                        kondisi: kondisi,
                        tempat_bekerja: tempat_bekerja,
                        transportasi: transportasi
                    },
                    success: function(returnData) {
                        var res = JSON.parse(returnData);
                        // location.reload();
                        window.location.href = '<?php echo site_url('crew/absensi/getdataabsensi')?>?m=m';
                    },
                    error: function(xhr, status, error) {
                        var errorMessage = xhr.status + ': ' + xhr.statusText
                        // location.reload();
                        window.location.href = '<?php echo site_url('crew/absensi/getdataabsensi')?>?m=m';
                    }
                });
            } else {
                alert('Kondisi, Tempat Kerja dan Transportasi harus diisi!')
            }
        });

avatar danielwilianto

@danielwilianto

13 Kontribusi 12 Poin


Login untuk gabung berdiskusi