Laporan 1

Laporan praktikum web pertemuan 6

LAPORAN PRAKTIKUM

#OOP PHP & MySQL – CRUD Sederhana

GitHub cllick

1. Tujuan

Tujuan praktikum ini : mahasiswa mampu mengimplementasikan konsep Object Oriented Programming pada PHP dengan membuat aplikasi CRUD Sederhana.

2. Konsep OOP

a. Destructor − refers to a special type of function which will be called automatically whenever an object is deleted or goes out of scope.

b. Class – a template for making many instances of the same kind (or class) of object.

c. Object − individual instance of the data structure defined by a class.

d. Member Variable − These are the variables defined inside a class. This data will be invisible to the outside of the class and can be accessed via member functions. These variables are called attribute of the object once an object is created.

4. Member Function − These are the function defined inside a class and are used to access object data.

e. Inheritance − When a class is defined by inheriting existing function of a parent class then it is called inheritance. Here child class will inherit all or few member functions and variables of a parent class.

f. Parent Class − A class that is inherited from by another class. This is also called a base class or super class.

g. Child Class − A class that inherits from another class. This is also called a subclass or derived class.

h. Polymorphism − Same function can be used for different purposes.

i. Overloading − a type of polymorphism in which some or all of operators have different implementations depending on the types of their arguments. Similarly functions can also be overloaded with different implementation.

j. Data Abstraction − Any representation of data in which the implementation details are hidden (abstracted).

k. Encapsulation − refers to a concept where we encapsulate all the data and member functions together to form an object.

l. Constructor − refers to a special type of function which will be called automatically whenever there is an object formation from a class.

Langkah- Langkah Pengerjaan

1. Buat folder baru didalam folder htdocs, kemudian buka menggunakan VS Code dan buat struktur file atau direktori seperti gambar berikut ini.

2. Koneksi ke database

a. Pertama-tama buat database baru dengan nama pemrograman_web, kemudian buat table mahasiswa sebagai berikut.

CREATE TABLE mahasiswa (
id int(11) NOT NULL,
nim varchar(16) NOT NULL,
nama varchar(128) NOT NULL,
jurusan varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

b. Selanjutnya membuat koneksi ke database, buka file config/Database.php dan ketikan kode program Berkut ini.

<?php
class Database {
    private $host = "localhost";
    private $db_name = "pemrograman_web";
    private $username = "root";
    private $password = "";
    public $conn;

    public function getConnection() {
        $this->conn = null;
        try {
            $this->conn = new mysqli($this->host, $this->username, $this->password, $this->db_name);
        } catch (Exception $e) {
            echo "Connection error: " . $e->getMessage();
        }
        return $this->conn;
    }
}
?>

c. File Config.php

File Config.php digunakan untuk membuat variable constant yang mana nantinya dapat diakases dari kelas manapun, pada praktikum ini akan membuat variable constant dengan nama BASE_URL yang berisi string base url dari project yang akan dibuat.

D. Alert.php

Alert.php digunakan untuk membuat sebuah function yang berfungsi untuk menampilkan pesan Ketika melakukan operasi terhadap data, fungsi ini memiliki 2 buah argument statement yaitu $msg yang berisi pesan dan $sts yang berisi kode jika status 1 maka pesan berhasil dan jika 0 maka pesan gagal. Berikut kode program fungsi alert.

<?php
function alert($msg, $sts) {
    if($sts == 1) {
        $tipe = 'success';
    } else {
        $tipe = 'danger';
    }

    echo '
        <div class="alert alert-'.$tipe.'" role="alert">'.$msg.'
        </div>
    ';
}

E. Model Mahasiswa

Class Mahasiswa digunakan untuk membuat fungsi operasi Create, Read, Update dan Delete data Mahasiswa, berikut ini Langkah-langkah pembuatan class Mahasiswa.

1. Tambahkan session_start() pada baris paling atas kode program

2. Buat class dengan nama Mahasiswa

3. Deklarasikan variabel yang dibutuhkan dan fungsi constructor yang memanggil koneksi database

<?php
session_start();
class Mahasiswa {
private $conn;
private $table_name = “mahasiswa”;

public $id;
public $nim;
public $nama;
public $jurusan;

public function __construct($db) {
$this->conn = $db;
}

4. Buat fungsi create yang nantinya digunakan untuk menambahkan data mahasiswa

    public function create() {
        $query = "INSERT INTO " . $this->table_name . " SET nim=?, nama=?, jurusan=?";
        $stmt = $this->conn->prepare($query);
        $stmt->bind_param("sss", $this->nim, $this->nama, $this->jurusan);
        if ($stmt->execute()) {
            $_SESSION['flash_message'] = "Data berhasil disimpan!";
            header("Location: " . BASE_URL . "index.php?msg=1");
        } else {
            $_SESSION['flash_message'] = "Data gagal disimpan!";
            header("Location: " . BASE_URL . "index.php?msg=0");
        }
    }

5. Buat fungsi read untuk menampilkan data mahasiswa, fungsi read memiliki default parameter $id yang berisi string kosong, jika $id == “” maka akan mengeksekusi query untuk menampilkan seluruh data mahasiswa, jika $id !== “” maka akan mengeksekusi query untuk menampilkan data mahasiswa berdasarkan id mahasiswa. Berikut kode program fungsi read.

  public function read($id="") {
        if ($id == "") {
            $query = "SELECT * FROM " . $this->table_name;
        } else {
            $query = "SELECT * FROM " . $this->table_name . " WHERE id= " . $id;
        }
        $result = $this->conn->query($query);
        return $result;
    }

6. Buat fungsi update untuk melakukan perubahan data mahasiswa berdasarkan ID mahasiswa

 public function update() {
        $query = "UPDATE " . $this->table_name . " SET nim=?, nama=?, jurusan=? WHERE id=?";
        $stmt = $this->conn->prepare($query);
        $stmt->bind_param("ssss", $this->nim, $this->nama, $this->jurusan, $this->id);
        if ($stmt->execute()) {
            $_SESSION['flash_message'] = "Data berhasil diupdate!";
            header("Location: " . BASE_URL . "index.php?msg=1");
        } else {
            $_SESSION['flash_message'] = "Data gagal diupdate!";
            header("Location: " . BASE_URL . "index.php?msg=0");
        }
    }

7. Buat fungsi delete untuk menghapus data mahasiswa berdasarkan ID

    public function delete() {
        $query = "DELETE FROM " . $this->table_name . " WHERE id=?";
        $stmt = $this->conn->prepare($query);
        $stmt->bind_param("s", $this->id);
        if ($stmt->execute()) {
            $_SESSION['flash_message'] = "Data berhasil dihapus!";
            header("Location: " . BASE_URL . "index.php?msg=1");
        } else {
            $_SESSION['flash_message'] = "Data gagal disimpan!";
            header("Location: " . BASE_URL . "index.php?msg=0");
        }
    }
}
?>
F. Fungsi Mahasiswa

Fungsi mahasiswa ini berfungsi sebagai controller yang menghubungkan antara class/model mahasiswa dengan view, buka file function/Mahasiswa.php, kemudian tambahkan kode program berikut

<?php
include_once '../config/Database.php';
include '../config/Config.php';
include_once '../model/Mahasiswa.php';

$database = new Database();
$db = $database->getConnection();
$mahasiswa = new Mahasiswa($db);

if (isset($_GET['action'])) {
    if ($_GET['action'] == 'create') {
        $mahasiswa->nim = $_POST['nim'];
        $mahasiswa->nama = $_POST['nama'];
        $mahasiswa->jurusan = $_POST['jurusan'];
        $mahasiswa->create();
    } elseif ($_GET['action'] == 'delete') {
        $mahasiswa->id = $_GET['id'];
        $mahasiswa->delete();
    } elseif ($_GET['action'] == 'update') {
        $mahasiswa->id = $_POST['id'];
        $mahasiswa->nim = $_POST['nim'];
        $mahasiswa->nama = $_POST['nama'];
        $mahasiswa->jurusan = $_POST['jurusan'];
        $mahasiswa->update();
    }
}
?>

Pertama akan dilakukan pengecekan sebuah parameter action yang dikirimkan melalui method GET, jika ada terdapat parameter action yang dikirimkan maka nilai parameter akan diambil dan digunakan sesuai dengan fungsinya, ada 3 buah isi parameter yang dikirimkan yaitu create, delete dan update.

G. View

View ini berfungsi untuk menampilkan data, menampilkan form input dan update data mahasiswa.

index.php

File Index.php ini berisi tampilan data-data mahasiswa yang telah berhasil diinputkan kedalam database, berikut ini kode program Index.php

<?php
include 'function/Alert.php'; 
include_once './config/Database.php'; 
include_once './model/Mahasiswa.php';

$database = new Database();
$db = $database->getConnection();
$mahasiswa = new Mahasiswa($db);
$result = $mahasiswa->read();
?>

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>OOP - CRUD</title>
        <link href="assets/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col-lg-12">
                    <h4 class="text-center">Data Mahasiswa</h4>
                    <a class="btn btn-primary btn-sm mb-2" href="create.php">Tambah Mahasiswa</a>
                    <!-- show alert -->
                    <?php
                        if (isset($_SESSION['flash_message']) && isset($_GET['msg'])) { 
                            if ($_GET['msg'] == '1') {
                                alert($_SESSION['flash_message'], 1);
                            }else{
                                alert($_SESSION['flash_message'], 0);
                            }
                        }
                    ?>
                    <table class="table table-stripped table-bordered">
                        <thead>
                            <tr>
                                <th>#</th>
                                <th>NIM</th>
                                <th>NAMA</th>
                                <th>JURUSAN</th>
                                <th>ACTION</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php $no=1; while ($row = $result->fetch_assoc()) { ?>
                                <tr>
                                    <td><?=$no++?></td>
                                    <td><?=$row['nim']?></td>
                                    <td><?=$row['nama']?></td>
                                    <td><?=$row['jurusan']?></td>
                                    <td>
                                        <a class="btn btn-success btn-sm" href="edit.php?id=<?=$row['id']?>">Edit</a>
                                        <a class="btn btn-danger btn-sm" href="function/Mahasiswa.php?action=delete&&id=<?=$row ['id']?>" onclick="return confirm('Anda yakin ingin menghapus Data <?php echo $row['nama'];?>?');">Hapus</a>
                                    </td>
                                </tr>
                            <?php } ?>
                        </tbody>

                    </table>

                </div>
            </div>
        </div>
        <script src="assets/js/bootstrap.bundle.min.js"></script>
    </body>
</html>

Create.php

File ini berisi form input data mahasiswa

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>OOP - Create</title>
        <link href="assets/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <div class="row">
                <h1>Create Mahasiswa</h1>
                <form action="function/Mahasiswa.php?action=create" method="post">
                    <div class="form-group">
                        <label for="nim">NIM</label>
                        <input type="text" class="form-control" name="nim" required>
                    </div>
                    <div class="form-group">
                        <label for="nama">Nama</label>
                        <input type="text" class="form-control" name="nama" required>
                    </div>
                    <div class="form-group">
                        <label for="jurusan">Jurusan</label>
                        <input type="text" class="form-control" name="jurusan" required>
                    </div>
                        <button type="submit" class="btn btn-primary mt-2">Create</button>
                </form>
            </div>
        </div>
        <script src="assets/js/bootstrap.bundle.min.js"></script>
    </body>
</html>

Edit.php

File ini berisi form untuk melakukan perubahan data mahasiswa

<?php
include_once './config/Database.php'; 
include_once './model/Mahasiswa.php';

$database = new Database();
$db = $database->getConnection();

$mahasiswa = new Mahasiswa($db);

if (isset($_GET['id'])) {
$result = $mahasiswa->read($_GET['id'])->fetch_assoc();
}
?>
<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>OOP - Edit</title>
        <link href="assets/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">
            <div class="row">
                <h1>Edit Mahasiswa</h1>
                <form action="function/Mahasiswa.php?action=update" method="post">
                    <div class="form-group">
                        <label for="nim">NIM</label>
                        <input type="hidden" class="form-control" name="id" value="<?=$result['id'];?>" required>
                        <input type="text" class="form-control" name="nim" value="<?=$result['nim'];?>" required>
                    </div>
                    <div class="form-group">
                        <label for="nama">Nama</label>
                        <input type="text" class="form-control" name="nama" value="<?=$result['nama'];?>" required>
                    </div>
                    <div class="form-group">
                        <label for="jurusan">Jurusan</label>
                        <input type="text" class="form-control" name="jurusan" value="<?=$result['jurusan'];?>" required>
                    </div>
                    <button type="submit" class="btn btn-primary mt- 2">Update</button>
                </form>
            </div>
        </div>
        <script src="assets/js/bootstrap.bundle.min.js" integrity="sha384-k6d4wzSIapyDyv1kpU366/PK5hCdSbCRGRCMv+eplOQJWyd1fbcAu9OCUj5zNLiq" crossorigin="anonymous"></script>
    </body>
</html>

H. Efisiensi Kode

Program CRUD dapat diefisiensi dengan menggabungkan halaman create.php dan edit.php menjadi satu, dengan nama form.php. logika if else digunakan pada form.php, Jadi ketika query yang diminta adalah create maka form.php akan menampilkan kondisi yang sesuai untuk create data, dan sebaliknya. Setelah itu, di index.php ubah bagian-bagian yang mereferensi ke create.php dan edit.php menjadi mereferensi ke form.php. Jika sudah berhasil, file create.php dan edit.php bisa dihapus.

buat form.php dengan isi kode berikut:

<?php
include_once './config/Database.php';
include_once './model/Mahasiswa.php';

$database = new Database();
$db = $database->getConnection();
$mahasiswa = new Mahasiswa($db);

$isEdit = false;
$data = [
    'id' => '',
    'nim' => '',
    'nama' => '',
    'jurusan' => ''
];

if (isset($_GET['id'])) {
    $result = $mahasiswa->read($_GET['id'])->fetch_assoc();
    if ($result) {
        $isEdit = true;
        $data = $result;
    }
}

$formAction = $isEdit ? 'function/Mahasiswa.php?action=update' : 'function/Mahasiswa.php?action=create';
$formTitle = $isEdit ? 'Edit Mahasiswa' : 'Create Mahasiswa';
$submitText = $isEdit ? 'Update' : 'Create';
?>

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?= $formTitle ?></title>
    <link href="assets/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <div class="row">
        <h1><?= $formTitle ?></h1>
        <form action="<?= $formAction ?>" method="post">
            <?php if ($isEdit): ?>
                <input type="hidden" name="id" value="<?= $data['id'] ?>">
            <?php endif; ?>
            <div class="form-group">
                <label for="nim">NIM</label>
                <input type="text" class="form-control" name="nim" value="<?= $data['nim'] ?>" required>
            </div>
            <div class="form-group">
                <label for="nama">Nama</label>
                <input type="text" class="form-control" name="nama" value="<?= $data['nama'] ?>" required>
            </div>
            <div class="form-group">
                <label for="jurusan">Jurusan</label>
                <input type="text" class="form-control" name="jurusan" value="<?= $data['jurusan'] ?>" required>
            </div>
            <button type="submit" class="btn btn-primary mt-2"><?= $submitText ?></button>
        </form>
    </div>
</div>
<script src="assets/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Comments

Leave a Reply

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