Akademi Manajemen Informatika

Halo, selamat datang di Sandi Dharma Blog. Kali ini kita akan belajar bagaimana Langkah mengkoneksikan database MySQL ke aplikasi PHP kita, dan melakukan operasi baca tulis ke dalam database yang kita miliki melalui aplikasi kita.

Eksis beberapa Langkah yang dapat kita gunakan Demi terhubung ke database menggunakan php. Yang paling Lumrah Adalah menggunakan library MySQLi, dan PDO. Lampau apa perbedaan antara keduanya?. Library MySQLi hanya dapat kita gunakan Demi koneksi ke dalam database mysql, sedangkan library PDO dapat kita gunakan Demi koneksi ke berbagai jenis database.

Misalnya koneksi database menggunakan MySQLi (procedural)

php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
} else {
    echo "Connected successfully";
}

Misalnya koneksi database menggunakan PDO

php
$servername = "localhost";
$username = "username";
$password = "password";

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Pertanyaanya, apa yang harus kita gunakan ? MySQLi atau PDO?

Jawaban singkatnya adalah apa saja yang Ingin kita gunakan. Keduanya sama-sama Mempunyai kelebihan. Koneksi dengan PDO dapat digunakan pada 12 jenis database yang berbeda, sedangkan MySQLi hanya Pandai digunakan Demi koneksi ke dalam database SQL.

jadi Apabila kita Ingin berganti database pada projek yang dibuat, koneksi dengan PDO membuatnya menjadi lebih mudah. Kita hanya akan diharuskan Demi merubah connection string dan beberapa query. Tetapi dengan MySQLi, kita harus menulis ulang seluruh kode termasuk query-nya.

PDO dan MySQLi mendukung pemrograman berorientasi objek, tetapi MySQLi juga dapat digunakan secara procedural. Keduanya juga telah mendukung prepared statement. Ini berfungsi Demi melindungi aplikasi dari upaya SQL Injection, dan sangat Krusial dalam keamanan aplikasi website.

Coding!

Agar lebih mudah memahaminya, kita akan praktekan langsung pada komputer kita.

Membikin Database

Kita akan menggunakan Sokongan phpmyadmin yang Eksis pada xampp Demi Membikin database mysql kita. (saya anggap xampp telah terinstall di komputer Engkau). Aktifkan apache dan mysql server melalui xampp control panel.

CRUD PHP MySQL

pergi ke phpmyadmin di browser Engkau, kemudian buat database baru dengan nama codelabs_crud, setelah itu buat tabel users dengan struktur sebagai berikut:

CRUD PHP MySQL

Engkau dapat menggunakan sql yang Eksis di Rendah ini atau membuatnya secara manual melalui interface yang diberikan oleh phpmyadmin

CREATE TABLE `codelabs_crud`.`users` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(128) NOT NULL , `email` VARCHAR(128) NOT NULL , `password` VARCHAR(128) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

Folder dan file project

Setelah Membikin database silahkan buat folder dengan nama simple_crud di dalam folder htdocs Punya xampp kemudian buat beberapa file dan folder di dalamnya dengan struktur seperti ini:

biarkan filenya Hampa Demi Demi ini

CRUD PHP MySQL

Koneksi database

Setelah struktur folder dibuat langkah selanjutnya kita akan mengkoneksikan projek kita dengan database yang tadi sudah kita buat.

Demi koneksi di ini kita akan menggunakan library PDO terlebih dahulu saja

Buka file database_connection.php yang Eksis di config/database_connection.php

Kemudian tuliskan kode seperti di Rendah ini:

php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "codelabs_crud";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

Setelah itu kita coba jalankan dengan Langkah pergi ke link project yang kita buat

http://localhost/codelabs/simple_crud/config/database_connection.php

(Note: sesuaikan link dengan Letak folder project yang Engkau miliki)

Apabila koneksi berhasil akan muncul seperti ini:

CRUD PHP MySQL

Tetapi, Apabila terdapat kesalahan dan koneksi database gagal akan muncul seperti ini:

CRUD PHP MySQL

Perhatikan pesan errornya

READ  Material Requirement Rencana: Definisi, Teladan & Tahapannya

Unknown database ‘codelabs_cruds’ berarti program kita Enggak Pandai menemukan database dengan nama codelabs_cruds karena nama database yang kita miliki adalah ‘codelabs_crud’ (tanpa huruf “s” di akhir)

ini hanya sebagai Misalnya saja, pesan error yang Engkau dapatkan mungkin saja berbeda dan itu berarti error yang berbeda pula, perbanyaklah berlatih Demi membaca dan memahami pesan error.

Membikin data user

Setelah berhasil mengkoneksikan database, kali ini kita akan mencoba Demi melakukan operasi baca tulis data ke dalam database yang kita miliki. Pertama kita akan Membikin fitur tambah data. Tapi sebelum itu, buka kembali file config/database_connection.php, kemudian ganti baris kode yang Eksis dibawah ini:

echo "Connected successfully";

Menjadi seperti ini

sehingga keseluruhan kode di dalam file config/database_connection.php menjadi seperti ini:

php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "codelabs_cruds";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db = $conn;
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

kita akan Membikin tampilan form sederhana Demi menginputkan data user. agar lebih mudah kita akan gunakan css framework Bootstrap. Dokumentasi tentang bootstrap dapat Engkau temukan di  sini.

Apabila Engkau bingung ikuti saya terlebih dahulu saja.

buka file create_user.php, kemudian masukkan baris html seperti ini:

html lang="en">
  head>
    meta charset="utf-8" />
    meta name="viewport" content="width=device-width, initial-scale=1" />
    link
      href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl"
      crossorigin="anonymous"
    />

    title>Codelabs | Simple CRUDtitle>
  head>

  body>
    nav class="navbar navbar-expand-lg navbar-dark bg-success">
      div class="container">
        a class="navbar-brand" href="./index.php">Simple CRUDa>
        button
          class="navbar-toggler"
          type="button"
          data-bs-toggle="collapse"
          data-bs-Sasaran="#navbarNavAltMarkup"
          aria-controls="navbarNavAltMarkup"
          aria-expanded="false"
          aria-label="Toggle navigation"
        >
          span class="navbar-toggler-icon">span>
        button>
        div class="collapse navbar-collapse" id="navbarNavAltMarkup">
          div class="navbar-nav">
            a class="nav-link" href="./index.php">List Usera>
            a class="nav-link" href="./create_user.php">Create Usera>
          div>
        div>
      div>
    nav>
    div class="container py-5">
      h2>Tambah Data Userh2>
      form class="mt-4" method="POST">
        div class="mb-3">
          label for="name" class="form-label">Namalabel>
          input name="name" type="text" class="form-control" id="name" />
        div>
        div class="mb-3">
          label for="email" class="form-label">Emaillabel>
          input name="email" type="email" class="form-control" id="email" />
        div>
        div class="mb-3">
          label for="password" class="form-label">Passwordlabel>
          input
            name="password"
            type="password"
            class="form-control"
            id="password"
          />
        div>
        button type="submit" class="btn btn-success">Simpanbutton>
      form>
    div>
    script
      src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0"
      crossorigin="anonymous"
    >script>
  body>
html>

Cek hasilnya di browser dengan pergi ke link

http://localhost/codelabs/simple_crud/create_user.php

(Note: sesuaikan link dengan Letak folder project yang Engkau miliki)

Hasilnya akan menjadi seperti ini

CRUD PHP MySQL

Sip, tampilan aplikasi sederhana kita sudah berhasil dibuat. Tetapi, Eksis beberapa hal yang harus diperbaiki. Apabila Engkau perhatikan kembali struktur project yang kita buat, kita Mempunyai beberapa file seperti delete_user.php, index.php, dan update_user.php. Seluruh file tersebut nantinya akan Mempunyai struktur html yang sama seperti file create_user.php, khususnya pada bagian head (kepala) dan foot (kaki). Agar kita Enggak harus menuliskan kode yang sama pada setiap file kita akan Membikin template Demi aplikasi kita.

READ  Pengertian, Fungsi, 5 Jenis, dan Langkah Instal

Pertama, buka kembali file create_user.php, kemudian potong (cut) kode html mulai dari tag penutup hingga baris paling atas dan tempel (paste) ke dalam file template/head.php sehingga file template/head.php akan menjadi seperti ini:

html lang="en">
  head>
    meta charset="utf-8" />
    meta name="viewport" content="width=device-width, initial-scale=1" />
    link
      href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl"
      crossorigin="anonymous"
    />

    title>Codelabs | Simple CRUDtitle>
  head>

  body>
    nav class="navbar navbar-expand-lg navbar-dark bg-success">
      div class="container">
        a class="navbar-brand" href="./index.php">Simple CRUDa>
        button
          class="navbar-toggler"
          type="button"
          data-bs-toggle="collapse"
          data-bs-Sasaran="#navbarNavAltMarkup"
          aria-controls="navbarNavAltMarkup"
          aria-expanded="false"
          aria-label="Toggle navigation"
        >
          span class="navbar-toggler-icon">span>
        button>
        div class="collapse navbar-collapse" id="navbarNavAltMarkup">
          div class="navbar-nav">
            a class="nav-link" href="./index.php">List Usera>
            a class="nav-link" href="./create_user.php">Create Usera>
          div>
        div>
      div>
    nav>
  body>
html>

Setelah itu, buka kembali file create_user.php dan potong kode html mulai dari tag pembuka "; echo ""; } else { // gagal echo ""; echo ""; } } else { $errors['email'] = "Email " . $email . " sudah digunakan"; } }

Pada kode ini kita periksa terlebih dahulu apakah Eksis error yang terjadi, Apabila Enggak, kita periksa kembali Demi duplikasi email menggunakan fungsi isEmailAvailable($db, $email);. Apabila email tersedia, kita akan menyimpan datanya. Pertama kita lakukan password hashing Demi mengamankan password, kemudian kita buat perintah sql Demi menyimpan data, Lampau mengeksekusi sql tersebut. Sebuah alert akan dijakankan Demi mengetahui apakah data berhasil disimpan atau Enggak. Setelah proses ini selesai maka halaman akan dialihkan ke link index.php (halaman Demi menampilkan data user, kita belum membuatnya Demi Demi ini).

Catatan: Password hashing adalah proses merubah password menjadi Kepribadian acak dengan jumlah dan algoritma tertentu. Password yang telah dirubah tersebut Enggak dapat dikembalikan ke bentuk semula Tengah, dan hanya Pandai dikomparasikan (comparing) menggunakan algoritma yang sesuai Demi memeriksa apakah password yang dimasukkan Demi login adalah password yang Cocok.

Bagus, sejauh ini keseluruhan dari file create_user.php akan terlihat seperti ini:

php
include('./template/head.php');
include('./config/database_connection.php');

function isEmailAvailable($db, $email){
    $sql = "SELECT email FROM users WHERE email='$email'";
    return $db->query($sql)->fetchAll() == null;
}

$errors = []; // varioabel yang akan digunakan Demi menampung pesan error validasi

if (!empty($_POST)) {

    // ambil data yang dikirimkan melalui form dan simpan ke dalam variabel
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // lakukan validasi Demi tiap inputan, Apabila inputan Hampa maka tambahkan pesan error kedalam variabel $errors
    if ($name == "") {
        $errors['name'] = "Nama Enggak boleh Hampa";
    }
    if ($email == "") {
        $errors['email'] = "Email Enggak boleh Hampa";
    }
    if ($password == "") {
        $errors['password'] = "Password Enggak boleh Hampa";
    }

    // cek Apabila Enggak Eksis error maka lakukan proses penyimpanan data
    if (!$errors) {
        // cek duplikasi data
        if (isEmailAvailable($db, $email)) {
            // hash password Demi keamanan
            $password = password_hash($password, PASSWORD_DEFAULT);
            // buat sql
            $sql = "INSERT INTO users (name, email, password) VALUES ('$name', '$email', '$password')";
            // simpan data
            if ($db->exec($sql)) {
                // berhasil
                echo "";
                echo "";
            } else {
                // gagal
                echo "";
                echo "";
            }
        } else {
            $errors['email'] = "Email " . $email . " sudah digunakan";
        }
    }
}
?>



include('./template/foot.php');
?>

Kita sudah selesai Membikin fitur Demi Membikin data user, saatnya kita uji coba.

pergi ke link

http://localhost/codelabs/simple_crud/create_user.php

(Note: sesuaikan link dengan Letak folder project yang Engkau miliki)

Pertama kita cek validasi. Jangan inputkan apapun ke dalam form, kemudian tekan tombol simpan, maka hasilnya akan seperti ini:

CRUD PHP MySQL

kemudian kita coba untu menginputkan data dan menekan tombol simpan Tengah, Apabila Enggak Eksis error akan muncul alert yang menujukkan apakah data berhasil disimpan atau Enggak, seperti ini:

CRUD PHP MySQL

Klik OK, maka kita akan dialihkan ke halaman index.php, Demi Demi ini halaman index kita Lagi Hampa, Tetapi kita telah berhasil Membikin fitur tambah data. Periksa tabel users di phpmyadmin

CRUD PHP MySQL

Silahkan lakukan beberapa pengujian seperti memasukkan email yang sama, atau yang lainnya. Pahami kembali alur kerjanya secara sederhana.

Menampilkan data users

Setelah berhasil Membikin data user, kita akan menampilkan data user yang Eksis di database ke dalam aplikasi kita.

Buka file index.php, Lampau tambahkan kode dibawah ini:

(jangan lupa menutup kode php kita dengan ?> karena nantinya akan digabung dengan kode html)

php
include('./template/head.php');
include('./config/database_connection.php');

function getAllUser($db)
{
    $sql = "SELECT * FROM users";
    return $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}

?>

Pada kode di atas, kita kembali menyematkan file head.php dari folder template, dan file database_connection.php dari folder konfig yang akan kita gunakan Demi terhubung ke database kita. Kita juga Membikin fungsi getAllUser($db) dengan parameter $db yang nantinya akan kita dapatkan dari folder database_connection.php. Fungsi ini akan mengembalikan data user yang Eksis di dalam database.

Lagi di dalam file index.php, pergi ke baris paling Rendah dan tambahkan kode berikut ini:

div class="container py-4">
  div class="table-responsive">
    table class="table table-striped">
      thead>
        tr>
          th>IDth>
          th>Namath>
          th>Emailth>
          th>Passwordth>
          th>Kelolath>
        tr>
      thead>
      tbody>
        
        
        tr>
          td>= $user['id'] ?>td>
          td>= $user['name'] ?>td>
          td>= $user['email'] ?>td>
          td>= $user['password'] ?>td>
          td>
            a
              href="./update_user.php?id== $user['id'] ?>"
              class="btn btn-sm btn-success"
              >Updatea
            >
            a
              href="./delete_user.php?id== $user['id'] ?>"
              class="btn btn-sm btn-danger"
              >Deletea
            >
          td>
        tr>
        
        
        tr>
          td colspan="5" class="text-center">Enggak Eksis datatd>
        tr>
        
      tbody>
    table>
  div>
div>

Kode diatas kita adalah html yang kita gunakan Demi membentuk sebuah tabel yang menampung data user dari dalam database.

Pehatikan bagian kode ini:



tr>
  td>= $user['id'] ?>td>
  td>= $user['name'] ?>td>
  td>= $user['email'] ?>td>
  td>= $user['password'] ?>td>
  td>
    a
      href="./update_user.php?id== $user['id'] ?>"
      class="btn btn-sm btn-success"
      >Updatea
    >
    a
      href="./delete_user.php?id== $user['id'] ?>"
      class="btn btn-sm btn-danger"
      >Deletea
    >
  td>
tr>


tr>
  td colspan="5" class="text-center">Enggak Eksis datatd>
tr>

Di bagian tersebut kita memeriksa apakah Eksis data user di dalam database dengan Langkah memanggil fungsi getAllUser(). Apabila Eksis data user maka akan dijalankan perulangan data menggunakan foreach Demi mencetak baris tabel Lampau menampilkan data user pada kolom kolom yang sesuai. Serta mencetak dua buah tombol pada kolom terakhir yang nantinya akan kita gunakan Demi mengupdate dan menghapus data user.

catatan:

= > sama saja dengan . Sehingga:

= $user['id'] ?> sama dengan 

Lagi di dalam file index.php, tambahkan Tengah kode berikut ini pada baris paling Rendah Demi menyematkan file foot.php dari folder template.

php
include('./template/foot.php');
?>

Sehingga akhirnya keseluruhan dari file index.php akan menjadi seperti ini:

include('./template/head.php');
include('./config/database_connection.php');

function getAllUser($db)
{
    $sql = "SELECT * FROM users";
    return $db->query($sql)->fetchAll(PDO::FETCH_ASSOC); } ?>
div class="container py-4">
  div class="table-responsive">
    table class="table table-striped">
      thead>
        tr>
          th>IDth>
          th>Namath>
          th>Emailth>
          th>Passwordth>
          th>Kelolath>
        tr>
      thead>
      tbody>
        
        
        tr>
          td>= $user['id'] ?>td>
          td>= $user['name'] ?>td>
          td>= $user['email'] ?>td>
          td>= $user['password'] ?>td>
          td>
            a
              href="./update_user.php?id== $user['id'] ?>"
              class="btn btn-sm btn-success"
              >Updatea
            >
            a
              href="./delete_user.php?id== $user['id'] ?>"
              class="btn btn-sm btn-danger"
              >Deletea
            >
          td>
        tr>
        
        
        tr>
          td colspan="5" class="text-center">Enggak Eksis datatd>
        tr>
        
      tbody>
    table>
  div>
div>
include('./template/foot.php');
?>

Pastikan Enggak Eksis kesalahan pengetikan. Jalankan kembali aplikasi kita. pergi ke link

http://localhost/codelabs/simple_crud/index.php

(Note: sesuaikan link dengan Letak folder project yang Engkau miliki)

Apabila Enggak Eksis kesalahan, maka sekarang tampilan di browser Engkau kurang lebih akan menjadi seperti ini:

CRUD PHP MySQL

Pergi ke halaman create user dengan Langkah klik menu yang Eksis di bagian navigasi kemudian cobalah tambahkan beberapa data user yang baru. Pastikan data yang Eksis di dalam tabel juga akan bertambah.

CRUD PHP MySQL

Eitss.. kenapa data di kolom ID dari 1 langsung 3 ???

Tenang, ini dikarenakan kita menggunakan auto increment pada kolom id di dalam database kita. Auto increment adalah data yang Mekanis diisikan ke dalam kolom Apabila kita menambahkan data ke dalam database dan nilainya selalu bertambah satu secara Mekanis (auto increment). Dan disini Rupanya sebelumnya saya telah menghapus data dengan id 2 sehingga id yang dibuat adalah 3. Id di dalam database Engkau mungkin saja berbeda, Apabila Engkau sudah beberapa kali menginput data dan menghapusnya.

Bagus, jadi di bagian ini kita sudah berhasil menampilkan data yang Eksis di dalam database. Apa selanjutnya ?

Memperbarui data user

Setelah kita berhasil menampilkan data yang Eksis di database, kali ini kita akan Membikin fitur Demi update/edit data yang sudah kita simpan.

Karena tampilan Demi update user kurang lebih sama ketika kita menambahkan data, maka agar Segera kita akan menggunakan kode pada halaman tambah data user.

Pergi ke file create_user.php, salin Seluruh kode yang Eksis di dalamnya, kemudian paste ke dalam file update_user.php dan sesuaikan isinya.

Sehingga file update_user.php sekarang menjadi seperti ini:

php
include('./template/head.php');
include('./config/database_connection.php');

function isEmailAvailable($db, $email)
{
    $sql = "SELECT email FROM users WHERE email='$email'";
    return $db->query($sql)->fetchAll() == null;
}

$errors = []; // variabel yang akan digunakan Demi menampung pesan error validasi

if (!empty($_POST)) {

    // ambil data yang dikirimkan melalui form dan simpan ke dalam variabel
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // lakukan validasi Demi tiap inputan, Apabila inputan Hampa maka tambahkan pesan error kedalam variabel $errors
    if ($name == "") {
        $errors['name'] = "Nama Enggak boleh Hampa";
    }
    if ($email == "") {
        $errors['email'] = "Email Enggak boleh Hampa";
    }
    if ($password == "") {
        $errors['password'] = "Password Enggak boleh Hampa";
    }

    // cek Apabila Enggak Eksis error maka lakukan proses penyimpanan data
    if (!$errors) {
        // cek duplikasi data
        if (isEmailAvailable($db, $email)) {
            // hash password Demi keamanan
            $password = password_hash($password, PASSWORD_DEFAULT);
            // buat sql
            $sql = "INSERT INTO users (name, email, password) VALUES ('$name', '$email', '$password')";
            // simpan data
            if ($db->exec($sql)) {
                // berhasil
                echo "";
                echo "";
            } else {
                // gagal
                echo "";
                echo "";
            }
        } else {
            $errors['email'] = "Email " . $email . " sudah digunakan";
        }
    }
}
?>



include('./template/foot.php');
?>

Tambahkan kode berikut dibawah block if (!empty($_POST)){}

if (!empty($_GET) and isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM users WHERE id='$id'";
    $user = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        header('location:./index.php');
    }
} else {
    header('location:./index.php');
}

Sehingga akan terlihat seperti ini:

if (!empty($_POST)) {
    ...
    ...
    ...
}

if (!empty($_GET) and isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM users WHERE id='$id'";
    $user = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        header('location:./index.php');
    }
} else {
    header('location:./index.php');
}

Kode tersebut kita gunakan Demi memeriksa parameter id yang dikirimkan melalui url seperti ini

update_user.php?id=1

Apabila parameter di url Hampa atau bukan id maka halaman akan dialihkan ke index.php.

kemudian, id yang dikirimkan di dalam url juga akan kita gunakan Demi memeriksa apakah Eksis data user yang di maksud, Apabila user Enggak Eksis maka halaman juga akan dialihkan ke index.php.

Bagus kita akan lanjutkan.

Modifikasi form html yang Eksis sehingga menjadi seperti ini

form class="mt-4" method="POST">
  div class="mb-3">
    label for="name" class="form-label">Namalabel>
    input
      name="name"
      type="text"
      class="form-control"
      id="name"
      value="= $user['name'] ?>"
    />
  div>
  div class="mb-3">
    label for="email" class="form-label">Emaillabel>
    input
      name="email"
      type="email"
      class="form-control"
      id="email"
      value="= $user['email'] ?>"
    />
  div>
  div class="mb-3">
    label for="password" class="form-label">Passwordlabel>
    input name="password" type="password" class="form-control" id="password" />
  div>
  input type="hidden" name="id" value="= $user['id'] ?>" />
  button type="submit" class="btn btn-success">Simpanbutton>
form>

Perhatikan bagian input dari form kita. Kita menambahkan input baru dengan type hidden yang akan digunakan Demi menyimpan id user yang Ingin kita perbarui. Input dengan type hidden Enggak akan dilihat oleh pengguna karena Enggak akan di tampilkan pada form.

Selain itu, kita juga menambahkan atribut baru pada tiap inputan kita bernama value yang kita isi dengan data user yang Eksis dalam variabel $user

input
  name="name"
  type="text"
  class="form-control"
  id="name"
  value="= $user['name'] ?>"
/>

atribut value digunakan Demi mengisi input dengan data, dan disini kita isi dengan data awal user sebelum diperbarui.

Lampau kenapa Enggak ditambahkan pada input Demi password?

Engkau Niscaya ingat bahwa kita mengubah password yang dibuat menjadi Kepribadian acak (hashed password). Sehingga password ini Enggak dapat langsung kita tampilkan Demi menghindari password ter-hash dua kali. Oleh karena itu, kita hanya akan mengupdate password Apabila kolom password kita isi dengan password yang baru.

Setelah memodifikasi form, kita akan memodifikasi script/kode php yang digunakan Demi proses menyimpan data.

Hapus baris kode Demi memvalidasi inputan password karena kita akan membolehkan input password ini Hampa.

hapus kode ini

if ($password == "") {
    $errors['password'] = "Password Enggak boleh Hampa";
}

Pergi ke bagian atas, modifikasi blok kode if (!$errors){} sehingga menjadi seperti ini:

if (!$errors) {

    $id = $_POST['id'];

    // cek duplikasi data
    if (isEmailAvailable($db, $email, $id)) {
        // cek Apabila user merubah password
        if ($password != "") {
            // hash password Demi keamanan
            $password = password_hash($password, PASSWORD_DEFAULT);
            // buat sql
            $sql = "UPDATE users SET name='$name', email='$email', password='$password' WHERE id='$id'";
        } else {
            $sql = "UPDATE users SET name='$name', email='$email' WHERE id='$id'";
        }
        // simpan data
        if ($db->exec($sql)) {
            // berhasil
            echo "";
            echo "";
        } else {
            // gagal
            echo "";
            echo "";
        }
    } else {
        $errors['email'] = "Email " . $email . " sudah digunakan";
    }
}

Pada blok kode tersebut kita melakukan beberapa perubahan sebagai berikut:

  1. Menambahkan variabel $id yang menyimpan data id yang dikirimkan melalui form,
  2. Mengirimkan satu parameter tambahan Adalah id user ke dalam fungsi isEmailAvailable(),
  3. Memeriksa apakah input password Enggak Hampa. Apabila input password Enggak Hampa maka password akan di hash seperti sebelumnya dan menyertakan perubahan password pada string $sql. Apabila input pasword Hampa, maka Enggak perlu menyertakan perubahan password pada string $sql.

Setelah itu pergi ke bagian atas dan modifikasi fungsi isEmailAvailable() menjadi seperti ini:

function isEmailAvailable($db, $email, $userID)
{
    $sql = "SELECT email FROM users WHERE id='$userID'";
    $oldEmail = $db->query($sql)->fetch(PDO::FETCH_ASSOC)['email'];

    $sql = "SELECT email FROM users WHERE email='$email'";
    $checkUser = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    return ($checkUser == null or $email == $oldEmail);
}

Pada fungsi isEmailAvailable() kita melakukan beberapa perubahan sebagai berikut:

  1. Menambahkan satu parameter baru Adalah $userID,
  2. Mengambil email user berdasarkan id yang Eksis di parameter $userID kemudian menyimpannya ke dalam variabel $oldEmail,
  3. Mengambil data user berdasarkan email yang Eksis di parameter $email kemudian menyimpannya ke dalam variabel $checkUser,
  4. Membandingkan apakah data user Hampa atau email yang diinputkan sama dengan email Lamban user, dan hasil Komparasi tersebut dikirim sebagai nilai kembalian (return value) fungsi isEmailAvailable()

Akhirnya keseluruhan kode dalam file update_user.php akan menjadi seperti ini:

php
include('./template/head.php');
include('./config/database_connection.php');

function isEmailAvailable($db, $email, $userID)
{
    $sql = "SELECT email FROM users WHERE id='$userID'";
    $oldEmail = $db->query($sql)->fetch(PDO::FETCH_ASSOC)['email'];

    $sql = "SELECT email FROM users WHERE email='$email'";
    $checkUser = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    return ($checkUser == null or $email == $oldEmail);
}

$errors = []; // varioabel yang akan digunakan Demi menampung pesan error validasi

if (!empty($_POST)) {

    // ambil data yang dikirimkan melalui form dan simpan ke dalam variabel
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // lakukan validasi Demi tiap inputan, Apabila inputan Hampa maka tambahkan pesan error kedalam variabel $errors
    if ($name == "") {
        $errors['name'] = "Nama Enggak boleh Hampa";
    }
    if ($email == "") {
        $errors['email'] = "Email Enggak boleh Hampa";
    }

    // cek Apabila Enggak Eksis error maka lakukan proses penyimpanan data
    if (!$errors) {

        $id = $_POST['id'];

        // cek duplikasi data
        if (isEmailAvailable($db, $email, $id)) {
            // cek Apabila user merubah password
            if ($password != "") {
                // hash password Demi keamanan
                $password = password_hash($password, PASSWORD_DEFAULT);
                // buat sql
                $sql = "UPDATE users SET name='$name', email='$email', password='$password' WHERE id='$id'";
            } else {
                $sql = "UPDATE users SET name='$name', email='$email' WHERE id='$id'";
            }
            // simpan data
            if ($db->exec($sql)) {
                // berhasil
                echo "";
                echo "";
            } else {
                // gagal
                echo "";
                echo "";
            }
        } else {
            $errors['email'] = "Email " . $email . " sudah digunakan";
        }
    }
}

if (!empty($_GET) and isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM users WHERE id='$id'";
    $user = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        header('location:./index.php');
    }
} else {
    header('location:./index.php');
}
?>


include('./template/foot.php');
?>

Sekarang kita coba mengupdate salah satu data yang kita miliki. Pergi ke halaman index.php Lampau klik update pada salah satu data, maka akan diarahkan ke halaman update_user.php seperti ini:

CRUD PHP MySQL

lakukan beberapa perubahan data kemudian klik simpan, Apabila berhasil maka data akan diperbarui:

CRUD PHP MySQL

Periksa juga Engkau di dalamd database, pastikan semuanya terupdate.

CRUD PHP MySQL

Sip, fitur update data user kita sudah berhasil dibuat. Berikutnya kita akan Membikin fitur hapus data.

Hapus data user

Setelah berhasil memperbarui data user, kali ini kita akan Membikin fitur Demi menghapus data user.

Buka file delete_user.php, tambahkan kode php berikut ini

php
include('./template/head.php');
include('./config/database_connection.php');

if (!empty($_GET) and isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM users WHERE id='$id'";
    $user = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        header('location:./index.php');
    }
} else {
    header('location:./index.php');
}

if (!empty($_POST)) {
    $id = $_POST['id'];
    $sql = "DELETE FROM users WHERE id='$id'";
    // hapus data
    if ($db->exec($sql)) {
        // berhasil
        echo "";
        echo "";
    } else {
        // gagal
        echo "";
        echo "";
    }
}
?>

pada kode tersebut seperti Normal kita menyematkan file head.php dan database_connection.php, kemudian kita memeriksa apakah parameter id telah dikirimkan melalui url dan apakah terdapat user sesuai dengan id yang Eksis di url. data user dimasukkan ke dalam variabel $user. Kemudian di blok kode berikutnya kita memeriksa apakah Eksis data id yang di kirimkan melalui form. Apabila id dikirimkan maka kita akan Membikin sql string Demi menghapus data di dalam database berdasarkan id yang dikirimkan tersebut.

Setelah proses penghapusan dilakukan akan muncul alert yang menunjukkan apa kah data berhasil dihapus ata gagal. kemudian kita akan dialihkan ke halaman index.php.

Jangan lupa menutup script php dengan ?> karena berikutnya kita akan menuliskan kode html.

Tambahkan kode html berikut di bagian Rendah dari script php:

div class="container py-4 text-center">
  h4>Hapus data user berikut ini?h4>
  br />
  div>
    Nama:
    = $user['name'] ?>
  div>
  div>
    Email:
    = $user['email'] ?>
  div>
  br />
  form method="POST">
    input type="hidden" name="id" value="= $user['id'] ?>" />
    button type="submit" class="btn btn-success">OKbutton>
    a href="./index.php" class="btn btn-danger">BATALa>
  form>
div>

Pada kode diatas kita menampilkan data user yang Ingin dihapus sebagai pertanyaan konfirmasi. Kemudian kita juga Membikin form yang Mempunyai satu input dengan type hidden yang berfungsi Demi mengirimkan id user Demi dihapus. Variabel $user disini kita dapatkan dari script php yang sebelumnya kita buat. Apabila tombol OK ditekan maka form akan disubmit, Apabila tombol BATAL ditekan maka halaman akan dikembalikan ke index.php.

Terakhir, tambahkan kode php berikut ini pada baris paling Rendah.

php
include('./template/foot.php');
?>

jangan lupa Demi menutup blok kode php dengan ?> karena di dalam file juga terdapat kode html.

Akhirnya keseluruhan kode dalam file delete_user.php akan menjadi seperti ini:

php
include('./template/head.php');
include('./config/database_connection.php');

if (!empty($_GET) and isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM users WHERE id='$id'";
    $user = $db->query($sql)->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        header('location:./index.php');
    }
} else {
    header('location:./index.php');
}

if (!empty($_POST)) {
    $id = $_POST['id'];
    $sql = "DELETE FROM users WHERE id='$id'";
    // hapus data
    if ($db->exec($sql)) {
        // berhasil
        echo "";
        echo "";
    } else {
        // gagal
        echo "";
        echo "";
    }
}
?>



include('./template/foot.php');
?>

Proses kode kita sudah selesai saatnya kita uji coba.

Pergi ke halaman index.php dan klik delete pada salah satu data yang Eksis di dalam tabel. Maka kita akan dialihkan ke halaman delete_user.php seperti ini:

CRUD PHP MySQL

Klik OK maka data akan dihapus, dan muncul alert seperti ini:

CRUD PHP MySQL

Klik OK Tengah maka daftar user di halaman index.php telah diperbarui menjadi seperti ini:

CRUD PHP MySQL

Pastikan data di dalam database juga terhapus

CRUD PHP MySQL

Bagus, Tamat sejauh ini aplikasi web CRUD sedehana kita sudah selesai dibuat. Tentunya Lagi banyak bagian yang harus diperbaiki, Demi itu cobalah Demi modifikasi dan explore project yang Engkau buat. Uji coba dan cari Seluruh kesalahan yang mungkin muncul, pahami error yang terjadi karena proses trial and error itulah yang akan mengasah kemampuan memprogram kita.