Tutorial PHP MVC Ebook
Tutorial PHP MVC Ebook
Informasi
- Pada Modul ini hanya mengajarkan point – point utama atau point penting dari MySQL
& PHP
- Yang diulas yaitu step - step bagaimana membuat sebuah web dari 0 sampai CRUD,
Login & membuat sebuah report atau laporan
- Pada saat pertemuan praktikum, sistem yang akan digunakan yaitu 80% Praktik
langsung atau live coding & 20% Teori, penjelasan lebih lengkap ada di modul / bisa
ditanyakan langsung
Daftar Isi
BAB I Perkenalan.................................................................................................. 4
1.1 Aplikasi Pendukung ..................................................................................................... 4
1.2 Apa itu HTML, CSS, JavaScript, PHP, dan MySQL? ....................................................... 4
1.2.1 HTML ..................................................................................................................... 4
1.2.2 PHP ....................................................................................................................... 4
1.2.3 CSS ........................................................................................................................ 4
1.2.4 JS (JavaScript) ....................................................................................................... 5
1.2.5 MySQL ................................................................................................................... 5
1.3 OOP ............................................................................................................................. 6
1.4 MVC pada PHP ............................................................................................................ 6
BAB II Praktek ...................................................................................................... 6
2.1 Mendalami MySQL....................................................................................................... 6
2.1.1 Membuka phpMyAdmin ......................................................................................... 7
2.1.2 Membuat Database ............................................................................................... 8
2.1.3 Membuat Tabel ..................................................................................................... 9
2.1.4 Membuat relasi antar tabel ................................................................................. 10
2.1.5 Menambahkan Data ............................................................................................ 12
2.1.6 Menampilkan Data ............................................................................................... 12
2.1.7 Order By .............................................................................................................. 15
2.1.8 Pencarian Data .................................................................................................... 16
2.1.9 Join ..................................................................................................................... 18
2.1.10 Mengubah Data ................................................................................................. 20
2.1.11 Menghapus Record / Data ................................................................................. 22
2.1.12 Operasi Aritmatik ............................................................................................... 24
2.1.13 Operasi Logika ................................................................................................... 24
2.1.14 Operasi Perbandingan........................................................................................ 24
2.2 Membuat Database untuk Aplikasi Buku Sederhana ................................................. 25
2.3 Membuat tampilan dengan Template AdminLTE 3 ................................................... 26
2.3.1 Menampilkan Extension file ................................................................................. 26
2.3.2 Menyesuaikan tampilan halaman utama ............................................................. 26
2.4 Persiapan Aplikasi PHP OOP MVC ............................................................................... 33
2.5 Memecah bagian header, konten, sidebar & footer dengan php ............................... 38
2.5.1 Bagian Header ..................................................................................................... 38
2.5.2 Bagian Sidebar..................................................................................................... 38
BAB I Perkenalan
1.1 Aplikasi Pendukung
Sebelum kita membuat sebuah Aplikasi berbasis web, apa saja sih yang perlu
digunakan?
Berikut Diantaranya :
- Web Browser
o Adalah Aplikasi atau perangkat yang digunakan untuk mencari atau menjelajahi
informasi di dalam jaringan internet dari sebuah media seperti situs, blog, jejaring
sosial, dan lain sebagainya yang tersimpan di dalam internet. (Chrome, Mozilla, dll)
o Nantinya Web Browser akan menampilkan hasil yang sudah kita buat.
- Text Editor
o Adalah Aplikasi yang biasa digunakan Programmer untuk membuat kode program.
o Contohnya Sublime Text, Atom, Visual Studio Code, Notepad++
- Apache Web Server
o Apache hadir dalam bentuk software atau sering disebut perangkat lunak server,
software inilah yang nantinya menggantikan fungsi server sesungguhnya.
o Yaitu fungsinya adalah untuk membuat sebuah hubungan antara server dan
browser (crome, opera, safari) milik pengunjung web sambil mengirimkan file
bolak-balik (antara user-server).
o Apache sudah terdapat dalam Xampp, Wamp, dll
1.2.1 HTML
PHP atau singkatan dari Hypertext Preprocessor, adalah script yang biasanya disisipkan
di file HTML atau bisa juga berdiri sendiri. PHP biasanya dipake untuk situs yang bersifat dinamis.
1.2.3 CSS
CSS, singkatan dari Cascading Style Sheet, merupakan sekumpulan kode yang bisa kita
pakai untuk menetapkan beberapa aturan yang bisa diterapkan di file HTML maupun PHP. Jadi
dengan begitu, tampilan / interface yang kita buat bisa jadi lebih teratur dengan menggunakan
CSS. Dengan CSS, kita bisa mengatur beberapa hal di situs web yang kita buat, antara lain
mengatur warna, ukuran, serta ketebalan font, kemudian kita juga bisa mengubah border tabel
yang kita buat di situs web, dan masih banyak lagi.
1.2.4 JS (JavaScript)
JavaScript adalah bahasa script populer yang bisa digunakan untuk membuat beberapa
komponen pendukung situs web yang kita buat. Misalnya kita bisa membuat berbagai macam
efek baik pada gambar maupun pada teks.
1.2.5 MySQL
MySQL merupakan database engine atau server database yang mendukung bahasa
database pencarian SQL. MySQL adalah sebuah perangkat lunak sistem manajemen basis data
SQL atau DBMS yang multithread, multi-user. MySQL AB membuat MySQL tersedia sebagai
perangkat lunak gratis dibawah lisensi GNU General Public License (GPL), tetapi mereka juga
menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok
dengan penggunaan GPL.
1.3 OOP
OOP (Object Oriented Programming) atau yang dalam bahasa Indonesia berarti
Pemrograman Berbasis Objek (PBO) adalah konsep dimana Property / Variable dan juga Method
/ Fungsi di bungkus dalam sebuah Class, yang kemudian akan di terapkan pada Objek – objek
yang di deklarasikan.
1.4 MVC pada PHP
MVC atau (Model View Controller) adalah sebuah konsep pemrograman atau desain
pattern yang dirancang untuk mempermudah programmer dalam pembuatan sebuah proyek
dengan memisahkan antara model, view dan controller agar susunan direktori atau folder lebih
teratur dan terorganisasi guna mempermudah tahap pengembangan selanjutnya.
BAB II Praktek
2.1 Mendalami MySQL
Dalam membuat sistem, kita pasti memerlukan sebuah database & tabel yang akan
menampung data – data kita. Nah untuk membuatnya kita harus mempunyai rancangan
database nya dulu. Misalnya kita akan membuat sebuah web yang menampung data BUKU
Maka sederhananya kita akan membuat rancangan seperti ini :
Nah karena kita sudah membuat rancangannya, apa saja tabel dan kolom yang kita
perlukan maka, kita akan langsung membuatnya diMySQL.
Sebenarnya ada 2 cara yang bisa kamu praktekkan, yaitu menggunakan command
prompt dan langsung menggunakan diphpmyadmin. Mungkin masih ada yang bingung? Apa sih
bedanya phpmyadmin dan yang langsung di commandprompt?
phpMyAdmin adalah sebuah alat yang dapat menangani administrasi dari MySQL dengan
melalui web atau langsung ada interfacenya. phpMyAdmin disebut juga pembantu diberbagai
operasi pada MySQL. phpMyAdmin mendukung MySQL dalam berbagai operasi, seperti
mengolah basis data, indeks, user, permissions dan lain sebagainya tanpa harus mengetikkan
query MySQL. Tapi meski begitu kita tetap wajib mengetahui bagaimana cara membuat,
mengedit, hapus dan cari data di MySQL karena itu kita perlukan di file PHP kita nantinya.
Sedangkan yang langsung di cmd? Yup, disitu tidak ada interface jadi murni kita harus
mengetikkan semua query MySQL satu persatu, tidak bisa langsung klik – klik seperti di
phpmyadmin.
Nah walaupun kita akan praktek langsung di MySQL, saya akan tetap menuliskan
sebenarnya query apa sih yang digunakan untuk membuat database, tabel dan operasi – operasi
MySQL lainnya.
2.1.1 Membuka phpMyAdmin
1. Buka Xampp, start Apache & MySQL sampai bertuliskan menjadi stop
Gambar 5 Xampp
Gambar 6 phpMyAdmin
1. Buat database, klik Link Baru yang ada di sebelah kiri atas
2. Tuliskan nama database yang akan kita buat yaitu belajar_buku
3. Klik saja buat langsung maka kita sudah berhasil membuat database. Tanpa perlu ngoding
query mysql tapi bisa membuat database? Yup bener banget, tapi dibalik itu semua ada
query MySQL yang diproses oleh phpMyadmin.
1. Kalau database sudah berhasil dibuat, kita langsung membuat tabel buku & tabel
kategori. Tuliskan nama tabel dan jumlah kolomnya
2. Setelah kalian klik kirim, maka akan tampil text kolom & tipe datanya, isikan sesuai
rancangan yang sudah kita bikin
Penjelasan :
- Integer & Varchar adalah tipe data. Bedanya integer biasa digunakan untuk bilangan yang
berupa angka bulat, misal 1, 2, 3, 100, 1000 tanpa ada koma. Kalau Varchar bisa
menampung karakter misalnya (A s.d Z / 0 s.d 9999++ / simbol – simbol / spasi)
- Masih banyak tipe data lain yang bisa kalian gunakan beserta masing – masing fungsinya
misalnya tipe data date untuk menampung tanggal (2019-01-14) atau tipe data enum,
dll
- Id kenapa menggunakan Integer? Karena disitu Id saya buat A_I (Auto Increment)
maksudnya agar setiap kita menambahkan record / data, maka otomatis tergenerate jadi
angka 1, 2, 3 dst...
- PRIMARY KEY? Ya, PK dari tabel buku adalah id artinya kolom id harus UNIK nilainya, tidak
boleh ada yang sama agar pada saat proses edit, delete dan cari itu mudah.
- Tak Ternilai / Null : Yang dicentang berarti pada saat proses input, boleh nilainya kosong.
- Panjang nilai ya bebas mau berapa saja sesuai keperluan hehe
3. Langsung deh kalian klik kirim kalau udah diisi.
1. Kalau tabel yang kita rancang sudah terbuat, kita akan membuat relasi atau hubungan
antar tabelnya dulu.
Pada database belajar_buku ini terdapat 2 tabel yaitu antara buku dan kategori yang
menghubungkannya adalah kategori_id
Dimana pada tabel buku, ada id sebagai Primary Key dan kategori_id sebagai Foreign Key.
Primary Key : Salah satu kolom unik untuk identifikasi baris dalam tabel yang tidak boleh ada
sama nilainya, kolom ini tidak boleh berulang, dan tidak boleh kosong (null).
Foreign key : Suatu field dalam satu tabel yang digunakan untuk menghubungkan dua tabel.
Dengan begitu, foreign key merujuk pada suatu kolom yang unik untuk mengidentifikasi baris
dari satu tabel yang sama atau berbeda.
Yang warna merah adalah Primary Key, dan yang warna biru adalah Foreign Key.
2. Untuk membuat relasinya, pilih pada struktur lalu klik Tampilan hubungan / Relation View
Penjelasan :
- On Delete Restrict : Artinya jika di tabel kategori datanya dihapus, maka tidak
diperbolehkan kalau di tabel buku terdapat kategori yang akan dihapus.
- On Update Cascade : Jika primary key di tabel kategori diubah, maka di tabel buku FK juga
akan berubah.
4. Kembali ke database belajar_buku, pilih Desainer untuk melihat relasi tabel yang sudah
dibuat
1. Tambahkan data di kategori dan buku dengan mengklik tab Insert / Tambahkan. Saya
menambahkan kategori Novel, dll.
Penjelasan :
- Id kenapa NULL? Karena ID sudah otomatis tergenerate menjadi angka yang berururutan
oleh AUTO_INCREMENT
2. Untuk data buku, caranya sama jadi silahkan ditambahkan beberapa buku di phpMyAdmin
langsung. Disini saya sudah menambahkan 3 buku.
1. Untuk menampilkan nya langsung klik saja tabel buku atau query MySQL nya seperti ini :
HIRZI WIDYAN PUTRA – GILACODING.COM
13
Penjelasan :
- SELECT * FROM nama_tabel : Tanda bintang (*) adalah tanda untuk menampilkan seluruh
isi data/record ditabel buku.
2. Menampilkan beberapa kolom saja? Misalnya kita menampilkan kolom judul & pengarang
saja. Tinggal masukkan query dibawah ini pada tab SQL
Hasilnya :
3. Menampilkan data dengan ketentuan tertentu, misalnya ingin menampilkan data dengan
id 1
Hasilnya :
Penjelasan :
- Karena buku Danur memiliki id 1, maka sesuai dengan select yang kita tentukan hanya id
1 yang ditampilkan
4. Menampilkan data yang harganya diatas 27000
Hasilnya :
Penjelasan :
- 27000 hanya contoh ya.
- Dari 3 data, hanya 2 yang harganya diatas dari 27000
- Bisa juga menggunakan beberapa ketentuan misalnya :
o < Kurang dari 27000
o <= Kurang dari atau sama dengan 27000
o = sama dengan 27000
HIRZI WIDYAN PUTRA – GILACODING.COM
15
Hasilnya :
6. Menampilkan berdasarkan tahun & penerbit, misalnya mau menampilkan tahun terbit
yang 2019 & penerbitnya gramedia
Hasilnya :
Penjelasan :
- Karena memiliki 2 ketentuan yang wajib, maka harus menggunakan AND
- Bisa juga menggunakan OR kalau yang wajib hanya salah satu, misalnya Where penerbit
= ‘Gramedia’ OR penerbit =’Loko Media’;
- Maka yang tampil juga berdasarkan penerbit dari gramedia atau loko media
2.1.7 Order By
1. Menampilkan data tapi dari yang terbaru dulu, bisa menggunakan ORDER BY kolom
Penjelasan :
- Yang tampil id nya dari tertinggi ke terendah
- Maksud DESC : Tinggi ke rendah, kalau ASC : rendah ke tinggi
- Kamu juga bisa melakukan order by harga dari rendah ke tinggi dan sebaliknya.
1. Ingin mencari langsung data judul yang sama persis dengan WHERE misalnya mencari
kata ‘Danur’
2. Misalnya kita ingin mencari judul yang mengandung kata “an”, ini bisa menggunakan
WHERE LIKE
Hasilnya :
Penjelasan :
- Tanda ‘%an%’ akan mencari ke dalam kata yang mengandung an, misalnya disitu terdapat
judul buku ‘Danur’ dengan ‘Kisah Tanah Dayak’. Keduanya mengandung kata an
- Jika tanda % hanya didepan saja, misalnya ‘%K’ maka yang tampil hanya yang judulnya
‘Kisah Tanah Dayak’.
- Begitu juga sebaliknya, misal kita cuman memberi tanda % dibelakang, contohnya
mencari ‘h%’ maka yang dicari hanya data yang memiliki huruf h dibelakang.
3. Bisa dikombinasikan juga dengan operator logika OR atau AND, contohnya kita akan
mencari judul yang mengandung kata naruto lalu juga tahun terbitnya 2020.
Hasilnya :
2.1.9 Join
Tujuan Join adalah untuk menggabungkan tabel yang memiliki relasi misalnya tabel buku
dengan tabel kategori, bisa dihubungkan karena ditabel buku terdapat kategori_id, jadi kita akan
menampilkan secara detail.
Keterangan :
- Tabel buku memiliki 4 data
- Data pada tabel buku dengan id 4 tidak memiliki kategori alias kategorinya NULL / kosong
Hasilnya :
Penjelasan :
- Tabel yang ditampilkan, masing – masing sesuai dengan kategorinya. Pada buku id dari
judul Danur ada lah 2, nah id 2 itu tadi dimiliki oleh kategori Horor
- Data buku dengan judul Naruto Episode 4000 tidak tampil karena tidak memiliki kategori
2. Left Join
Hasilnya :
Penjelasan :
- Semua data pada tabel buku ditampilkan
- Pada buku dengan id 4 kan kategorinya NULL kok tetap ditampilkan? Karena left join
menampilkan semua data buku walaupun kategorinya null
3. Right Join
Hasilnya :
Penjelasan :
- Semua data pada tabel kategori tampil, walaupun tidak ada yang memiliki kategori novel
maupun drama. Inilah yang dimaksud dengan right join.
Pada operasi MySQL, ubah data merupakan salah satu penting dan query yang harus
kamu hapal dan biasanya untuk mengubah data pasti dengan kondisi tertentu. Misal ingin
merubah judul yang id nya 1 atau yang judulnya Danur.
Kalau diphpMyAdmin sih mau edit gampang, tinggal cari datanya lalu didouble klik pada
kolom yang mau diubah. Tapi gimana querynya?
1. Ubah satu data cukup langsung menggunakan where, jadi kita mau ubah harga danur
yang awalnya 50000 jadi 75000.
Hasilnya :
Penjelasan :
- Karena judul buku danur memiliki id 1, maka pada kondisi update kita pakai where id = 1
- Bisa kok pakai where judul = ‘Danur’, tapi itu tidak direkomendasikan karena kolom judul
itu tidak UNIK, jadi bisa saja judul Danur ada beberapa tapi hanya beda pengarang saja.
Makanya id dibuat unik agar membedakan buku danur 1 dengan buku danur lainnya.
- Harga sudah berubah, awalnya 50000 jadi 75000
2. Ubah dengan beberapa kondisi
Misal kita ubah ternyata nih judul naruto tahun terbit 2020 keatas pengarang nya sudah
beda, bukan kishimoto lagi terus kategorinya kita isi jadi 3 dan harganya naik jadi 33000. Jadi
kondisinya where judul like naruto AND tahun terbit >= 2020
Hasilnya :
Penjelasan :
- Yang berubah hanya naruto episode 4000, karena hanya dia yang memenuhi kondisi dari
update tadi
- Yaitu yang nama nya naruto & tahun terbitnya sama dengan atau diatasnya 2020 hanya
naruto episode 4000
- Disitu saya merubah beberapa kolom, diataranya nama pengarang, kategori, dan
harganya.
3. Ubah semua data langsung
Mungkin contohnya kita akan mengubah semua harga menjadi 50000. Ya langsung saja gini :
Hasilnya :
1. Menghapus 1 data dengan kondisi jelas.misalnya kita akan menghapus buku dengan id 2
3. Menghapus semua data di tabel tapi AUTO_INCREMENT tidak ter-reset, jadi jika
ditambahkan id nya akan tetap lanjut
Operator Penjelasan
+ Penambahan
- Pengurangan
* Pengalian
/ Pembagian
% Sisa hasil bagi (modulus)
Operator Penjelasan
NOT atau ! Logika bukan
AND atau && Logika dan
OR atau || Logika atau
XOR Logika bukan atau (XOR)
Operator Penjelasan
= Sama dengan
<> atau != Tidak sama dengan
<=> sama dengan (null safe)
< kurang dari
<= kurang dari atau sama dengan
> lebih besar dari
>= lebih besar atau sama dengan
BETWEEN Berada pada batas tertentu
IN Berada di dalam
IS NULL Pengecekan apakah berisi NULL
IS NOT NULL Pengecekan apakah bukan berisi NULL
LIKE Pencarian menggunakan wildcard
Note :
- Yang tidak terdapat pada contoh – contoh diatas silahkan ditanyakan atau bisa googling
sesuai dengan keperluan.
- Bikin relasinya
Note :
- Silahkan buat tabel diatas dulu, jika ada perubahan akan kita rubah pada saat praktek PHP
OOP sesuai dengan keperluan nanti.
Untuk yang extension file nya tidak terlihat, silahkan klik logo windows dikeyboard lalu
ketikkan folder options, nah pilih tab View, pada bagian Hide Extensions for known file types
hilangkan tanda centang, lalu Apply. Jadi tipe file misal index.html akan terlihat
2.3.2 Menyesuaikan tampilan halaman utama
Wah banyak juga ya hehe tapi tenang, kita hanya tinggal menyesuaikan aja kok
Kalau udah download, silahkan ikuti cara berikut :
1. Extract Folder Zip yang tadi di download ke htdocs
2. Buat folder baru didalam htdocs dengan nama bukita
3. Masuk ke dalam folder adminlte, lalu ke folder pages > examples, blank.html di copy dan
paste di folder bukita
4. Lalu kembali ke folder adminlte, copy folder dist & plugins ,yup paste difolder bukita
Nah, jadi sementara ada folder dist, plugins dan file blank.html di folder bukita.
5. Kita akan membuang bagian yang tidak perlu dibagian blank.html
6. Buka file blank.html,pada bagian head, sesuaikan link href nya & title menjadi seperti ini :
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Bukita</title>
<!-- Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
7. Bagian navbar sebagian kita hapus saja, dan buat seperti ini :
<div class="sidebar">
<!-- Sidebar user (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="info">
<a href="#" class="d-block">@herziwp</a>
</div>
</div>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Halaman Utama</h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<section class="content">
<!-- Default box -->
<div class="card">
<div class="card-header">
<h3 class="card-title">Title</h3>
</div>
<div class="card-body">
Start creating your amazing application!
</div>
<!-- /.card-body -->
<div class="card-footer">
Footer
</div>
<!-- /.card-footer-->
</div>
<!-- /.card -->
</section>
11.Bagian <footer> :
<footer class="main-footer">
<b>Bukita 2019</b> All rights reserved.
</footer>
<script src="plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="dist/js/adminlte.min.js"></script>
<!-- AdminLTE for demo purposes -->
<script src="dist/js/demo.js"></script>
13.Nah itu tadi bagian – bagian nya, sekarang full dari blank.html nya sebagai berikut :
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Halaman Utama</h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
<footer class="main-footer">
<b>Bukita 2019</b> All rights reserved.
</footer>
<script src="dist/js/adminlte.min.js"></script>
<!-- AdminLTE for demo purposes -->
<script src="dist/js/demo.js"></script>
</body>
</html>
14.Kita coba buka blank.html, pastikan xampp sudah nyala. Ketikkan di browser :
http://localhost/bukita/blank.html
15.Tampilan Halaman index dari buku kita
1. Yang harus dilakukan terlebih dahulu yaitu membuat 2 folder utama yaitu folder app &
public
2. Nah folder dist, plugins kita letakkan didalam folder public
Penjelasan :
- Difolder ini adalah folder yang bisa diakses oleh user, misalnya file css, js, plugin & gambar
Penjelasan :
- Menyimpan folder & file – file penting php dalam menjalankan sistem ini, misalnya untuk
controller, model, view, config database, dll
4. Pada Folder public kita buat sebuah file baru yang akan diakses oleh user yaitu index.php
require_once '../app/init.php';
$app = new App;
Penjelasan :
- Nah isinya memanggil sebuah file init.php yang berada pada folder app, maka kita perlu
membuat sebuah file init.php
- Lalu menjalankan class App, akan kita buat Class App nya.
5. Pada folder app, kita buat file lagi dengan nama init.php, isinya :
<?php
require_once 'core/App.php';
require_once 'core/Controller.php';
Penjelasan :
- File init.php ini fungsinya akan memanggil semua file yang kita butuhkan pada folder app
- Jadi si file index pada folder public, memanggil file init, nah pada file init akan memanggil
file – file yang kita perlukan, semuanya jadi saling terhubung.
- Pada init.php memanggil lagi Class App dan Controller yang sebagai Class Utama
Pembentuk Aplikasi MVC
6. Pada folder core, buat file App.php, isinya sementara gini dulu :
<?php
class App{
public function __construct()
{
echo 'Praktikum WEB';
}
}
<?php
class Controller{
Hasil sementara :
9. Kalau App sudah berhasil terpanggil seperti diatas, maka kembali ke class App.php,
ketikkan sebagai berikut :
<?php
class App{
if(isset($url[1])){
if(method_exists($this->controller, $url[1])){
$this->method = $url[1];
unset($url[1]);
}
}
if(!empty($url)){
$this->params = array_values($url);
}
Options -Indexes
Fungsinya :
- Agar user tidak bisa membuka folder App kita misalnya http://localhost/bukita/app/ jika
user membuka halaman tersebut, akan muncul pemberitahuan Access Forbidden!
11.Membuat file .htaccess pada folder Public,
Options -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
<?php
class Controller{
public function view($view, $data = [])
{
require_once '../app/views/' . $view . '.php';
}
Fungsinya :
- Sebagai penghubung antar Controller ke Views dengan mengirimkan data yang ingin
ditampilkan jika ada
- Sebagai penghubung juga ke Model untuk proses data MySQL sesuai permintaan Masing
– masing controller (Misal data kategori meminta untuk ditampilkan recordsnya, maka
kategori controller meminta request ke Class Controller method Model, lalu dari method
model akan mengarahkan ke Masing – masing model)
13.Membuat Controller Home.php di folder app/controllers, berikut coding awal :
<?php
2.5 Memecah bagian header, konten, sidebar & footer dengan php
Oke itu tadi kita sudah melakukan persiapannya, sekarang kita akan membuat bagian
template nya terpecah antar konten, header, sidebar, footer
Buka file blank.html yang sebelumnya sudah kita sesuaikan
2.5.1 Bagian Header
<!DOCTYPE html>
.... sampai dengan ....
</nav>
4. Kalian CUT & PASTE didalam header.php
<div class="content-wrapper">
.... sampai dengan ....
</div>
<!-- /.content-wrapper -->
4. Pastikan calian CUT sampai sebelum <footer class="main-footer">
<footer class="main-footer">
.... sampai dengan ....
</html>
3. Cut dari bagian <footer> sampai habis kebawah, paste di footer.php
$this->view('templates/header', $data);
$this->view('templates/sidebar', $data);
$this->view('home/index', $data);
$this->view('templates/footer');
}
}
Pada File yang ada di app/views/home/index.php silahkan dibuka lalu edit bagian Tulisan
Halaman Utama jadi seperti berikut ini : <h1><?= $data['title']; ?></h1>
Lalu di h3 class card-title juga paste berikut ini : <h3 class="card-title"><?= $data['title'];
?></h3>
Panggil di http://localhost/bukita/public/ hasilnya :
Berarti kita sudah berhasil membuat halaman Home dengan Template yang sudah
terpisah. Setelah ini kita akan membuat CRUD Kategori
2.6 Membuat CRUDS Kategori
Sebelumnya kita harus membuat koneksinya dulu, maka pada folder app/config buat file
baru dengan nama config.php
Isinya sebagai berikut :
<?php
define('base_url', 'http://localhost/bukita/public');
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'buku_kita');
Penjelasan :
- Base_url adalah url default kita
- Db_name pastikan nama databasenya sama dengan yang ada diphpmyadmin kalian
class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbnm = DB_NAME;
private $dbh;
private $stmt;
$option = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try{
$this->dbh = new PDO($dsn,$this->user,$this->pass, $option);
}catch(PDOException $e){
die($e->getMessage());
}
}
Filenya ada didalam folder Sesi 2, silahkan copy dari situ saja.
Setelah itu Ke folder app lalu file init.php panggil / require class Config & Database dibagian
bawah :
require_once 'config/config.php';
require_once 'core/Database.php';
Pada header.php tambahkan <?= base_url; ?> pada link css contohnya seperti ini :
Silahkan Controller Home dicopy dulu lalu ganti nama dengan Kategori.php simpan di
folder app/controllers
Isi dari Kategori.php pada folder controllers :
Penjelasan :
- Berisi method – method dengan fungsi yang berbeda - beda
- Pada method index kita memanggil model KategoriModel lalu menuju method
getAllKategori() didalam Class KategoriModel untuk mendapatkan data
Kalau sudah, buat Model dari kategori di app/models simpan dengan nama
KategoriModel.php Isinya :
Buat folder baru di views dengan nama kategori, lalu silahkan copy file index.php yang
ada di views/home simpan ke views/kategori.
Pada sidebar silahkan edit link kategori dan home jadi seperti ini :
Kita ubah tampilan index.php dari kategori, silahkan copy dari file saya bagikan
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
</div>
</div>
<!-- Default box -->
<div class="card">
<div class="card-header">
<h3 class="card-title"><?= $data['title'] ?></h3> <a href="<?= base_url;
?>/kategori/tambah" class="btn float-right btn-xs btn btn-primary">Tambah Kategori</a>
</div>
<div class="card-body">
</div>
</div>
</form>
<table class="table table-bordered">
<thead>
<tr>
<th style="width: 10px">#</th>
<th>Kategori</th>
<th style="width: 150px">Action</th>
</tr>
</thead>
<tbody>
<?php $no=1; ?>
<?php foreach ($data['kategori'] as $row) :?>
<tr>
<td><?= $no; ?></td>
<td><?= $row['nama_kategori'];?></td>
<td>
<a href="<?= base_url; ?>/kategori/edit/<?= $row['id'] ?>" class="badge badge-
info ">Edit</a> <a href="<?= base_url; ?>/kategori/hapus/<?= $row['id'] ?>" class="badge
badge-danger" onclick="return confirm('Hapus data?');">Hapus</a>
</td>
</tr>
<?php $no++; endforeach; ?>
</tbody>
</table>
</div>
<!-- /.card-body -->
</div>
<!-- /.card -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Penjelasan :
- Disitu sudah saya masukkan codingan form untuk pencarian tapi masih belum berfungsi
- Pada tabel kita buat foreach atau perulangan yang datanya kita dapat dari KategoriModel
Pada Index kategori tadi kita sudah menambahkan link untuk menuju ke Form Tambah
tapi masih belum berfungsi karena pada kategori controller belum kita tambahkan isi method
tambah()
Kalau sudah, Buat File create.php simpan di folder app/views/kategori (isi nya kalian copy
dibahan folder sesi 2)
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Penjelasan :
- Pastikan pada action form tujuannya sama dengan nama method yang ada di Kategori
Controller
- Perhatikan name pada input type text jangan sampai salah
Yup, untuk saat ini masih belum bisa jalan kita harus membuat method simpanKategori
di Kategori Controller lalu harus membuat methode Simpan juga di Model Kategori.
Kita buat method simpanKategori di file Kategori.php Controller
Penjelasan :
- Disini proses pengiriman data dari form tambah tadi menuju model.
- Flasher adalah alert untuk mengirimkan pesan apakah kita berhasil atau tidak dalam
proses simpan ini. Kita akan buat file flasher setelah ini.
- Header untuk redirect setelah kita menambahkan data akan dialihkan ke halaman
tertentu seperti contoh diatas akan kembali diarahkan ke halaman kategori index
Penjelasan :
- Proses Query Insert MySQL untuk menyimpan data ke tabel kategori
Membuat file Flasher.php untuk alert berhasil / tidak disetiap proses yang kita lakukan.
Silahkan buat file baru dengan nama Flasher.php simpan di folder app/core,
<?php
class Flasher{
$_SESSION['msg'] = [
'pesan' => $pesan,
'aksi' => $aksi,
'type' => $type
];
}
</div>';
unset($_SESSION['msg']);
}
}
}
Penjelasan :
- Edit($id) , maksud $id adalah id yang kita dapatkan dari URL untuk mengetahui data ID
berapa yang akan kita edit.
- Alur sistemnya masih sama, yaitu kita memanggil lagi ke Kategori Model lalu ke method
getKategoriById($id) untuk memanggil datanya.
Penjelasan :
- Query untuk menampilkan data tapi berdasarkan ID tertentu & hanya mengambil satu
data saja karena ID Primary Key maka tidak mungkin lebih dari 1.
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Penjelasan :
- Mengirimkan data ke KategoriModel methode updateDataKategori
Penjelasan :
- Query Proses Update yang diupdate hanya nama_kategori.
Untuk hapus kita tidak perlu membuat viewnya lagi, disini hanya melakukan proses hapus
dari link yang dikirimkan oleh index kategori pada button hapus.
Maka kita tinggal membuat method hapus pada Kategori.php Controller
Penjelasan :
- Mengirim id yang ingin dihapus ke KategoriModel method deleteKategori($id)
Penjelasan :
- Query Delete by ID yang dikirimkan method hapus oleh Kategori Controller
Yup, kita tidak perlu bikin view lagi tapi cukup pakai file index.php di folder view/kategori
karena disitu tadi kita sudah menambahkan Form untuk Pencarian Data nya, tapi hanya sedikit
penjelasan :
<form action="<?= base_url; ?>/kategori/cari" method="post">
<div class="row mb-3">
<div class="col-lg-6">
<div class="input-group">
<input type="text" class="form-control" placeholder="" name="key" >
<div class="input-group-append">
</div>
</div>
</form>
Penjelasan :
- Pada action tujuannya ke Kategori Controller lalu method Cari berarti kita harus membuat
method cari pada Kategori Controller
- Ada 1 buah Text Field dengan name=’key’ yang akan menampung keyword atau kata kunci
yang akan kita cari pada nama kategori
Penjelasan :
- Mengirimkan keyword tadi ke KategoriModel Method cariKategori
Penjelasan :
- Kamu bisa menambahkan 2 kemungkinan disitu, misal ingin mencari berdasarkan id atau
nama, kalau dicontoh ini hanya berdasarkan nama_kategori yang mirip dengan keyword
saja.
Okay, berarti CRUDS pada Kategori ini sudah selesai. Silahkan ditest langsung aja nih siapa
tau ada error hehe
Jadi berikut coding lengkap dari :
Kategori.php (Controller)
KategoriModel.php (Model)
Karena pada saat membuat CRUDS Kategori kita sudah melakukan setting Config, app,
database, dll maka di CRUDS Buku ini kita tidak perlu melakukannya lagi.
Kita hanya akan membuat Buku Controller, Buku Model dan Viewnya saja lagi.
2.7.1 Index Buku
Silahkan Copy Controllernya Kategori.php , lalu ganti jadi Buku.php pada folder
app\controllers
Nah pada index tinggal ganti jadi Buku, contohnya seperti ini :
Lalu coba disave, sekarang kita ke Model, caranya sama silahkan Copy KategoriModel.php
didalam folder app\models ganti namanya jadi BukuModel.php
Penjelasan :
- Perhatikan nama class dan selectnya pada method getAllBuku() silahkan diganti sesuai
dengan di foto atas
Pada Views lagi, silahkan buat folder baru dengan nama folder buku. Berikut coding index
buku : (silahkan copy dari folder coding)
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<div class="card">
<div class="card-header">
</div>
</div>
</form>
<table class="table table-bordered">
<thead>
<tr>
<th style="width: 10px">#</th>
<th>Judul</th>
<th>Penerbit</th>
<th>Pengarang</th>
<th>Tahun</th>
<th>Kategori</th>
<th>Harga</th>
<th style="width: 150px">Action</th>
</tr>
</thead>
<tbody>
<?php $no=1; ?>
<?php foreach ($data['buku'] as $row) :?>
<tr>
<td><?= $no; ?></td>
<td><?= $row['judul'];?></td>
<td><?= $row['penerbit'];?></td>
<td><?= $row['pengarang'];?></td>
<td><?= $row['tahun'];?></td>
<td><div class="badge badge-warning"><?=
$row['nama_kategori'];?></div></td>
<td><?= $row['harga'];?></td>
<td>
<a href="<?= base_url; ?>/buku/edit/<?= $row['id'] ?>" class="badge badge-
info">Edit</a> <a href="<?= base_url; ?>/buku/hapus/<?= $row['id'] ?>" class="badge badge-
danger" onclick="return confirm('Hapus data?');">Hapus</a>
</td>
</tr>
<?php $no++; endforeach; ?>
</tbody>
</table>
</div>
<!-- /.card-body -->
<div class="card-footer">
Footer
</div>
<!-- /.card-footer-->
</div>
<!-- /.card -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Penjelasan :
- Yang berubah hanya dibagian tabel saja menyesuaikan dengan tabel buku jadi misalnya
mau copy dari views kategori itu bisa saja tinggal tabel nya disesuaikan.
- Dan juga link – link nya
Sesuikan link yang ada pada sidebar.php, ganti href buku nya jadi seperti ini :
Karena masih belum ada datanya, sekarang kita membuat Tambah buku ya... lanjuutt
Penjelasan :
- Kenapa ada Kategori Model lalu methode getAllKategori() disitu? Karena nanti pada saat
menambah buku kita perlu memasukkan kategorinya jadi kita memanggil si Data Kategori
Tersebut.
Lalu pada Views buku nya buat file baru pada folder app\views\buku beri nama create.php
(coding bisa dicopy dari folder coding)
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<div class="form-group">
<label >Penerbit</label>
<input type="text" class="form-control" placeholder="masukkan penerbit buku..."
name="penerbit">
</div>
<div class="form-group">
<label >Pengarang</label>
<input type="text" class="form-control" placeholder="masukkan pengarang
buku..." name="pengarang">
</div>
<div class="form-group">
<label >Tahun</label>
<input type="text" class="form-control" placeholder="masukkan tahun buku..."
name="tahun">
</div>
<div class="form-group">
<label >Kategori</label>
<select class="form-control" name="kategori_id">
<option value="">Pilih</option>
<?php foreach ($data['kategori'] as $row) :?>
<option value="<?= $row['id']; ?>"><?= $row['nama_kategori']; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label >Harga</label>
<input type="text" class="form-control" placeholder="masukkan harga buku..."
name="harga">
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Kalau sudah coba dijalankan dulu deh kita cek apakah tampil create buku nya. Setelah itu
kita lanjut ke Proses Simpan pada Controller dan juga Modelnya.
Silahkan sesuaikan lagi pada buku Controller tadi, jadi seperti ini :
Penjelasan :
- Pastikan , (koma) jangan salah, Pastikan juga urutan kolom dan values nya sama
- Pada bind itu juga jangan sampai salah tujuan misal (tujuan untuk kolom harga, lalu data
yang dikirimkan juga harus name nya harga)
Ke Buku.php pada controllers, silahkan sesuikan method edit() menjadi seperti ini :
Lalu bikin views nya , pada folder app\views\buku coba buat file baru dengan nama
edit.php (copy dari folder coding)
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
Masih belum bisa dijalankan ya pasti error, coba kita ke BukuModel.php lalu pada method
awalnya getKategoriById ganti jadi getBukuByid
Datanya tampil tapi masih belum bisa kita proses edit. Untuk proses pengiriman datanya
silahkan pada Buku.php controller method edit buku :
Penjelasan :
- Harus teliti yaa..
Pastikan pada index buku tadi sudah kita buat link untuk hapus bukunya
Kalau sudah, ke Buku.php Controller, lalu method hapus :
Pastikan pada view index buku sudah terdapat form untuk mencari buku seperti ini :
Pada laporan buku ini saya bagi 2, yaitu PDF dan juga Preview Biasa yang sebenarnya
kalian juga bisa export ke PDF melalui Print with Nitro / Print as PDF (bawaan windows 10)
Perbedaan nya :
- Laporan langsung export PDF :
o Susah Customnya
- Laporan dengan Preview tanpa export ke PDF langsung :
o Mudah Custom tapi harus bisa belajar CSS biar bisa custom sesuai kemauan kamu.
Sebelum membuat laporannya, kita perlu menggunakan beberapa css dan js tambahan.
Ikuti seperti berikut :
1. Folder fpdf181, copy dan paste pada folder app
2. Pada app/init.php tambahkan coding berikut untuk memanggil folder fpdf
Kalau itu tadi package untuk FPDF atau Laporan yang langsung diexport ke PDF, jadi kalau
kalian tidak perlu langsung ke PDF maka tidak perlu dilakukan.
Sekarang CSS tambahan untuk Lihat Laporan :
1. Copy file normalize.min.css dan paper.css ke dalam folder public/dist/css
Silahkan ke view Buku lalu index.php , tambahkan 1 buah link untuk Lihat Laporan Buku
pada bagian class card-header :
Pada Buku.php Controller, tambahkan 2 Method yaitu lihatlaporan dan laporan. (coding
bisa copy dari folder coding)
$pdf->SetFont('Arial','B',10);
$pdf->Cell(85,6,'JUDUL',1);
$pdf->Cell(30,6,'PENERBIT',1);
$pdf->Cell(30,6,'PENGARANG',1);
$pdf->Cell(15,6,'TAHUN',1);
$pdf->Cell(25,6,'KATEGORI',1);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
foreach($data['buku'] as $row) {
$pdf->Cell(85,6,$row['judul'],1);
$pdf->Cell(30,6,$row['penerbit'],1);
$pdf->Cell(30,6,$row['pengarang'],1);
$pdf->Cell(15,6,$row['tahun'],1);
$pdf->Cell(25,6,$row['nama_kategori'],1);
$pdf->Ln();
}
$pdf->Output('D', 'Laporan Buku.pdf', true);
}
Penjelasan :
- Pada kedua method diatas kita masih menggunakan method getAllBuku(); yang
memanggil semua data buku. Kalian bisa mengganti dan membuat method baru misalnya
getBukuByTanggal(); nah tinggal diquery deh maunya seperti apa.
Kalau udah controllernya, kita buat view untuk lihatlaporan dulu, simpan di views/buku
dengan nama lihatlaporan.php (coding bisa dicopy dari folder coding)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Doc 1</title>
color: #333;
padding: 10px;
text-shadow: 1px 1px 1px #fff;
}
</style>
</head>
<!-- Each sheet element should have the class "sheet" -->
<!-- "padding-**mm" is optional: you can set 10, 15, 20 or 25 -->
<section class="sheet padding-15mm">
<h1 class="center" style="text-decoration: underline;margin-top: 20px;"><?= $data['title']
?></h1>
<table class="table">
<thead>
<tr>
<th style="width: 10px">#</th>
<th>Judul</th>
<th>Penerbit</th>
<th>Pengarang</th>
<th>Tahun</th>
<th>Kategori</th>
<th>Harga</th>
</tr>
</thead>
<tbody>
<?php $no=1; ?>
<?php foreach ($data['buku'] as $row) :?>
<tr>
<td><?= $no; ?></td>
<td><?= $row['judul'];?></td>
<td><?= $row['penerbit'];?></td>
<td><?= $row['pengarang'];?></td>
<td><?= $row['tahun'];?></td>
<td><div class="badge badge-warning"><?=
$row['nama_kategori'];?></div></td>
<td><?= $row['harga'];?></td>
</tr>
<?php $no++; endforeach; ?>
</tbody>
</table>
</section>
<script type="text/javascript">
// window.print();
// window.onafterprint = window.close;
</script>
</body>
</html>
Silahkan buka buku indexnya dulu dibrowser lalu bisa langsung dicoba deh :
Bisa langsung print ke printer atau PDF juga lho tinggal CTRL + P pada browser
User ini fungsinya untuk data user yang akan login, jadi harus didaftarkan terlebih dahulu
dimenu ini.
Kali ini saya anggap semua sudah bisa melakukan CRUDS maka Coding dari user ini akan
saya bagikan langsung pada folder coding, silahkan kalian buat :
- User.php (Controller)
- UserModel.php (Model)
- Create, edit, Index (view user)
Silahkan Buat File, Copy & Paste sesuai foldernya masing – masing, jangan lupa buat sebuah
menu baru untuk user pada sidebar.php
Pada user ini passwordnya menggunakan HASH MD5, agar password kita tidak terlihat
sebuah string biasa, melainkan berupa angka dan kode yang diacak. Dan dicontroller proses
simpan dan update juga berbeda karena melakukan pengecekan jika password sama atau tidak.
User.php (Controller)
<?php
exit;
}else{
Flasher::setMessage('Gagal','diupdate','danger');
header('location: '. base_url . '/user');
exit;
}
} else {
Flasher::setMessage('Gagal','password tidak sama.','danger');
header('location: '. base_url . '/user/tambah');
exit;
}
}
}
UserModel.php (Model)
<?php
class UserModel {
return $this->db->rowCount();
}
$this->db->execute();
return $this->db->rowCount();
}
return $this->db->rowCount();
}
$key = $_POST['key'];
$this->db->query("SELECT * FROM " . $this->table . " WHERE nama LIKE :key");
$this->db->bind('key',"%$key%");
return $this->db->resultSet();
}
}
<div class="card">
<div class="card-header">
<h3 class="card-title"><?= $data['title'] ?></h3> <a href="<?= base_url; ?>/user/tambah"
class="btn float-right btn-xs btn btn-primary">Tambah User</a>
</div>
<div class="card-body">
</div>
</div>
</form>
<table class="table table-bordered">
<thead>
<tr>
<th style="width: 10px">#</th>
<th>Nama</th>
<th>Username</th>
<th style="width: 150px">Action</th>
</tr>
</thead>
<tbody>
<?php $no=1; ?>
<?php foreach ($data['user'] as $row) :?>
<tr>
<td><?= $no; ?></td>
<td><?= $row['nama'];?></td>
<td><?= $row['username'];?></td>
<td>
<a href="<?= base_url; ?>/user/edit/<?= $row['id'] ?>" class="badge badge-info
">Edit</a> <a href="<?= base_url; ?>/user/hapus/<?= $row['id'] ?>" class="badge badge-
danger" onclick="return confirm('Hapus data?');">Hapus</a>
</td>
</tr>
<?php $no++; endforeach; ?>
</tbody>
</table>
</div>
<!-- /.card-body -->
<div class="card-footer">
Footer
</div>
<!-- /.card-footer-->
</div>
<!-- /.card -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</section>
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
</div>
<div class="form-group">
<label >Ulangi Password</label>
<input type="password" class="form-control" name="ulangi_password">
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Halaman about hanya menampilkan data profil singkat tentang anda, jadi tidak ada CRUDS
disini. Yang pertama dilakukan yaitu silahkan copy controller dari Home.php, lalu paste dan
ganti nama filenya jadi About.php
Jadi pada folder controllers saat ini ada 5 file :
Nah silahkan sesuaikan coding pada about.php jadi seperti berikut ini :
Lalu kita buat tampilan aboutnya, silahkan buat folder baru dengan nama about didalam
folder app > views, nah didalam folder about, bikin file nama nya index.php
Isi dari index.php :
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1><?= $data['title']; ?></h1>
</div>
</div>
</div><!-- /.container-fluid -->
</section>
<div class="card-footer">
Footer
</div>
<!-- /.card-footer-->
</div>
<!-- /.card -->
</section>
<!-- /.content -->
</div>
<!-- /.content-wrapper -->
Terakhir silahkan link pada sidebar.php tambahkan link yang mengarah pada halaman
about.
Login dan logout ini sangat penting dalam sebuah sistem agar tidak sembarangan orang
bisa masuk, tentunya nanti bisa dikembangkan untuk pencatatan record siapa yang terakhir
update dan siapa yang menambahkan data disuatu table.
2.10.1 Login
Buat file baru dengan nama Login.php simpan didalam folder app > controllers, lalu isi
dengan coding berikut :
<?php
$this->view('login/login', $data);
}
Kalau controllersnya sudah, kita lanjut bikin Model yang menghubungkan form login kita ke
database pada tabel user, pada folder app > models > tambahkan file baru LoginModel.php
<?php
class LoginModel {
$this->db->bind('password', md5($data['password']));
$data = $this->db->single();
return $data;
}
}
Penjelasan :
- Nah disini mengambil data dari prosesLogin tadi, untuk cocokin langsung ke tabel user
lalu mengirimkan data kembali ke prosesLogin
Controllers udah, model login udah, berarti tinggal tampilan loginnya dong hehe nah sudah
saya siapkan silahkan dicopy dari folder coding, buat folder baru nama login didalam folder
views, lalu buat file didalam folder login dengan nama login.php :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Bukita | Login</title>
<!-- Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
</body>
</html>
Lakukan login dengan user yang kalian daftarkan tadi, kalau berhasil akan menuju
halaman Home, kalau gagal yaa kembali ke halaman login ini.
Sekarang kita atur gimana biar halaman home, buku, kategori, dll agar harus login dulu
baru bisa diakses, contohnya kalian sekarang belum login tapi buka halaman buku pasti masih
bisa? Nah harusnya ketika membuka halaman buku, harus login dulu baru bisa terbuka. Caranya?
Tambahkan __construct() disetiap controller
public function __construct()
{
if($_SESSION['session_login'] != 'sudah_login') {
Flasher::setMessage('Login','Tidak ditemukan.','danger');
header('location: '. base_url . '/login');
exit;
}
}
Contohnya pada Buku.php :
Nah lakukan atau buat coding diatas pada semua controller kecuali Login.php
2.10.2 Logout
Login dan Logout ini berpasangan, jadi ketika login kita harus membuat logoutnya juga,
jadi buat file Logout.php didalam controllers
Codingnya :
<?php
class Logout {
public function Logout(){
session_start();
session_destroy();
header('location: '. base_url . '/login');
}
}
Penjelasan :
- Menghapus SESSION login, dan mengembalikan ke halaman login
Untuk link logoutnya, pada header.php didalam folder views > templates > header.php paling
bawah tambahkan link untuk logoutnya seperti berikut :
Kalau saya sih udah berhasil nih hehe Tambahan , silahkan buat file .htaccess simpan pada
folder bukita
Penjelasan :
- Fungsinya agar kita tidak perlu lagi mengakses ke public untuk membuka program kita,
jadi kita hanya ketik localhost/bukita saja dia otomatis masuk ke dalam folder public.
Selesai deh.
Semoga bermanfaat untuk kita semua ya! Saya @herziwp mohon maaf jika terdapat
kesalahan kata maupun penjelasan
Terimakasih.
Pesan :
- Silahkan kreasikan program ini agar logika pemrograman mu semakin terasah
- Usahalah untuk memperbaiki dan menyelesaikan masalah program mu sendiri dengan
google kalau sudah tidak bisa, baru bertanya dengan teman / orang yang bisa
- Cari keyword dengan singat, jelas dan padat, contoh “cara mencari data dengan tanggal
php”
- Selalu tambahkan bahasa pemrograman yang kamu gunakan pada keyword pencarian
seperti dipoint atas
- Belajar untuk memanajemen waktu agar kerja dan kuliahmu seimbang sehingga tidak
tergesa – gesa untuk mengerjakan program.