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

60 Kontribusi 3 Poin

Diperbarui 1 tahun yang lalu

3 Jawaban:

<div>Apakah berhubungan dgn javascript juga saat proses nya? Kalau menggunakan ajax JQuery. Cara yang bisa kupikirkan itu<br><br>Menggunakan method complete nya ajax.</div><pre>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; } <br> }) }</pre><div>Nah itu jika jquery.&nbsp;<br>Bila bukan bisa disesuaikan dgn yang kamu gunakan</div>

avatar GrennKren
@GrennKren

62 Kontribusi 47 Poin

Dipost 1 tahun yang lalu

Tanggapan

iya mas sy pakai jquery di prosesnya, boleh dibantu sesuaikan mas sy sertakan script nya dibawah. trma kasih sebelumnya

Gak perlu banyak yang diubah. Cukup seperti di atas

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

variabel lagi_proses itu dari mana mas?

Ya buat aja inisialiasi di awal seperti variabel kondisi, tempat_bekerja, dan transportasi. Di situ buat meletakin lagi_proses

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

    $image = $this-&amp;gt;input-&amp;gt;post(&#039;image&#039;);
    $kondisi = $this-&amp;gt;input-&amp;gt;post(&#039;kondisi&#039;);
    $tempat_bekerja = $this-&amp;gt;input-&amp;gt;post(&#039;tempat_bekerja&#039;);
    $transportasi = $this-&amp;gt;input-&amp;gt;post(&#039;transportasi&#039;);

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

    if (strtotime($time_in) &amp;gt;= strtotime(date(&#039;Y-m-d&#039;) . &#039; 09:00:00&#039;)) {
        $jadwal = &#039;Shifting&#039;;
    } else {
        $jadwal = &#039;Reguler&#039;;
    }

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


    $data = array(
        &#039;id_user&#039; =&amp;gt; $id_user,
        &#039;tanggal&#039; =&amp;gt; $tanggal,
        &#039;time_in&#039; =&amp;gt; $time_in,
        &#039;jadwal&#039; =&amp;gt; $jadwal,
        &#039;keterangan&#039; =&amp;gt; $keterangan,
        &#039;check_in_image&#039; =&amp;gt; $filename,
        &#039;kondisi&#039; =&amp;gt; $kondisi,
        &#039;tempat_bekerja&#039; =&amp;gt; $tempat_bekerja,
        &#039;transportasi&#039; =&amp;gt; $transportasi,
    );

    $this-&amp;gt;model_absensi-&amp;gt;cek_in($data, &#039;tbl_absensi&#039;);
    $this-&amp;gt;session-&amp;gt;set_flashdata(&#039;absen&#039;, &#039;&amp;lt;div class=&quot;alert alert-success alert-dismissible fade show&quot; role=&quot;alert&quot;&amp;gt;
   Absen Masuk Berhasil.... Semangat Bekerja.....
  &amp;lt;/div&amp;gt;&#039;);

    redirect(&#039;absensi/tampil_detail_absensi&#039;);
}&lt;/pre&gt;&lt;div&gt;Ini Controllernya&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;pre&gt; &amp;lt;?php if ($disable_cek_in == &#039;&#039;) { ?&amp;gt;
&amp;lt;script language=&quot;JavaScript&quot;&amp;gt;
    var kondisi = &#039;&#039;;
    var tempat_bekerja = &#039;&#039;;
    var transportasi = &#039;&#039;;
    $(function() {
        Webcam.set({
            width: 400,
            height: 300,
            image_format: &#039;jpeg&#039;,
            jpeg_quality: 90
        });
        Webcam.attach(&#039;#webcam-cek-in&#039;);

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

&lt;?php } ?&gt;</pre><div>ini Proses di viewnya mas<br><br>boleh dibantu sesuaikan?</div>

avatar Mantofani
@Mantofani

60 Kontribusi 3 Poin

Dipost 1 tahun yang lalu

<div>Kalau html button anda set sebagai disable, segera setelah user menekannya, mestinya tidak akan bisa double. Ini kayaknya terlambat di-disable.<br><br>Coba di bagian sebelum melakukan ajax call, langsung anda disable. Sebelumnya, berikan id kepada submit button anda, misalnya "btn_submit"<br><br></div><pre>$('#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 != '' &amp;&amp; kondisi != '' &amp;&amp; tempat_bekerja != '' &amp;&amp; transportasi != '') { document.getElementById('btn_submit').disabled = true; $.ajax({ url: '&lt;?php echo site_url('crew/absensi/cek_in'); ?&gt;', 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 = '&lt;?php echo site_url('crew/absensi/getdataabsensi')?&gt;?m=m'; }, error: function(xhr, status, error) { var errorMessage = xhr.status + ': ' + xhr.statusText // location.reload(); window.location.href = '&lt;?php echo site_url('crew/absensi/getdataabsensi')?&gt;?m=m'; } }); } else { alert('Kondisi, Tempat Kerja dan Transportasi harus diisi!') } });</pre><div><br></div>

avatar danielwilianto
@danielwilianto

16 Kontribusi 17 Poin

Dipost 1 tahun yang lalu

Login untuk ikut Jawaban