Cara Membuat Log Aktivitas di Aplikasi Web Menggunakan PHP
Cara Membuat Log Aktivitas di Aplikasi Web Menggunakan PHP – Dalam tutorial ini, kita akan mengeksplorasi pembuatan fitur log aktivitas dalam aplikasi web menggunakan bahasa PHP. Tujuannya adalah untuk menawarkan referensi atau panduan kepada siswa dan mereka yang baru mengenal bahasa PHP untuk meningkatkan pengetahuan dan kemampuan mereka dalam mengembangkan aplikasi web yang efisien dan efektif.
Saya akan menjelaskan proses langkah demi langkah untuk membuat Kelas PHP yang dapat digunakan kembali yang mengimplementasikan fitur Log Aktivitas ke dalam proyek PHP. Selain itu, saya akan menyediakan file zip kode sumber lengkap untuk aplikasi web contoh yang menunjukkan penggunaan Kelas PHP yang disebutkan.
Apa manfaat menerapkan Log Aktivitas dalam Aplikasi Web?
Menerapkan Log Aktivitas dalam aplikasi web memberikan keuntungan khusus untuk sifat dinamis dari platform online. Pertimbangan yang cermat terhadap informasi yang akan dicatat sangat penting, menyeimbangkan kebutuhan untuk catatan yang terperinci dengan kekhawatiran tentang privasi data dan kinerja. Ketika diterapkan secara efektif, log aktivitas dapat secara signifikan berkontribusi pada keamanan, kinerja, dan kegunaan aplikasi web.
Bagaimana cara membuat Kelas Logger Aktivitas yang dapat digunakan kembali dalam PHP?
Berikut adalah langkah-langkah untuk membuat Kelas Logger Aktivitas dalam PHP:
Langkah 1: Membuat Kelas
Dengan asumsi bahwa kita telah membuat file PHP baru bernama activity-log.class.php
, buka file tersebut di editor kode pilihan Anda, seperti Sublime Text, MS VS Code, atau Notepad++. Kemudian, strukturkan kelas PHP sebagai berikut:
<?php class ActivityLog{ } ?>
Langkah 2: Membuat Koneksi Basis Data
Selanjutnya, kita perlu membuat metode atau fungsi kelas yang memungkinkan kita untuk terhubung ke Basis Data. Kita dapat mencapai ini dengan menambahkan koneksi basis data dalam fungsi __construct
dari kelas dan menutupnya dalam fungsi __destruct
. Untuk melakukan ini, lihat cuplikan berikut:
<?php class ActivityLog{ // DB Connection object private $db; function __construct($dbhost="", $dbuser = "", $dbpassword = "", $dbname = "", $db_prefix =""){ // Check if DB credentials is empty if(empty($dbhost) || empty($dbuser) || empty($dbname)){ throw new ErrorException("Database Credentials cannot be empty!"); exit; } // Connect to the database try{ $this->db = new MySQLi($dbhost, $dbuser, $dbpassword, $dbname); }catch(Exception $e){ throw new ErrorException($e->getMessage()); exit; } } function __destruct() { if($this->db){ $this->db->close(); } } } ?>
Langkah 3: Membuat Tabel Log di Basis Data
Selanjutnya, mari kita buat fungsi yang memeriksa apakah Tabel Log Aktivitas sudah dibuat; jika tidak, fungsi tersebut akan membuat tabel basis data baru untuk ini. Lihat cuplikan berikut:
<?php class ActivityLog{ // DB Connection private $db; // Log Table Name private $dbTbl = "site_activity_log_automation_tbl"; // DB Prefix private $db_prefix; function __construct($dbhost="", $dbuser = "", $dbpassword = "", $dbname = "", $db_prefix =""){ // Check if DB credentials is empty if(empty($dbhost) || empty($dbuser) || empty($dbname)){ throw new ErrorException("Database Credentials cannot be empty!"); exit; } // Connect to the database try{ $this->db = new MySQLi($dbhost, $dbuser, $dbpassword, $dbname); }catch(Exception $e){ throw new ErrorException($e->getMessage()); exit; } // SEt DB Prefix to log db table $this->db_prefix = $db_prefix; if(!empty($this->db_prefix)){ $this->db_prefix .= "_"; } $this->dbTbl = $this->db_prefix . $this->dbTbl; // Check if Log Table already exists, otherwise, create table try{ $tbl_described = $this->db->query("DESCRIBE `{$this->db_prefix}`"); }catch(Exception $e){ $this->create_tbl(); } } /** * Log Table Creation */ function create_tbl(){ $sql = "CREATE TABLE IF NOT EXISTS `{$this->dbTbl}` ( `id` bigint(30) PRIMARY KEY AUTO_INCREMENT, `user_id` bigint(30) NOT NULL, `ip` varchar(25) NOT NULL, `url` text NOT NULL, `action` text NOT NULL, `created_at` datetime NOT NULL DEFAULT current_timestamp() )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci "; try{ $table_create = $this->db->query($sql); }catch(Exception $e){ throw new ErrorException($e->getMessage()); exit; } } function __destruct() { if($this->db){ $this->db->close(); } } } ?>
Cuplikan di atas menunjukkan pembuatan Tabel Log Aktivitas jika tabel tersebut belum ada dan saat kelas dipanggil.
Langkah 4: Membuat Fungsi Log
Selanjutnya, mari kita buat fungsi yang memasukkan data log ke dalam basis data. Untuk melakukan itu, kita dapat menulisnya sebagai berikut:
<?php /** * Sanitize values * @param mixed any */ function sanitize_value($value){ if(!is_numeric($value) && empty($value)){ if( is_object($value) && is_array($value) ){ $value = json_encode($value); }else{ $value = addslashes(htmlspecialchars($value)); } } return $value; } /** * Insert Activity Log * @param array [user_id, ip, url, action] * */ public function log( $data = [] ){ if(empty($data)){ throw new ErrorException("Log data are required!"); exit; } $params_values = []; $params_format = []; $query_values = []; foreach($data as $k => $v){ $v = $this->sanitize_value($v); if(!empty($v)){ if(is_numeric($v)){ $fmt = "d"; }else{ $fmt = "s"; } $query_values[] = "`{$k}`"; $params_values[] = $v; $params_format[] = $fmt; } } if(empty($query_values)){ throw new ErrorException("All Log data provided are empty or invalid!"); exit; } $sql = "INSERT INTO `{$this->dbTbl}` (".implode(",", $query_values).") VALUES (".( implode( ",", str_split( str_repeat( "?", count( $query_values ) ) ) ) ).")"; $stmt = $this->db->prepare($sql); $fmts = implode("", $params_format); $stmt->bind_param($fmts, ...$params_values); $executed = $stmt->execute(); if($executed){ $resp = [ "status" => "success" ]; }else{ $resp = [ "status" => "error", "sql" => $sql, "queries" => $query_values, "formats" => $fmts, "values" => $params_values, ]; } return $resp; } ?>
Berikut adalah skrip lengkap dari kelas Log Aktivitas yang dapat digunakan kembali dalam PHP. Saya juga menyertakan fungsi yang mengambil semua log aktivitas dari basis data.
<?php /** * Class Required Parameters * @param str DB Host Name * @param str DB User Name * @param str DB Password * @param str DB Name * @param str DB Prefix */ class ActivityLog{ // DB Connection private $db; // Log Table Name private $dbTbl = "site_activity_log_automation_tbl"; // DB Prefix private $db_prefix; function __construct($dbhost="", $dbuser = "", $dbpassword = "", $dbname = "", $db_prefix =""){ // Check if DB credentials is empty if(empty($dbhost) || empty($dbuser) || empty($dbname)){ throw new ErrorException("Database Credentials cannot be empty!"); exit; } // Connect to the database try{ $this->db = new MySQLi($dbhost, $dbuser, $dbpassword, $dbname); }catch(Exception $e){ throw new ErrorException($e->getMessage()); exit; } // SEt DB Prefix to log db table $this->db_prefix = $db_prefix; if(!empty($this->db_prefix)){ $this->db_prefix .= "_"; } $this->dbTbl = $this->db_prefix . $this->dbTbl; // Check if Log Table already exists, otherwise, create table try{ $tbl_described = $this->db->query("DESCRIBE `{$this->db_prefix}`"); }catch(Exception $e){ $this->create_tbl(); } } /** * Log Table Creation */ function create_tbl(){ $sql = "CREATE TABLE IF NOT EXISTS `{$this->dbTbl}` ( `id` bigint(30) PRIMARY KEY AUTO_INCREMENT, `user_id` bigint(30) NOT NULL, `ip` varchar(25) NOT NULL, `url` text NOT NULL, `action` text NOT NULL, `created_at` datetime NOT NULL DEFAULT current_timestamp() )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci "; try{ $table_create = $this->db->query($sql); }catch(Exception $e){ throw new ErrorException($e->getMessage()); exit; } } /** * Sanitize values * @param mixed any */ function sanitize_value($value){ if(!is_numeric($value) && empty($value)){ if( is_object($value) && is_array($value) ){ $value = json_encode($value); }else{ $value = addslashes(htmlspecialchars($value)); } } return $value; } /** * Insert Activity Log * @param array [user_id, ip, url, action] * */ public function log( $data = [] ){ if(empty($data)){ throw new ErrorException("Log data are required!"); exit; } $params_values = []; $params_format = []; $query_values = []; foreach($data as $k => $v){ $v = $this->sanitize_value($v); if(!empty($v)){ if(is_numeric($v)){ $fmt = "d"; }else{ $fmt = "s"; } $query_values[] = "`{$k}`"; $params_values[] = $v; $params_format[] = $fmt; } } if(empty($query_values)){ throw new ErrorException("All Log data provided are empty or invalid!"); exit; } $sql = "INSERT INTO `{$this->dbTbl}` (".implode(",", $query_values).") VALUES (".( implode( ",", str_split( str_repeat( "?", count( $query_values ) ) ) ) ).")"; $stmt = $this->db->prepare($sql); $fmts = implode("", $params_format); $stmt->bind_param($fmts, ...$params_values); $executed = $stmt->execute(); if($executed){ $resp = [ "status" => "success" ]; }else{ $resp = [ "status" => "error", "sql" => $sql, "queries" => $query_values, "formats" => $fmts, "values" => $params_values, ]; } return $resp; } /** * Log Data * @param $user_id mixed|int User ID * @param $action str Action Data */ public function setAction($user_id= "", $action = ""){ $data = []; extract($_SERVER); $data['ip'] = $REMOTE_ADDR; $data['url'] = (empty($HTTPS) ? 'http' : 'https') . "://{$HTTP_HOST}{$REQUEST_URI}"; $data["user_id"] = $user_id; $data["action"] = addslashes(htmlspecialchars($action)); return $this->log($data); } /** * Get All Logs */ public function getLogs(){ $query = $this->db->query("SELECT * FROM `{$this->dbTbl}` order by `id` desc"); $result = $query->fetch_all(MYSQLI_ASSOC); return $result; } function __destruct() { if($this->db){ $this->db->close(); } } } ?>
Dengan menggunakan Kelas PHP yang disediakan di atas, kita sekarang dapat mencatat tindakan atau aktivitas apa pun dari pengguna di situs web dengan cukup mengimplementasikan skrip seperti berikut:
<?php $dbData = [ "localhost", // Hostname "root", // Username "", // Password "dummy_db" // DBName ]; $activityLog = new ActivityLog(...$dbData); $activityLog->setAction($_SESSION['user_id'], "accessed the home page"); ?>
Untuk mendapatkan pemahaman yang lebih baik tentang penggunaan Kelas Logger Aktivitas PHP yang disediakan di atas, saya telah mengembangkan aplikasi web sederhana dengan fungsionalitas CRUD (Create, Read, Update, dan Delete).
Dalam aplikasi web ini, aktivitas pengguna dicatat dalam basis data, seperti login yang berhasil, menambahkan data baru, memperbarui data, dan menghapus data. File zip kode sumber lengkap dari aplikasi web yang saya buat tersedia dan dapat diunduh secara gratis di situs web ini. Tombol unduh terletak di bawah konten tutorial ini.
Berikut Beberapa Screenshot Aplikasi ini :
Dan itulah semuanya! Saya percaya Tutorial Pembuatan Kelas Logger Aktivitas PHP ini akan bermanfaat bagi kebutuhan Anda dan memberikan nilai tambah untuk proyek PHP Anda saat ini dan di masa depan. Jelajahi lebih dalam situs web ini untuk Tutorial tambahan, Kode Sumber Gratis, dan Artikel yang mencakup berbagai bahasa pemrograman.
Terimakasih telah membaca artikel Cara Membuat Log Aktivitas di Aplikasi Web Menggunakan PHP. Semoga bermanfaat! Jika membutuhkan jasa pembuatan website bisa hubungi di WA 087823179122 atau klik tombol WA di bawah website.