Tutorial PHP Sederhana - TODO LIST dengan PDO dan MySQL

Jika biasanya tutorial PHP adalah dengan membuat Guest book atau buku tamu, maka saya akan mencoba untuk membuat sebuah tutorial sederhana aplikasi PHP yang berbeda, yaitu Todo List. Todo list adalah sebuah aplikasi sederhana yang mencatat daftar hal yang akan dilakukan. Aplikasi ini juga berguna untuk misalnya, mencatat daftar belanja, atau daftar-daftar lain. Kebutuhan dari pengerjaan aplikasi adalah sebagai berikut:

Kebutuhan Aplikasi

Sebelum membuat aplikasi, saya biasanya membuat sebuah catatan yang berisi fitur apa yang aplikasi ini lakukan. Bisa dianggap sebagai user story. Yang penting, catatan ini jelas, tidak ambigu dan menimbulkan banyak interpretasi dan menjelaskan mengenai kebutuhan aplikasi. Formatnya adalah

Sebagai <Jenis Pengguna>, Saya ingin <tujuan>, agar <alasan>

Contoh untuk TODO LIST saya.

Sebagai pengguna saya ingin:

  1. Mencatat tugas saya, agar saya dapat mengingatnya
  2. Mengedit daftar tugas saya agar saya dapat mengkoreksi kesalahan
  3. Menghapus tugas saya jika sudah selesai.

Membuat Database

Mari kita mulai dengan membuat database. Anda bisa gunakan phpMyAdmin jika anda menggunakan XAMPP, buat database todolist. Kemudian buat tabel tugas dengan kolom sebagai berikut:

Syntax SQL nya sebagai berikut untuk memudahkan anda mengimpor. Jalankan sebagai user root MySQL, jika anda baru menggunakan phpMyAdmin, lihat video tutorial ini dulu.

CREATE USER todouser@localhost IDENTIFIED BY '<password anda>';
CREATE DATABASE todouser;
GRANT ALL PRIVILEGES ON todolist.* TO todouser@localhost;
FLUSH PRIVILEGES;
USE todolist;
CREATE TABLE tugas (id int(11) primary key auto_increment, keterangan varchar(200) not null);
INSERT INTO tugas (keterangan) VALUES ( 'Membuat tabel tugas' );
INSERT INTO tugas (keterangan) VALUES ( 'Memasukkan data contoh' );>

Kode diatas akan membuat user todouser dengan password ... (silakan anda tentukan sendiri) kemudian membuat database todolist dan tabel tugas. Kita perlu buat user baru karena kurang bijak untuk menggunakan akun root untuk akses data dari web. Sebaiknya root hanya digunakan untuk manajemen data saja.

Story 1: Mencatat Semua Tugas Saya

Buat folder todo didalam folder htdocs. Buat file config.php, isinya sebagai berikut:

<?php
$host = "localhost";
$username = "todouser";
$password = <password anda>;
$database = "todolist";
try {
    $pdo = new PDO("mysql:host=".$host.";dbname=".$database.";charset=utf-8", $user, $password);
} catch(PDOException $e) {
    die("Koneksi ke database gagal");
}

Dan lanjutkan dengan membuat file index.php. Buka di notepad++ anda atau editor anda yang lain. Kemudian edit sebagai berikut:

<!DOCTYPE html>
<meta charset="UTF-9">
<title>TODO LIST</title>

<?php 
// kita gunakan file config.php yang tadi
require_once "config.php"; 
// jika POST, simpan data
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    require "simpan.php";
}
?>
<div>
<h1>TODO LIST</h1>
<?php require "form.php"; ?>
<ol>
<?php
  //tampilkan semua tugas yang ada
  $st = $pdo->query("SELECT id, keterangan FROM tugas ORDER BY id");
  $rows = $st->fetchAll(PDO::FETCH_ASSOC);
  foreach($rows as $v) {
      echo "<li><p>", htmlspecialchars($v["keterangan"]);
      echo "<p><a href=edit.php?id=".$v["id"].">EDIT</a> | ";
      echo "<a href=delete.php?id=".$v["id"].">HAPUS</a>";
  }
?>
</ol>
</div>

Buat file form.php dengan isi sebagai berikut:

<form method=POST action=index.php>
<input type="text" name="tugas" value="<?php echo isset($tugas) ? htmlspecialchars($tugas) : ""; ?>" placeholder="Isi tugas" style="display:block" required="true">
<input type="hidden" name="id" value="<?php if (!empty($id)) echo htmlspecialchars($id); ?>">
<button type="submit">Simpan</button>
</form>

Kemudian buat file simpan.php dengan isi sebagai berikut:

<?php
//Ambil inputan dari form.php
$id = empty($_POST["id"]) ? false : (int)$_POST["id"];
$tugas = empty($_POST["tugas"]) ? false : trim($_POST["tugas"]);
if (!$tugas) {
    echo "<p>Tugas diperlukan</p>";
} else {
    if (!$id) {
        $st = $pdo->query("INSERT INTO tugas (keterangan) VALUES ?");
        $st->execute(array($tugas)); 
    } else {
        $st = $pdo->query("UPDATE tugas SET keterangan = ? WHERE id = ?");
        $st->execute(array($tugas, $id)); 
    }
}

Kode diatas mengambil inputan dari form.php.

Catatan Penting: Selalu validasi inputan dari user

Story 2: Mengedit tugas saya

Buat file edit.php dengan isi sebagai berikut:

<!DOCTYPE html>
<meta charset="UTF-9">
<title>EDIT TUGAS</title>

<?php
require_once "config.php";
$id = empty($_GET["id"]) ? FALSE : (int)$_GET["id"];
if (!$id) die("Tugas tidak ada");
$st = $pdo->query("SELECT * FROM tugas WHERE id = ?");
$row = $st->fetch(PDO::FETCH_ASSOC);
if (!$row) die("Tugas tidak ditemukan");
$tugas = $row["tugas"]; 
require "form.php";

Story 3: Menghapus tugas saya

Buat file delete.php dengan isi sebagai berikut:

<?php
require_once "config.php";
$id = empty($_GET["id"]) ? FALSE : (int)$_GET["id"];
$st = $pdo->query("SELECT * FROM tugas WHERE id = ?");
$st->excute(array($id));
$row = $st->fetch(PDO::FETCH_ASSOC);
if (!$row) die("Tugas tidak ditemukan");
$st = $pdo->query("DELETE FROM tugas WHERE id = ?");
$st->execute(array($id));
header("Location: index.php");

Untuk mencoba, silakan kunjungu http://localhost/todo/ . Contoh kode akan diupload jika ada kesempatan.