Cara Membuat Komentar Bertingkat dari Database Menggunakan Ajax Pada PHP

Cara Membuat Komentar Bertingkat Pada PHP – Hai melanjutkan tutorial sebelumnya yang berjudul Membuat Nested Media Object pada Bootstrap 4, pada kali ini saya akan membuat kolom komentar yang  mengambil datanya dari database mysql/mariadb menggunakan bahasa pemrograman PHP. Saya akan membuatnya menggunakan media object tentunya dan komentar ini bisa di reply sehingga akan menghasilkan tampilan treeview/bertingkat/berjenjang. Pada contoh di bawah ini saya juga menggunakan Ajax supaya tidak perlu loading dalam menampilkan komentar yang terbarunya.

Membuat Database MySQL

1. Pertama yang WAJIB ada yaitu sobat harus membuat sebuah database. Sobat bisa menggunakan tools bantu seperti navicat, heidi SQL atau lainnya. Sobat juga bisa membuatnya dengan mengakses url localhost/phpmyadmin -> klik tab Database dan tuliskan db_dewankomputer-> Klik tombol Create/Buat.

2. Buat tabel untuk mengetes nantinya apakah benar-benar terkoneksi atau belum dengan mengetikkan query dibawah ini pada tab SQL lalu klik tombol Kirim/Go

 

3. Isikan data pada tbl_komentar dengan mengetikkan query dibawah ini

 

Menampilkan Data dari Database MySQL dengan Ajax

Untuk mempercantik tampilan saya menggunakan bootstrap 4. Langsung saja saya berikan tutorialnya yaitu :

1. Pertama buatlah folder pada htdocs, pada contoh saya beri nama folder dewan-komentar.

2. Buatlah file koneksi.php pada folder project sobat dan isikan dengan script dibawah

isikan sesuai dengan host, user, password, dan nama database sobat. Untuk contoh di bawah ini saya berinama database dengan nama db_dewankomputer.

Jika sobat ingin tahu cara mengkoneksikan dengan dua database atau lebih dalam satu aplikasi maka sobat bisa kunjungi postingan dibawah ini

Cara Membuat Koneksi dengan Database MySQL bisa Dua atau Lebih Koneksi database/Multiple Connection dalam Satu Host maupun beda Host Menggunakan PHP – Part 3

 

3. Buatlah file index.php pada folder sobat dan isikan dengan script dibawah ini

Di paling atas atau pada baris pertama diatas tag <html> kita tambahkan baris berikut untuk membuat session csrf_token

Pada tag <head>

Karena kita menggunakan Ajax maka kita perlu csrf token untuk membatasi siapa saja yang bisa mengakses url. Ini berfungsi untuk keamanan dalam pertukaran datanya.

Kemudian tambahkan css untuk mempercantik tampilan pada contoh kali ini saya menggunakan bootstrap.

Pada tag <body> bagian bawah isikan

Karena ini hanya demo maka saya menggunakan css dan js online. Jika untuk kepentingan development disarankan untuk mendownload terlebih dahulu librarinya atau nanti sobat bisa download project di akhir postingan.

Pada tag <body> isikan script dibawah untuk membuat form dan menampilkan komentarnya

 

4. Masih di index.php, pada kolom body paling bawah tepatnya dibawah plugin jquery kita tambahkan script dibawah

Penjelasan :

1. Pada kode dibawah adalah untuk mengirim csrf token saat menggunakan Ajax. Sobat bisa menempatkan kode ini pada main.js yang mana file tersebut kita indludekan di setiap file sehingga kita tidak perlu menambahkan kode ini pada setiap file atau pada setiap Ajax. Cara ini lebih memudahkan kita karena kita hanya sekali menuliskan kode dibawah. Kode ini adalah kode yang akan dikirimkan setiap kita membuat ajax.

 

2. Kode dibawah adalah untuk menyimpan komentar ke dalam database, nilai pada form dengan id=’form_komen’ akan diambil nilainya dan dikirimkan ke url tambah_komentar.php dengan method POST dan jika berhasil maka form akan direset atau dikosongkan lalu komentar_id diisi dengan 0 dan merefresh komentar.

Sedangkan pada kode dibawah adalah untuk mengambil komentar dari database dan menampilkannya pada div dengan id=’display_comment’

Terakhir pada kode dibawah adalah untuk mengganti id yang ada pada input text yang disembunyikan sehingga sistem tahu jika user sedang membalas komentar yang mana

 

5. Untuk keamanan karena kita menggunakan header pada ajax, kita perlu membuat file csrf.php kemudian isikan dengan script dibawah

Catatan :

– Jika setelah ditambahkan csrf terjadi error dengan pasan ‘No CSRF Token’ berarti sobat belum mengirimkan csrf saat membuat ajax. Script saat mengirimkan seharusnya ada pada main.js atau file php menggunakan kode $.ajaxSetup().

– Jika sobat sudah mengirimkan dan masih ERROR yang sama mungkin kasusnya seperti yang pernah saya alami, pada ajaxSetup saya mengirimkan Csrf-Token namun yang terkirim malah csrf-token, sehingga sobat harus mengganti pada kode $headers[‘Csrf-Token’] menjadi $headers[‘csrf-token’].

-Sedangkan jika sobat mengalami error Wrong csrf token berarti token yang dikirimkan tidak sama, mungkin penyebabnya sessionn belum dimulai sehingga sistem membuat session cesr_token baru. Untuk kasus inisobat perlu menambahkan kode session_start();

 

6. Buat file tambah_komentar.php yang berfungsi untuk menyimpan komentar saat klik Simpan dan isikan dengan script dibawah ini

Penjelasan :

– Diatas saya membuat fungsi anti() yang gunanya untuk memfilter semua inputan dari user karena jika user menginputkan tag HTML atai JAVASCRIPT jika tidak kita filter maka akan merusak tampilan aplikasi kita.

 

6. Buat file ambil_komentar.php yang berfungsi untuk mengambil komentar dari database dan isikan dengan script dibawah ini

Penjelasan :

1. Kode diatas merupakan kode untuk mengambil komentar dari database dan menampilkannya secara bertingkat dan menggunakan media object. Sebenarnya intinya adalah pada fungsi ambil_reply yang berguna untuk mengambil balasan dari komentarnya dan ditampilkan berdasarkan parent idnya.

2. Pada baris include ‘csrf.php’ merupakan script untuk mengamankan dalam pertukaran data saat menggunakan Ajax. Jika tidak ada header maka siapapun dan dimanapun baik menggunakan local ataupun menggunakan server online dapat menginsert data melalui url pada Ajax. File csrf.php ini kita include-kan ke setiap file yang merupakan file action yang menggunakan Ajax dalam pertukaran datanya termasuk dalam tambah_komentar.php.

 

7. Kemudian sobat jalankan project sobat dan akan menghasilkan seperti tampilan berikut

 

Begitulah cara membuat kolom komentar bertingkat hingga suku ke-n. Tentunya sobat bisa batasi juga komentarnya sampai anak ke berapa. Sekian postingan saya tentang Cara Membuat Komentar Bertingkat dari Database Menggunakan Ajax Pada PHP. Jika ada pertanyaan silahkan sobat tinggalkan pada kolom komentar dibawah.

 

Jika sobat ingin mendownload tutorial diatas maka sobat bisa klik link dibawah ini :

Sampai jumpa pada postingan saya selanjutnya..

 

Update !!!

Jika ingin membatasi tingkatan komentarnya maka sobat bisa mengganti method/function ambil_reply() pada file ambil_komentar.php dengan script dibawah ini :

Pada contoh diatas yang dilakukan adalah pada script if($tingkat < 4){ } yang mana jika tingkat komentarnya kurang dari 4 yang berarti tingkat 1,2,3 maka akan muncul tombol reply. Jika sudah ada 4 tingkat maka tombol reply tidak muncul jadi tidak mungkin akan ada tingkatan 5/6/7/dst.

Ingat banyak jalan menuju Roma jadi dalam pemrograman juga tidak hanya ada 1 cara melainkan banyak cara. Setiap programmer pasti memiliki cara tersendiri. Sobat bisa menemukan cara sendiri atau bisa menggunakan cara saya.

51 thoughts on “Cara Membuat Komentar Bertingkat dari Database Menggunakan Ajax Pada PHP

  1. [18-Aug-2019 16:42:25 UTC] PHP Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::get_result() in /home/undanga8/public_html/komentar/ambil_komentar.php:7
    Stack trace:
    #0 {main}
    thrown in /home/undanga8/public_html/komentar/ambil_komentar.php on line 7

    00:43

  2. kodenya seperti apa?

    pada kode bagian ini salah…
    mysqli_stmt::get_result()

    biasanya itu querynya ada yang salah bisa di query/prepare/bind_paramnya

    1. Kodenya saya pakai yang di share di atas pak membuat file ambil_komentar.php tetapi tidak bisa memunculkan komentar di file index padahal di database sudah muncul saat ada yg menginput komentar.

      1. query sama tabelnya gimana?

        kalo sama persis kaya diatas harusnya jalan karena di artikel sama di demo sama 100%

        kalo emank sama 100% tapi masih muncul error mungkin bisa disebabkan oleh versi phpnya
        jangan sampai menggunakan PHP versi 5.3 kebawah

          1. untuk versi PHPnya?
            kalau < versi 5.x berarti ngga support mysqli kalau ada program yang bisa jalan pake mysqli berarti ada yg salah dengan script / tabelnya

    1. tinggal di sebelahnya kasih tombol hapus trus kasih actionnya di artikel tentang CRUD di blog ini banyak membahas hapus data

  3. Mas, gimana caranya jika ditambah fitur upload gambar, saya sudah nyoba keliling gk nemu solusinya.. mohon bimbingannya..

  4. bang gimana kalo tanpa mengisi nama, hanya ketik komentar aja, artinya ketika komentarnya dikirim tampilan nama yg ngirim menggunakan nama login yang sudah ada, makasih

    1. lebih gampang malah mas..
      hapus input text untuk namanya trus pas insert di tambah_komentar.php tinggal ganti $nama_pengirim = $_SESSION[‘session nama loginnya’]

  5. kalau mau hapus commentar bagaimana yah cara buat tombol delete, mohon bantuan codingnya, saya coba coba cuman pusing, tidak berhasil, error, tolong bantuannya author untuk membuat tombol delete komentar

      1. makasih sudah membalas pesan saya, saya sudah memahami konsep dan sudah melakukan perintah membuat event click ‘.delete’, sudah aman, sekarang yang saya bingung cara membuat tombol delete sebelah tombol reply bagaimana caranya, codes untuk bikin tombol delete saya sudah buat cuman, tombol delete diinput kemana codesnya supaya bisa muncul disamping reply? apakah dimasukkan di ambil_komentar.php atau buat file .php baru????

        1. iya betul mas di ambil_komentar.php kan tombol reply jg ada disitu
          itu hanya html biasa standar bootstrap tinggal masukain di tag div dengan class col-sm-2

  6. Mas untui menyambungkan ke web blog per post error terus. Untuk mendapatkan id per post karena single file.. saya jadikan 1 gk bisa csrfnya error..mohon bantuannya nyambunin ke blog web

  7. ok makasi kak sudah bisa, cuman untuk bikin event click delte bagaimana yah, saya tombolnya tidak berfungsi, contoh saja yang saya pakai: function load_comment(){
    $.ajax({
    url:”hapus.php”,
    method:”GET”,
    success:function(data){
    $(‘#display_comment’).html(data);
    }, error: function(data) {
    console.log(data.responseText)
    }
    })
    } $(document).on(‘click’, ‘.delete’, function(){
    var komentar_id = $(this).attr(“id”);
    $(‘#komentar_id’).val(komentar_id);
    $(‘#nama_pengirim’).focus();
    });

    1. ajax hapusnya bukan di dalam fungsi load_comment() tapi dalam event click delete yg mana ngirim komentar idnya jg lewat ajax

    1. di class .media .border tinggal di tambahkan class dibawah jika ingin menggunakan warna bawaan bootstrap atau bisa bikin custom css sendiri dan tambahan class-nya pada div .media
      .border-primary
      .border-secondary
      .border-success
      .border-danger
      .border-warning
      .border-info
      .border-light
      .border-dark
      .border-white

      1. Kebetulan saya baru belajar kodingan pak, trus saat ini saya lgi belajar hosting juga, karena saya butuh sistem komentar, saya cari” Code, trus ketemu source code dari dewan komputer ini.
        Pertanyaan saya, saat saya akses web saya dengan http:// data dari database saya tampil diweb, tpi saat saya akses dengan https:// data tidak muncul, dan saya tidak bisa input komentar.

        Itu kenapa ya pak?

        Maaf klo bahasa program saya kaku,soalnya masih belajar” Pak.
        Terima kasih dewankomputer

        1. pertama harus tahu pesan errornya apa lihat di consolenya,
          terus url ajaxnya pakai url full atau tidak

    1. 1. cek tokennya yg di keisi atau ngga pas di web
      2. jika keisi coba di console pas dikirim pada
      ajaxSetup keisi atau ngga, jika keisi isinya sama atau ngga
      3. jika ada valuenya dan keisi coba di cek di csrf.php $headers[‘Csrf-Token’] isinya sama atau ngga dengan $_SESSION[‘csrf_token’]
      4. jika $headers[‘Csrf-Token’] isinya sesuai dengan yg di $_SESSION[‘csrf_token’] baru. pastikan session_start() udah ada dan ada di atas csrf.php dan pastikan jg session tersimpan di webnya biasanya ada di php.ini atau bisa dicoba dengan ditambah di index.php paling atas sebelum session_start()
      ini_set(‘session.save_path’,’/tmp’);

    1. coba di console errornya apa?
      apakah sudah coba ini?
      Catatan :
      – Jika setelah ditambahkan csrf terjadi error dengan pasan ‘No CSRF Token’ berarti sobat belum mengirimkan csrf saat membuat ajax. Script saat mengirimkan seharusnya ada pada main.js atau file php menggunakan kode $.ajaxSetup().
      – Jika sobat sudah mengirimkan dan masih ERROR yang sama mungkin kasusnya seperti yang pernah saya alami, pada ajaxSetup saya mengirimkan Csrf-Token namun yang terkirim malah csrf-token, sehingga sobat harus mengganti pada kode $headers[‘Csrf-Token’] menjadi $headers[‘csrf-token’].
      -Sedangkan jika sobat mengalami error Wrong csrf token berarti token yang dikirimkan tidak sama, mungkin penyebabnya sessionn belum dimulai sehingga sistem membuat session cesr_token baru. Untuk kasus inisobat perlu menambahkan kode session_start();

  8. gan kalau komentar seperti yg komentar ini ada ga sourcode nya ?
    jadi form reply nya muncul mengikuti komentar nya.

  9. Mas, kenapa tampilan komentarnya berantakan ya?
    [“\r\n
    \r\n \”foto-user\”\r\n
    \r\n
    \r\n
    \r\n

    1. di database tambah kolom id_post pas insert komentar insert jg id_postnya,
      kalo mau nampilih tinggal tambah “where id_post=?”

Leave a Reply

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

twelve − eleven =