Sistem Pending PHP, Waiting For Admin Approval

Akan Tampil di Website Setelah Admin Menyetujui

2

Setahun sudah artikel tentang membuat sistem login PHP dengan beberapa level user (admin, editor, writer, dsb) dipublikasi, sepertinya saat ini waktu yang tepat untuk memberikan informasi yang serupa yaitu tentang sistem waiting moderation PHP. Ini merupakan sebuah logic yang akan menahan (pending) setiap kiriman yang dibuat oleh user selain admin, kiriman tersebut tidak akan tampil di situs web sampai admin menyetujuinya.

Logic ini dapat diterapkan untuk hal apapun seperti kiriman artikel, komentar, dan lainnya. Kita buat contoh untuk kiriman artikel, ketika pengguna selain administrator maka artikel tersebut dalam status pending dan belum tampil di blog sampai disetujui oleh administrator. Begitu juga jika menerapkan logic ini di komentar atau yang lainnya.

Caranya super gampang sob, misalnya di table database untuk kiriman artikel yang sudah ada sekarang seperti ini:

ads by posciety

  • id
  • id_kategori
  • judul
  • isipost
  • gambarpost
  • date
  • id_author

Tambahkan satu struktur baru yang akan digunakan untuk sistem pending, biasanya saya gunakan statuspost. Maka sekarang table database akan berisi seperti ini:

  • id
  • id_kategori
  • judul
  • isipost
  • gambarpost
  • date
  • id_author
  • statuspost

Untuk statuspost, atur defaultnya menjadi sebuah angka saja supaya mudah misalnya angka 0 mengartikan pending dan angka 1 mengartikan publish. Maka default value untuk statuspost adalah 0.

gambar 1 - table database post

Cara mengganti default value ini klik saja Ubah kemudian pada bagian Bawaan (jika menggunakan bahasa Indonesia) pilih Seperti yang didefinisikan: dan masukkan angka 0, ini bisa juga dilakukan langsung ketika membuat struktur baru. Jangan lupa atur sebagai INT karena kita mendeklarasikan ini sebagai angka.

Sampai sini, sistem pending siap dibangun. Pastikan kamu telah membaca tutorial sebelumnya tentang Menampilkan Data di PHP Sesuai yang Dibuat Oleh User Login Tersebut, itu sangat membantu untuk menyusun kode yang berfungsi menampilkan data berbeda setiap user login sesuai dengan apa yang mereka buat. Misalnya user A login maka ia akan melihat semua artikel yang dia buat di dasbornya, artikel yang dibuat oleh user B dan user lain tidak akan ditampilkan.

Sekedar mengingatkan, buatlah satu halaman untuk menambah post/artikel di dalam dasbor user. Misalnya seperti ini:

gambar 2 - form add post

Buat sesuai selera aja ya sob 😀

Untuk kiriman post ini tentu kita akan memanfaatkan sistem insert, disini saya tidak akan bahas lagi karena sudah dijelaskan dengan sangat rinci di tutorial sebelumnya tentang membuat sistem insert di PHP. Silahkan dibaca terlebih dahulu jika ingin mengetahui sistem insert lebih rinci.

Salinlah kode berikut dan tempelkan di halaman penambahan post:

<?php

    $sess_prof = $_SESSION;

    if(isset($_POST['submitpost'])) {
        $pilih_kategori =   $_POST['pilih_kategori'];
        $judulpost =   $_POST['judulpost'];
        $isipost =   $_POST['isipost'];
        $date = date("Y-m-d H:i:s");
        $author = $_POST['id_author'];
        $statuspost = $_POST['statuspost'];
        $file_name  =   $_FILES['gambarpost']['name'];
        $tmp_name   =   $_FILES['gambarpost']['tmp_name'];
        move_uploaded_file($tmp_name, "../images/blog/".$file_name);
        mysqli_query($koneksi, "INSERT INTO post VALUES('','$pilih_kategori','$judulpost','$isipost','$file_name','$date','$author','$statuspost')");
        header("location:index.php?daftar-blog&berhasiltambahblog");
    }

    $kategori = mysqli_query($koneksi, "SELECT * FROM kategoripost ORDER BY nama_kategoripost ASC");

?>
        <div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-lg-12 col-md-12">
                        <div class="card">
                            <div class="header">
                                <h4 class="title" id="berhasiltambahakun">Tambah Post</h4>
                            </div>
                            <div class="content">
                                <form method="post" enctype="multipart/form-data" role="form">
                                    <div class="row">
                                        <div class="col-md-12">
                                            <div class="form-group">
                                                <label for="judulpost">Judul Post</label>
                                                <input type="text" name="judulpost" class="form-control border-input" placeholder="Masukkan Judul Post">
                                            </div>
                                        </div>
                                      </div>
                                      <div class="row">
                                        <div class="col-md-12">
                                          <div class="form-group">
                                            <textarea class="form-control border-input" name="isipost" required placeholder="Tulis Artikel Menarik..." rows="7"></textarea>
                                        </div>
                                        </div>
                                      </div>
                                    <div class="row">
                                        <div class="col-md-6">
                                            <div class="form-group">
                                                <label for="username_author">Author Username</label>
                                                <input type="text" name="username_author" class="form-control border-input" readonly value="<?php echo $sess_prof['akun_username'] ?>">
                                            </div>
                                        </div>
                                        <div class="col-md-6">
                                            <label for="pilih_kategori">Kategori</label>
                                            <select name="pilih_kategori" class="form-control border-input" required>
                                                <option value="">Pilih Kategori</option>
                                                    <?php if(mysqli_num_rows($kategori)) {?>
                                                        <?php while($row_kategori = mysqli_fetch_array($kategori)) {?>
                                                            <option value="<?php echo $row_kategori['id'] ?>"><?php echo $row_kategori['nama_kategoripost'] ?></option>
                                                        <?php } ?>
                                                    <?php } ?>
                                            </select>
                                        </div>
                                    </div>
                                    <div class="row">
                                        <div class="col-md-6">
                                            <div class="form-group">
                                              <label for="gambarpost">Gambar Post</label>
                                              <input type="file" name="gambarpost" class="form-control border-input" required>
                                            </div>
                                        </div>
                                        <div class="col-md-6">
                                            <div class="form-group">
                                              <button type="submit" name="submitpost" class="btn btn-info">Kirim Post</button>
                                              <button type="reset" class="btn btn-danger">Batal</button>
                                            </div>
                                        </div>
                                    <div>
                                    <div class="col-xs-12">
                                        <input type="hidden" name="id_author" value="<?php echo $sess_prof['akun_id'] ?>">
                                    </div>
                                </form>
                            </div>
                            <div class="col-xs-12 text-center">
                                    <a href="index.php?daftar-blog">&larr; Kembali Ke Daftar Artikel Saya</a>
                                </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

Karena disini saya contohkan dengan kategori maka memerlukan query kategori juga, hapus saja jika tidak diperlukan. Pastikan kamu sudah benar menyesuaikan kode PHP ini dengan HTML yang ada.

Sampai sini mungkin ada yang bertanya, lalu value statuspost tadi untuk apa ?

Kita cukup terapkan di sistem insert ($_POST) dan di query saja agar tidak error ketika mengirim ke database, tidak perlu dibuatkan bidang formulirnya karena di awal tadi kita sudah menentukan default value (nilai bawaan) untuk statuspost adalah 0. Artinya setiap post yang dikirimkan akan memiliki statuspost 0.

Tidak hanya sampai sini, masih ada beberapa yang perlu kita rampungkan !

Oke, sekarang semua post yang dikirim akan memiliki statuspost 0. Lalu apa yang harus dilakukan ? Saya bertanya balik, dimana kamu menampilkan post ? Apakah di halaman blog ? atau di halaman beranda ? Kita samakan saja misalnya menampilkan post di halaman blog.

Jika pernah membaca tutorial sebelumnya tentang cara menampilkan data dari database di PHP, maka tidak akan sulit lagi. Cukup tambahkan WHERE post.statuspost = '1'artinya post yang akan ditampilkan adalah yang memiliki statuspost 1 (tadi kita sudah sepakat bahwa 0 adalah pending dan 1 adalah pusblish), atur-atur saja angka berapa yang ingin digunakan asalkan konsisten.

$query  = mysqli_query($koneksi, "SELECT * FROM post WHERE post.statuspost = '1' ORDER BY id DESC");

Dengan begini, ketika mengunjungi halaman blog di website bersangkutan maka akan menampilkan semua post yang memiliki statuspost 1 alias publish alias sudah disetujui admin. Sedangkan artikel yang memiliki statuspost 0 tidak akan tampil dan menunggu persetujuan admin.

gambar 3 - menampilkan post publish

Lalu Bagaimana Admin Menyetujuinya ?

Masih ada yang kurang rasanya ketika menjelaskan hanya sampai sini saja, apakah admin menyetujui post dengan mengganti angka 0 menjadi 1 di database ? Bisa, tapi jangan dilakukan !

Diatas artikel ini sudah dicantumkan link tutorial tentang menampilkan post berbeda masing-masing user login, disitu sudah dijelaskan bahwa user A hanya dapat melihat post yang ia buat, user B juga begitu, sedangkan admin dapat melihat semua post yang ada di database mulai dari yang pending sampai yang sudah publish.

Artinya admin dapat mengedit artikel/post tersebut dan mengganti statuspost nya dari 0 menjadi 1, pastikan kamu sudah membuat bidang formulir untuk ini. Contoh:

gambar 4 - edit post untuk administrator

Gantilah menjadi angka 1 kemudian Update Post (ini menggunakan sistem edit yang pernah dibahas pada tutorial sebelumnya), maka sistem akan menyimpan data terbaru ini (angka 1) dan mungkin beberapa isi post yang ingin admin ubah. Setelah berubah menjadi 1 maka post akan tampil di halaman blog.

Masih bingung ? Lihat : Video tutorial sistem pending admin approval PHP.

Selamat mencoba !

Artikel Lainnya
Lihat Komentar (2)

Website ini menggunakan cookie untuk pengalaman yang lebih baik Setuju & Tutup Selengkapnya