Menampilkan Data Berdasarkan User Yang Login

Di tutorial Membuat Form Login Yang Lebih Aman telah dijelaskan cara membuat form login. Setelah user berhasil login maka perlu menampilkan data yang hanya bisa diakses oleh user. Tutorial ini akan menjelaskan cara untuk menampilkan data berdasarkan user yang login. Membatasi akses edit dan hapus data hanya untuk data yang dimiliki oleh user. Tutorial php ini juga dilengkapi video tutorial yang bisa dilihat di channel Youtube MyPHPtutorials.

Video tutorial menampilkan data berdasarkan user yang login

Tutorial menampilkan data berdasarkan user yang login

Dalam tutorial ini kita akan menggunakan contoh Todo list. Berikut langkah langkahnya:

  1. Membuat table todo di database
  2. Membuat form untuk tambah todo
  3. Menampilkan todo list
  4. Update status todo list

Membuat Table Todo di Database

Buatlah sebuah table dengan nama todo dengan struktur sebagai berikut

Kolom Tipe Data Keterangan
id integer primary key, auto increment
judul varchar
selesai tinyint(1) 1 selesai, 0 belum
id_user integer menyimpan pemilih data

Kolom id_user sangat penting untuk mengetahui pemilik data. Anda bisa membuat releasi ke table users dari tutorial sebelumnya.

Membuat Form Untuk Tambah Todo

Sebelum lanjut membuat form terlebih dahulu perhatikan potong kode login di bawah dari tutorial sebelumnya

<?php
session_start();
// ....
        $_SESSION['browser'] = md5($_SERVER['HTTP_USER_AGENT']);
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        $_SESSION['user'] = array(
            'id' => $user['id'],
            'nama' => $user['nama']
        );
        header("Location: admin.php");
        exit;
                // ....
?>

$_SESSION['user'] menyimpan data dari user yang login, kita akan menggunakan variable ini untuk menyimpan nilai id_user di table todo. Sekarang buatlah file index.php dan buat form untuk menambahkan todo.

<!DOCTYPE html>
<html>
    <head>
        <title>Todo List</title>
        <style>
           ul {
               list-style: none;
               margin-left: 0;
               padding-left: 0;
           }
        </style>
    </head>
    <body>
        <h3>Selamat Datang <?php echo htmlentities($_SESSION['user']['nama']);?></h3>
        <p>
        <a href="logout.php">Logout</a>
        </p>
        <h1>Todo List</h1>
        <form action="" method="POST">
            <input type="text" name="judul" placeholder="Judul" required/>
            <input type="submit" name="aksi" value="Tambah"/>
        </form>
    </body>
</html>

Tombol <input type="submit" name="aksi" value="Tambah"/> akan digunakan untuk membuat Todo baru. Tombol diberi attribute name="aksi" untuk membedakan aksi yang dilakukan oleh user, menambahkan data atau edit data. Buatlah kode php dibawah untuk menyimpan Todo.

<?php
include_once "cek-akses.php";
$pdo = include "koneksi.php";
if (!empty($_POST)) {
    if ($_POST['aksi'] == 'Tambah') {
        $query = $pdo->prepare("insert into todo (judul, selesai, id_user) values (:judul, 0, :id_user)");
        $query->execute(array(
            'judul' => $_POST['judul'],
            'id_user' => $_SESSION['user']['id']
        ));
        header("Location: index.php");
        exit;
    }
}
?>

Perhatikan query yang digunakan insert into todo (judul, selesai, id_user) values (:judul, 0, :id_user) data user dimasukan ke dalam kolom id_user dan nilainya diambil dari data session $_SESSION['user']['id'].

Menampilkan Todo List Berdasarkan User Login

Selanjutnya tampilkan Todo berdasakan user yang login. Di file index.php di atas, tambahkan kode php berikut untuk menampilkan Todo.

        <form action="" method="POST">
            <ul>
                <?php
                $query = $pdo->prepare("select * from todo where id_user=:id_user");
                $query->execute(array('id_user' => $_SESSION['user']['id']));
                while($todo = $query->fetch()) {
                    echo '<li>';
                    $checked = '';
                    if ($todo['selesai'] == 1) {
                        $checked = 'checked';
                    }
                    echo '<input type="checkbox" value="'.$todo['id'].'" name="todo[]" '.$checked.'/>';
                    echo htmlentities($todo['judul']);
                    echo '</li>';
                }
                ?>
            </ul>
            <input type="submit" name="aksi" value="Update"/>
        </form>

Kembali sql query yang digunakan disaring berdasarkan user yang login select * from todo where id_user=:id_user, id user diambil lagi dari data $_SESSION['user']['id']. Kode di atas juga menampilkan checkbox untuk update status Todo. Attribute name yang digunakan dengan tanda kurung siku seperti name="todo[]" agar bisa update status sekaligus.

Update Status Todo List

Setelah berhasil menambahkan dan memampilkan Todo kita akan membuat kode untuk update status Todo. Kalau sudah selesai checkbox akan tercentang. Di kode di atas sudah kita tambahkan satu tombol <input type="submit" name="aksi" value="Update"/> dengan name="aksi" dan value="Update" untuk membedakan aksi user untuk update status Todo. Tambahkan kode php di bawah untuk update status Todo.

     if ($_POST['aksi'] == 'Update' && !empty($_POST['todo'])) {
        foreach($_POST['todo'] as $idTodo) {
            $query = $pdo->prepare("update todo set selesai=1 where id=:id and id_user=:id_user");
            $query->execute(array(
                'id' => $idTodo,
                'id_user' => $_SESSION['user']['id']
            ));
        }

        header("Location: index.php");
        exit;
    }

Perlu ditekankan lagi pada saat update data perlu diberikan saring berdasarkan id user juga seperti update todo set selesai=1 where id=:id and id_user=:id_user. Id user kembali di dapat dari data session $_SESSION['user']['id']. Hal ini perlu dilakukan agar user tidak bisa edit status Todo dari user lain. Jika digambungkan maka file index.php akan seperti di bawah:

<?php
include_once "cek-akses.php";
$pdo = include "koneksi.php";
if (!empty($_POST)) {
    if ($_POST['aksi'] == 'Tambah') {
        $query = $pdo->prepare("insert into todo (judul, selesai, id_user) values (:judul, 0, :id_user)");
        $query->execute(array(
            'judul' => $_POST['judul'],
            'id_user' => $_SESSION['user']['id']
        ));
        header("Location: index.php");
        exit;
    }

    if ($_POST['aksi'] == 'Update' && !empty($_POST['todo'])) {
        foreach($_POST['todo'] as $idTodo) {
            $query = $pdo->prepare("update todo set selesai=1 where id=:id and id_user=:id_user");
            $query->execute(array(
                'id' => $idTodo,
                'id_user' => $_SESSION['user']['id']
            ));
        }

        header("Location: index.php");
        exit;
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Todo List</title>
        <style>
           ul {
               list-style: none;
               margin-left: 0;
               padding-left: 0;
           }
        </style>
    </head>
    <body>
        <h3>Selamat Datang <?php echo htmlentities($_SESSION['user']['nama']);?></h3>
        <p>
        <a href="logout.php">Logout</a>
        </p>
        <h1>Todo List</h1>
        <form action="" method="POST">
            <input type="text" name="judul" placeholder="Judul" required/>
            <input type="submit" name="aksi" value="Tambah"/>
        </form>
        <form action="" method="POST">
            <ul>
                <?php
                $query = $pdo->prepare("select * from todo where id_user=:id_user");
                $query->execute(array('id_user' => $_SESSION['user']['id']));
                while($todo = $query->fetch()) {
                    echo '<li>';
                    $checked = '';
                    if ($todo['selesai'] == 1) {
                        $checked = 'checked';
                    }
                    echo '<input type="checkbox" value="'.$todo['id'].'" name="todo[]" '.$checked.'/>';
                    echo htmlentities($todo['judul']);
                    echo '</li>';
                }
                ?>
            </ul>
            <input type="submit" name="aksi" value="Update"/>
        </form>
    </body>
</html>

Kesimpulan

Pada tutorial php Menampilkan Data Berdasarkan User Yang Login ini telah dijelaskan cara untuk menampilkan data berdasarkan user yang login. Menghindari user mengedit dan hapus data dari user lain. Tidak bisa menambahkan data untuk user lain. Perlu ditekankan setiap sql query yang digunakan, baik itu select, update, insert, delete harus selalu ada kondisi where id_user=<user yang login>. Selamat mencoba jika ada pertanyaan silahkan gunakan kolom komentar di bawah.