BAB III MEMBUAT PROJEK DAN DATABASE
B. Membuat database sekolah
1. Merancang dan membuat database
Pada bagian ini kita akan merancang sebuah database seperti berikut
Setelah mengaktifkan apache dan mysql pada xampp, buka phpmyadmin pada browser (localhost/phpmyadmin)
21
Kemudian klik Databases (Basis Data) kemudian masukkan nama databasenya yaitu sekolah dan klik tombol create
2. Menghubungkan database dengan projek
Pada projek buka file Database.php yang terletak pada folder app\config, kemudian cari kode berikut
public $default = [ 'DSN' => '',
'hostname' => 'localhost', 'username' => '',
'password' => '', 'database' => '', 'DBDriver' => 'MySQLi', 'DBPrefix' => '',
22 ];
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'), 'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci', 'swapPre' => '',
'encrypt' => false, 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306, ];
Untuk menghubungkan projek dengan database kita akan mengisikan hostname, username, password dan database menjadi
public $default = [ 'DSN' => '',
'hostname' => 'localhost', 'username' => 'root', 'password' => '',
'database' => 'sekolah', 'DBDriver' => 'MySQLi', 'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'), 'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci', 'swapPre' => '',
'encrypt' => false, 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306,
Pengisian pengaturan ini bergantung pada database, dari sisi alamat (hostname) karena projek berada dalam satu lokal yang sama dengan database, maka untuk hostname dapat diisi dengan localhost, namun jika tidak, maka menggunakan alamat IP yang tentunya antara komputer projek dan server database harus saling terkoneksi, begitu pula dengan username dan password juga tergantung pada setingan database
3. Database Migration pada Codeigniter 4
Pada bagian ini kita akan mempelajari bagaimana membuat tabel dari sebuah database menggunakan database migration, yaitu menyimpan Data Definition Language (DDL) dan Data Manipulation Language (DML) kedalam sebuah kode. Ini digunakan agar ketika projek ini diberikan ke lingkungan lain ataupun jika projek ini dikerjakan secara tim, tidak sulit untuk mendapatkan struktur databasenya.
Dalam membuat database migration ini kita akan menggunakan CLI sebagaimana halnya pada pertemuan sebelumnya yaitu membuat Controller dan Model menggunakan CLI.
23
Silahkan buka command prompt kemudian arahkan ke folder projeknya yaitu C:\xampp\htdocs\sekolah\
a. Membuat tabel Admin
Pada command prompt ketikkan perintah
php spark make:migration Admin
Setelah perintah diatas dijalankan, maka akan muncul sebuah file pada folder app\Database\Migration
<?php
Angka-angka yang muncul untuk penamaan file akan berbeda- beda dan ini tidak masalah, karena sudah diatur oleh CodeIgniter.
Jika kita buka file tersebut terdapat kode seperti berikut
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Admin extends Migration {
public function up() {
//
}
public function down() { //
} }
Kemudian kita akan menambahkan beberapa kode pada file tersebut sehingga menjadi
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
24 class Admin extends Migration
{
public function up() { 'auto_increment' => true ], 'constraint' => '255', ],
'role' => [
'type' => 'ENUM',
'constraint' => ['ROOT','ADMIN'], ],
]);
$this->forge->addPrimaryKey('id');
$this->forge->createTable('admin');
}
public function down() {
$this->forge->dropTable('admin');
} }
Kemudian pada command prompt jalankan perintah php spark migrate
Jika kita lihat pada database sekolah akan muncul tabel admin dan migration
25 Dengan struktur tabel seperti berikut
<?php
b. Membuat tabel Tahun Ajaran
Buat migration TahunAjaran dengan perintah php spark make:migration
TahunAjaran kemudian ketikkan kode berikut
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class TahunAjaran extends Migration {
public function up() {
$this->forge->addField([
'id' => [
'type' => 'INT', 'constrait' => 11, 'unsigned' => true, 'auto_increment' => true ],
'nama_tahun_ajaran' => [ 'type' => 'VARCHAR', 'constraint' => '20', ],
'semester' => [
'type' => 'ENUM',
'constraint' => ['GASAL','GENAP'], ],
'status_aktif' => [
26
public function down() {
$this->forge->dropTable('tahun_ajaran');
} }
Kemudian pada command prompt jalankan perintah php spark migrate
c. Membuat tabel Guru
Buat migration Guru dengan perintah php spark make:migration Guru
kemudian ketikkan kode berikut
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Guru extends Migration {
public function up() { 'auto_increment' => true ],
'tanggal_lahir' => [ 'type' => 'DATE', ],
],
27 'constraint' => '255', 'null' => true, ],
'password' => [
'type' => 'VARCHAR', 'constraint' => '255', ],
]);
$this->forge->addPrimaryKey('id');
$this->forge->createTable('guru');
}
public function down() {
$this->forge->dropTable('guru');
} }
<?php
Kemudian pada command prompt jalankan perintah php spark migrate
d. Membuat tabel Kelas
Buat migration Kelas dengan perintah php spark make:migration Kelas
kemudian ketikkan kode berikut
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Kelas extends Migration {
public function up() { 'auto_increment' => true ],
28
$this->forge->addForeignKey('tahun_ajaran_id', 'tahun_ajaran', 'id', 'RESTRICT', 'CASCADE');
$this->forge->addForeignKey('guru_id', 'guru', 'id', 'RESTRICT', 'CASCADE');
$this->forge->createTable('kelas');
}
public function down() { menghasilkan kode DDL
FOREIGN KEY(`tahun_ajaran_id`) REFERENCES `tahun_ajaran`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
dan
FOREIGN KEY(`guru_id`) REFERENCES `guru`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE
Kemudian pada command prompt jalankan perintah php spark migrate
e. Membuat tabel Siswa
Buat migration Siswa dengan perintah php spark make:migration Siswa
kemudian ketikkan kode berikut
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Siswa extends Migration {
public function up() { 'auto_increment' => true ],
'nisn' => [
'type' => 'VARCHAR', 'constraint' => '12', 'unique' => true,
29
'tanggal_lahir' => [ 'type' => 'DATE', 'constraint' => '255', 'null' => true, ],
'password' => [
'type' => 'VARCHAR', 'constraint' => '255', ],
]);
$this->forge->addPrimaryKey('id');
$this->forge->createTable('siswa');
}
public function down()
{ $this->forge->dropTable('siswa');
} }
Kemudian pada command prompt jalankan perintah php spark migrate
B. Memasukkan data awal pada tabel
Dalam database migration, selain struktur tabel dapat juga mengisi data pada tabel yang disebut dengan istilah Seed. Untuk membuat Seed dengan menjalankan perintah
php spark make:seeder [nama seed]
Silahkan jalankan perintah berikut
php spark make:seeder RootAdmin
Pada folder app\Database\Seeds akan muncul sebuah file dengan nama RootAdmin.php yang beriisi kode seperti berikut
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class RootAdmin extends Seeder
30 {
public function run() {
//
} }
tambah kode diatas pada bagian run() menjadi
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class RootAdmin extends Seeder { public function run()
{
$data = [
'username' => 'adminroot', 'password' => md5('adminroot'), 'role' => 'ROOT'
];
$this->db->table('admin')->insert($data);
} }
Kemudian pada command prompt jalankan perintah
php spark db:seed RootAdmin
Jika kita lihat pada tabel admin akan terdapat data
31
BAB IV
MEMBUAT TEMPLATE
Pada pertemuan ini kita akan membuat template menggunakan framework CSS Bootstrap. Kita akan mempelajari bagaimana cara mengintegrasikan CSS pada Codeigniter.
Untuk template yang akan kita gunakan dapat diunduh pada laman https://startbootstrap.com/template/sb-admin
Klik Free Download untuk mengunduh template
Pada projek sekolah, buat sebuah folder dengan nama assets didalam folder public
32
Ekstrak file template sbadmin yang telah diunduh, kemudian copy folder js dan css ke dalam folder assets yang telah kita buat pada projek
Agar template dapat bekerja baik, perlu ditambahkan framework css
Bootstrap, dengan mengunduhnya dari laman
https://getbootstrap.com/docs/5.1/getting-started/download/ , kita akan mengunduh bootstrap yang bertipe Compiled CSS and JS
33
Ekstrak file bootstrap yang telah diunduh, kemudian copy folder bootstrap tersebut ke app\public\assets
Agar icon-icon pada template dapat bekerja secara offline, kita akan
mengunduh font awesome, buka laman
https://fontawesome.com/v5.15/how-to-use/on-the-web/setup/hosting-font- awesome-yourself kemudian klik tombol Download Font Awesome Free for the Web
34
Ekstrak file fontawesome yang telah diunduh, kemudian copy folder fontawesome ke folder app\public\assets
35
Kemudian buat folder dengan nama layout pada folder app\Views
Di dalam folder layout tersebut buat 4 buah file dengan nama _footer.php, _head.php, _header.php, _js.php, _sidebar.php dan main.php
_footer.php
<footer class="py-4 bg-light mt-auto">
<div class="container-fluid px-4">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright © Sekolah 2021</div>
</div>
</div>
</footer>
36 _head.php
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sekolah</title>
<link rel="stylesheet" href="<?= base_url('assets/fontawesome/css/all.min.css') ?>">
<link rel="stylesheet" href="<?= base_url('assets/css/styles.css') ?>">
_header.php
<nav class="sb-topnav navbar navbar-expand navbar-dark bg-dark">
<!-- Navbar Brand-->
<a class="navbar-brand ps-3" href="index.html">Sekolah</a>
<!-- Sidebar Toggle-->
<button class="btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0" id="sidebarToggle"
href="#!"><i class="fas fa-bars"></i></button>
<!-- Navbar Search-->
<form class="d-none d-md-inline-block form-inline ms-auto me-0 me-md-3 my-2 my-md-0">
<div class="input-group">
<input class="form-control" type="text" placeholder="Pencarian aria-label="Pencarian aria-describedby="btnNavbarSearch" />
<button class="btn btn-primary" id="btnNavbarSearch" type="button"><i class="fas fa- search"></i></button>
</div>
</form>
<!-- Navbar-->
<ul class="navbar-nav ms-auto ms-md-0 me-3 me-lg-4">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button"
data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-user fa-fw"></i></a>
<ul class="dropdown-menu dropdown-menu-end" aria- labelledby="navbarDropdown">
<li><a class="dropdown-item" href="<?= base_url('admin/index')
?>">Administrator</a></li>
<li><a class="dropdown-item" href="<?= base_url('ubahpassword/index') ?>">Ubah
</a></li>
<li>
<hr class="dropdown-divider" />
</li>
<li><a class="dropdown-item" href="<?= base_url('logout/index')
?>">Logout</a></li>
ul>
</nav>
_js.php
<script src="<?= base_url('assets/bootstrap/js/bootstrap.bundle.min.js') ?>"></script>
<script src="<?= base_url('assets/js/scripts.js') ?>"></script>
_sidebar.php
<div id="layoutSidenav_nav">
<nav class="sb-sidenav accordion sb-sidenav-dark" id="sidenavAccordion">
<div class="sb-sidenav-menu">
<div class="nav">
<a class="nav-link" href="<?= base_url('home/index') ?>">
<div class="sb-nav-link-icon">
</
</li>
</ul>
Password
37
<i class="fas fa-tachometer-alt"></i>
</div>
</a>
<a class="nav-link" href="<?= base_url('tahunajaran/index') ?>">
<div class="sb-nav-link-icon">
<i class="far fa-calendar-alt"></i>
</div>
</a>
<a class="nav-link" href="<?= base_url('guru/index') ?>">
<div class="sb-nav-link-icon">
<i class="fas fa-chalkboard-teacher"></i>
</div>
</a>
<a class="nav-link" href="<?= base_url('siswa/index') ?>">
<div class="sb-nav-link-icon">
<i class="fas fa-user-graduate"></i>
</div>
</a>
<a class="nav-link" href="<?= base_url('kelas/index') ?>">
<div class="sb-nav-link-icon">
<i class="fas fa-door-open"></i>
</div>
<!DOCTYPE html>
<html lang="en">
<head>
<?php include_once('_head.php') ?>
</head>
<body class="sb-nav-fixed">
<?php include_once('_header.php') ?>
<div id="layoutSidenav">
<div id="layoutSidenav_content">
<?php include_once('_sidebar.php') ?>
<main>
<div class="container-fluid px-4">
<br/>
<?= $this->renderSection('content') ?>
</div>
</main>
<?php include_once('_footer.php') ?>
Kelas Siswa Guru
Tahun Ajaran Beranda
38
</div>
</div>
<?php include_once('_js.php') ?>
</body>
</html>
Buka file welcome_message.php yang berada dalam folder app\Views kemudian ubah kodenya menjadi
<?= $this->extend('layout/main') ?>
<?= $this->section('content') ?>
<h4>Selamat datang di ruang admin Sistem Informasi Sekolah</h4>
<?= $this->endSection() ?>
Jika kita buka laman http://localhost/sekolah/public/ akan menjadi
39
BAB V
MEMBUAT CRUD TAHUN AJARAN
A. Menampilkan data Tahun Ajaran
Buat model Tahun Ajaran dengan nama MTahunAjaran.php pada app\Models ketikkan kode berikut
<?php
namespace App\Models;
use CodeIgniter\Model;
class MTahunAjaran extends Model {
protected $table = 'tahun_ajaran';
protected $primaryKey = 'id';
protected $allowedFields = ['nama_tahun_ajaran', 'semester', 'status_aktif'];
}
Beberapa settingan yang dilakukan pada model Tahun Ajaran adalah - $table dengan nilai tahun_ajaran karena akan berkomunikasi dengan
tabel tahun_ajaran
- $primaryKey merupakan kolom kunci utama (primary key) pada tabel tahun_ajaran
- $allowedFields merupakan kolom pada tabel tahun_ajaran yang boleh diinput
Langkah selanjutnya adalah membuat Controller Tahun Ajaran dengan nama TahunAjaran.php pada app\Controller
<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use App\Models\MTahunAjaran;
class Tahunajaran extends BaseController {
private $mtahunajaran;
public function construct() {
$this->mtahunajaran = new MTahunAjaran();
}
public function index() {
$data['tahunAjaran'] = $this->mtahunajaran->findAll();
return view('tahun-ajaran/index', $data);
} }
Kemudian kita buat file index.php sebagai tampilan pada folder app\Views\tahun-ajaran dan isi dengan kode
40
<?= $this->extend('layout/main') ?>
<?= $this->section('content') ?>
<a href="<?= base_url('/tahunajaran/create'); ?>" class="btn btn-primary"><i class="fas fa- plus"></i> Tambah</a>
<hr />
<table class="table table-bordered table-sm">
<tr>
<th>No</th>
<th>Nama Tahun Ajaran</th>
<th>Semester</th>
<th>Status Aktif</th>
</tr>
<?php
$no = 1;
foreach ($tahunAjaran as $row) {
?>
<tr>
<td><?= $no++; ?></td>
<td><?= $row['nama_tahun_ajaran']; ?></td>
<td><?= $row['semester']; ?></td>
<td><?= $row['status_aktif'] == 1 ? 'AKTIF' : 'TIDAK AKTIF'; ?></td>
<td>
<a title="Edit" href="<?= base_url("tahunajaran/edit/" . $row['id']) ?>" class="btn btn- outline-info btn-sm"><i class="far fa-edit"></i></a>
<a title="Aktivasi" href="<?= base_url("tahunajaran/aktivasi/" . $row['id']) ?>"
class="btn btn-outline-success btn-sm" onclick="return confirm('Apakah Anda yakin ingin mengaktifkan Tahun Ajaran ini ?')"><i class="far fa-check-square"></i></a>
<a title="Delete" href="<?= base_url("tahunajaran/delete/" . $row['id']) ?>" class="btn btn-outline-danger btn-sm" onclick="return confirm('Apakah Anda yakin ingin menghapus data ?')"><i class="far fa-trash-alt"></i></a>
</td>
<?= $this->endSection() ?>
Jika kita membuka laman
http://localhost/sekolah/public/tahunajaran/index, maka akan tampil seperti berikut
41
B. Membuat Form Tambah Tahun Ajaran
Buka file Controller TahunAjaran.php kemudian tambahkan fungsi dengan nama create
public function create() {
return view('tahun-ajaran/create');
}
Buat sebuah file create.php pada folder app\Views\tahun-ajaran dan ketikkan kode berikut
<?= $this->extend('layout/main') ?>
<?= $this->section('content') ?>
<h4>Tambah Tahun Ajaran</h4>
<form method="post" action="<?= base_url('tahunajaran/store') ?>">
<div class="form-group">
<label for="nama">Nama Tahun Ajaran</label>
<input type="text" class="form-control" name="nama_tahun_ajaran">
</div>
<div class=" form-group">
<label for="nama">Semester</label>
<select name="semester" class="form-control">
<option>-- PILIH SEMESTER --</option>
<option value="GASAL">GASAL</option>
<option value="GENAP">GENAP</option>
</select>
</div>
<hr />
<button class="btn btn-primary" type="submit"><i class="far fa-save"></i> Simpan</button>
<a class="btn btn-danger" href="<?= base_url('/tahunajaran') ?>"><i class="fas fa-ban"></i>
Batal</a>
</form>
<?= $this->endSection() ?>
C. Membuat fungsi Create Tahun Ajaran
Pada kode file create.php terdapat form dengan action yang mengarah kepada tahunajaran/store (action="<?= base_url('tahunajaran/store') ?>") maka pada controller Tahunajaran.php kita akan menambahkan sebuah function dengan nama store yang akan berfungsi untuk menyimpan data Tahun Ajaran
public function store() {
$data = [
'nama_tahun_ajaran' => $this->request->getVar('nama_tahun_ajaran'), 'semester' => $this->request->getVar('semester')
];
$this->mtahunajaran->insert($data);
return redirect()->to('/tahunajaran');
42 }
D. Membuat fungsi menampilkan form ubah data
Buka file Controller TahunAjaran.php kemudian tambahkan fungsi dengan nama edit
public function edit($id) {
$data['tahunAjaran'] = $this->mtahunajaran->find($id);
return view('tahun-ajaran/edit', $data);
}
Buat sebuah file edit.php pada folder app\Views\tahun-ajaran dan ketikkan kode berikut
<?= $this->extend('layout/main') ?>
<?= $this->section('content') ?>
<h4>Ubah Tahun Ajaran</h4>
<form method="post" action="<?= base_url('tahunajaran/update/' . $tahunAjaran['id']) ?>">
<div class="form-group">
<label for="nama">Nama Tahun Ajaran</label>
<input type="text" class="form-control" name="nama_tahun_ajaran" value="<?=
$tahunAjaran['nama_tahun_ajaran'] ?>">
</div>
<div class=" form-group">
<label for="nama">Semester</label>
<select name="semester" class="form-control">
<option>-- PILIH SEMESTER --</option>
<option value="GASAL" <?= ($tahunAjaran['semester'] == "GASAL" ? "selected" : "");
?>>GASAL</option>
<option value="GENAP" <?= ($tahunAjaran['semester'] == "GENAP" ? "selected" : "");
?>>GENAP</option>
</select>
</div>
<hr />
<button class="btn btn-success" type="submit"><i class="far fa-edit"></i> Ubah</button>
<a class="btn btn-danger" href="<?= base_url('/tahunajaran') ?>"><i class="fas fa-ban"></i>
Batal</a>
</form>
<?= $this->endSection() ?>
E. Membuat fungsi perbaharui (update) data
Pada kode file edit.php terdapat form dengan action yang mengarah kepada tahunajaran/update (action="<?= base_url('tahunajaran/update/' .
$tahunAjaran['id']) ?>">) yang juga mengambil parameter dari nilai id tahun ajaran maka pada controller Tahunajaran.php kita akan menambahkan sebuah function dengan nama update dengan sebuah parameter yang akan menangkap id tahun ajaran yang akan berfungsi untuk mengubah data Tahun Ajaran
public function update($id) {
43 $data = [
'nama_tahun_ajaran' => $this->request->getVar('nama_tahun_ajaran'), 'semester' => $this->request->getVar('semester')
];
$this->mtahunajaran->update($id, $data);
return redirect()->to('/tahunajaran');
}
F. Membuat fungsi untuk menghapus data
Buka file Controller TahunAjaran.php kemudian tambahkan fungsi dengan nama edit
public function delete($id) {
$this->mtahunajaran->delete($id);
return redirect()->to('/tahunajaran');
}
G. Membuat fungsi aktivasi Tahun Ajaran
Pada bagian ini kita akan membuat sebuah fungsi dimana akan di set non aktif pada tahun ajaran yang statusnya aktif, kemudian mengaktifkan tahun ajaran yang dipilih. Buat sebuah fungsi dengan nama aktivasi pada controller Tahunajaran.php
public function aktivasi($id) {
// Mengubah data yang status aktif nya 1 (aktif) menjadi 0 (tidak aktif)
$this->mtahunajaran->where('status_aktif', 1)->set(['status_aktif' => 0])->update();
// Mengubah status aktif yang dipilih menjadi 1 (aktif) $this->mtahunajaran->update($id, ['status_aktif' => 1]);
// Mengubah status aktif yang dipilih menjadi 1 (aktif) $this->mtahunajaran->update($id, ['status_aktif' => 1]);