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
Dalam tutorial ini kita akan menggunakan contoh Todo list. Berikut langkah langkahnya:
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.
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']
.
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.
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>
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.