Modul 8 Praktikum Rek web

Modul Praktikum Rekayasa Web

 

 

Pertemuan ke-8:

PHP dan MySQL

 

 

 

 

 

 

 

Disusun oleh

Dr. Uung Ungkawa, MT

 

 


Modul 8

PHP dan MySQL

 

Tujuan :

  1. Menunjang mata kuliah Rekayasa Web
  2. Mengetahui, mengenal dan memahami Bahasa Pemrograman Sisi server: PHP
  3. Mengetahui dan memahami Pengolahan basisdata dengan PHP dan MySQL.

Jenis Praktikum :

  1. Eksplorasi pemrograman web dengan PHP dan MySQL

Persyaratan :

  1. Praktikan harus menyiapkan terminal (Windows) perintah.
  2. Praktikan harus menyiapkan penyunting teks (text editor). Disrankan menggunakan Eclipse, Visual Studio Code, Netbean, Notepad++.
  3. Praktikan harus menyiapkan browser (Chrome, Firefox) dan Server PHP.
  4. Memahami HTML, CSS, Javascript

Perangkat praktikum :

  1. PC / Notebook

Materi

Modul ini membahas AJAX dengan PHP, aspek pemrograman berorientasi objek pada PHP, dan pemrograman PHP untuk basisdata khususnya dengan MySQL. Modul ini hanya akan membahas beberapa aspek/konsep OOP yang khusus di PHP.

AJAX PHP

Modul Praktikum 5 membicarakan dasar AJAX. Dalam modul ini dibahas contoh AJAX dengan PHP. Dalam contoh ini diperlihatkan bagaimana aplikasi memberi saran terhadap masukan yang diketikkan pengguna. Ketika pengguna mengetikkan huruf a misalnya, aplikasi menampilkan nama orang dengan huruf pertama a. Jika diteruskan dengan mengetikkan n sehingga menjadi an, sistem menampilkan Anna atau Andy jika ada. Jika diteruskan dengan mengetikkan n lagi sehingga menjadi ann, maka sistem menampilkan Anna. Semua dilakukan secara instan tanpa harus muat ulang halaman web. Dalam hal ini aplikasi hanya menganti isi elemen yang dituju (target) saja untuk mengganti isi pada tampilan.

Untuk mengimplementasikan ini, kita membutuhkan komunikasi AJAX dari klien ke server. Ketika klien mengirim huruf a melalui metode misalnya GET, nilai properti readyState berubah dari 0 ke 1 jika koneksi terhubung antara klien dan server, kemudian nilai ini berubah ke 2 jika rekues diterima dan berubah ke 3 jika rekues ditangani dan berubah ke 4 jika rekues selesai ditangani dan respon siap dikirim ke klien. Setiap perubahan nilai pada readyState menyebabkan fungsi yang didefinisikan pada properti onreadystatechange dieksekusi.

Untuk contoh di atas, jika huruf a dikirim ke server, di server dilakukan pencarian apakah huruf a ini awalan dari nama seseorang yang ada di array nama. Jika ada, tampilkan nama ini. Demikian pula jika yang dikirim lebih dari satu huruf. Setiap kali pengguna mengetikkan huruf, data dikirim ke server. Program untuk implementasi hal ini harus dua bagian: yang pertama program JS di sisi klien yang mengirim rekues berupa (deretan) huruf ke server dan yang kedua program PHP yang menerima rekues dan mengolahnya.

<!DOCTYPE html>

<html>

<body>

 

<h3>Start typing a name in the input field below:</h3>

<p>Suggestions: <span id="txtHint"></span></p>

<p>First name: <input type="text" id="txt1" onkeyup="showHint(this.value)"></p>

 

<script>

function showHint(str) { //setiap kali pengguna mengetik, panggil fungsi ini

var xhttp;

if (str.length == 0) { //jika masih kosong, kembali

document.getElementById("txtHint").innerHTML = "";

return;

}

xhttp = new XMLHttpRequest(); //buat objek XHR

xhttp.onreadystatechange = function() { //setiap kali readyState berubah nilai, panggil fungsi ini

if (this.readyState == 4 && this.status == 200) { //jika respon sudah siap

document.getElementById("txtHint").innerHTML = this.responseText;

}

};

//kirim objek XHR, minta untuk eksekusi gethint.php, keluarannya kirim ke klien

xhttp.open("GET", "gethint.php?q="+str, true);

xhttp.send();

}

</script>

 

</body>

</html>

Berikut ini file gethint.php

<?php

// Array with names

$a[] = "Anna";

$a[] = "Brittany";

$a[] = "Cinderella";

$a[] = "Diana";

$a[] = "Eva";

$a[] = "Fiona";

$a[] = "Gunda";

$a[] = "Hege";

$a[] = "Inga";

$a[] = "Johanna";

$a[] = "Kitty";

$a[] = "Linda";

$a[] = "Nina";

$a[] = "Ophelia";

$a[] = "Petunia";

$a[] = "Amanda";

$a[] = "Raquel";

$a[] = "Cindy";

$a[] = "Doris";

$a[] = "Eve";

$a[] = "Evita";

$a[] = "Sunniva";

$a[] = "Tove";

$a[] = "Unni";

$a[] = "Violet";

$a[] = "Liza";

$a[] = "Elizabeth";

$a[] = "Ellen";

$a[] = "Wenche";

$a[] = "Vicky";

 

// get the q parameter from URL

$q = $_REQUEST["q"];

 

$hint = "";

 

// lookup all hints from array if $q is different from ""

if ($q !== "") {

$q = strtolower($q);

$len=strlen($q);

foreach($a as $name) {

if (stristr($q, substr($name, 0, $len))) {

if ($hint === "") {

$hint = $name;

} else {

$hint .= ", $name";

}

}

}

}

 

// Output "no suggestion" if no hint was found or output correct values

echo $hint === "" ? "no suggestion" : $hint;

?>

PHP OOP

Selain sebagai bahasa prosedural, PHP bisa sebagai bahasa berorientasi objek (Object-Oriented Programming, OOP). Dalam bahas prosedural, kita membuat prosedur, fungsi yang melakukan operasi pada data sedangkan dalam OOP kita membuat objek yang mengandung data dan fungsi. PHP bisa ditulis dengan corak prosedural maupun OOP: definisi kelas, buat objek, akses metode dan properti. OOP diyakini lebih cepat dan lebih mudah untuk dieksekusi. Dalam OOP, variabel disebut properti dan fungsi disebut metode.

Mendefinisikan Kelas di PHP

Kelas di PHP didefinisikan dengan kata kunci class, diiuti nama kelas dan sepasang tanda kurung kurawal yang membatasi definisi kelas. Semua properti dan metode didefinisikan di antar tanda kurung kurawal tersebut. Perhatikan bahwa untuk mengakses properti dan metode digunakan tanda panah (->):

<!DOCTYPE html>

<html>

<body>

 

<?php

class Buah {

// Properti

public $nama;

public $warna;

 

// Methods

function set_nama($nama) {

$this->nama = $nama;

}

function get_nama() {

return $this->nama;

}

}

?>

</body>

</html>

Konstruktor dan Destruktor

Konstruktor dalam PHP berupa metode __construct() dan akan dipanggil jika dibuat objek. Perhatikan bahwa fungsi ini diawali dua garis bawah (__). Sebaliknya ada destruktor yaitu metode untuk menghapus objek atau skrip berhenti atau keluar. Destruktor berupa fungsi __destruct() yang akan dipanggil jika skrp berakhir. Seperti konstruktor, destruktor diawli dua garis bawah.

Modifier Akses

Dalam PHP ada tiga modifier akses:

public: umum: properti dan metode bisa diakses dari mana saja.

protected: hanya bisa diakses dalam kelas, atau dalam kelas turunan

provate: hanya bisa diakses di dalam kelas saja.

Interface vs Abstract class

Interface serupa dengan kelas abstrak. Perbedaannya:

Interface tidak memiliki properti sedangkan kelas abstrak bisa memiliki properti.

Semua metode interface harus public sedangkan metode kelas abstrak bisa public atau protected.

Semua metode di dalam interface adalah abstrak sehingga tidak diimplementasikan di interface dan tidak memerlukan kata kunci abstract.

Kelas bisa mengimplementasikan interface selagi mewarisi kelas lain pada saat yang sama.

Traits

PHP hanya mendukung pewarisan tunggal (single inheritance): kelas hanya bisa mewarisi dari satu kelas. Bagaimana jika kelas ingin mewarisi beberapa perilaku (metode)? Di sinilah ada traits yang memungkinkan kelas mewarisi beberapa kelas (yang disebut traits):

<?php

trait t1 {

public function msg1() {

echo "OOP is fun! ";

}

}

 

trait t2 {

public function msg2() {

echo "OOP reduces code duplication!";

}

}

 

class A {

use t1;

}

 

class B {

use t1, t2;

}

 

$obj = new A();

$obj->msg1();

echo "<br>";

 

 

$obj2 = new B();

$obj2->msg1();

$obj2->msg2();

?>

Namespaces

Kita mungkin membutuhkan pengelompokan beberapa kelas untuk membatasi dan membagi ruang atau rentang pekerjaan. Atau mungkin juga kita harus membuat nama kelas yang sama. Untuk itulah dalam PHP bisa dibuat namespace.

namespace raungnama;

Nanti nama sesuatu akan diakses dan dikenal dengan nama namespacenya. Jadi untuk mengakses kelas di luar namespacenya, harus menggunakan nama namespacenya:

$tabel = new app\Tabel()

Namespace juga bisa bersarang (nested): namespace di dalam namespace:

namespace Code\Html;

Kita bisa juga mendefinisikan nama lain (alias) dari namespace untuk menyingkat:

use Html as H;

$tabel = new H\Tabel();

MySQL

PHP memberikan fasilitas lengkap untuk menangani basis data. Salah satu sistem basisdata yang populer untuk PHP adalah MySQL. Data di dalam MySQL disimpan di dalam tabel: koleksi data yang berkaitan yang terdiri dari baris dan kolom. Beberapa hal tentang MySQL:

Banyak digunakan di web

Dijalankan di server

Ideal untuk aplikasi kecil dan besar

Cepat, handal dan mudah digunakan

Menggunakan SQL standar

Cocok untuk banyak platform (Operating system)

Gratis untuk diunduh dan digunakan

Dikembangkan, didistribusikan dan didukung oleh Oracle Corporation

Nama MySQL diambil dari nama putri salah satu pendiri Monty Widenius: My

 

PHP Connect

PHP dapat menggunakan MySQL melalui koneksi dengan MySQLi (improved) atau PDO (PHP Data Objects). Dengan PDO PHP dapat menggunakan 12 macam sistem basis data sedangkan dengan MySQLi hanya untuk MySQL saja. Jika sekiranya projek akan mengganti basis data lain, lebih baik menggunakan PDO. Dengan PDO hanya sedikit mengganti koneksi dan beberapa kueri sedang jika menggunakan MySQLi harus mengubah banyak kode dan kueri.

PDO dan MySQLi berorientasi objek tetapi MySQLi bisa digunakan dalam prosedural. Keduanya mendukung Prepared Statement yang melindungi aplikasi dari SQL injection dan sangat penting dalam keamanan aplikasi web. Berikut ini cara membuka koneksi ke MySQL bercorak Objek:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

 

// Create connection

$conn = new mysqli($servername, $username, $password);

 

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

echo "Connected successfully";

?>

Untuk menutup koneksi, gunakan perintah berikut (bercorak objek):

$conn->close();

Untuk corak prosedural dan penggunaan PDO, lihat tutorial online.

Query

Selanjutnya untuk dapat membuat basisdata, tabel, mengisi data, membaca data, mengubah dan menghapus, kita menggunakan query. Query dimasukkan sebagai parameter di koneksi. Ambil contoh, membuat basis data. Untuk membuat basisdata, gunakan statemen CREATE DATABASE yang dimasukkan ke dalam string kueri. Berikut contoh membuat basisdata myDB:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

 

// Create connection

$conn = new mysqli($servername, $username, $password);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

 

// Create database

$sql = "CREATE DATABASE myDB";

if ($conn->query($sql) === TRUE) {

echo "Database created successfully";

} else {

echo "Error creating database: " . $conn->error;

}

 

$conn->close();

?>

Contoh lain, membuat tabel. Untuk membuat tabel, gunakan perintah CREATE TABLE sebagai berikut:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";

 

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

 

// sql to create table

$sql = "CREATE TABLE MyGuests (

id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

firstname VARCHAR(30) NOT NULL,

lastname VARCHAR(30) NOT NULL,

email VARCHAR(50),

reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

)";

 

if ($conn->query($sql) === TRUE) {

echo "Table MyGuests created successfully";

} else {

echo "Error creating table: " . $conn->error;

}

 

$conn->close();

?>

 

Prepared Statement

Jika kita akan melakukan pekerjaan yang mirip (sama) dalam basisdata secara berulang, sebaiknya menggunakan prepared statement. Prepared statemen sebenarnya template (pola) kueri yang dikirm ke basisdata. Misal, kita akan menyisipkan data secara berulang, maka kita membuat template INSERT INTO dengan nilai yang dikosongkan dulu. Nanti kita bisa mengirim datanya menyusul secara berulang, contoh INSERT INTO mahasiswa VALUES (?, ?, ?, ?).

Mesin basisdata akan memproses, mengkompilasi dan menyimpannya tanpa eksekusi. Nanti sistem akan memberikan data (bind) dan template statemen tadi baru dieksekusi dengan data yang diterima. Proses eksekusi bisa terjadi beberapa kali jika data baru sampai ke sistem. Yang penting urutan data harus sesuai template.

Dengan cara ini, parsing statemen hanya terjadi sekali dan berikutnya hanya mengikatkan data saja (bind) sehingga mengurangi bandwidth server. Cara ini juga bisa mencegah SQL injection. Data yang dikirim harus sesuai dengan template (pola) yang disimpan. SQL injection tidak bisa terjadi jika tidak sesuai pola. Contoh:

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";

 

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

 

// Check connection

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

 

// prepare and bind

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");

$stmt->bind_param("sss", $firstname, $lastname, $email);

 

// set parameters and execute

$firstname = "John";

$lastname = "Doe";

$email = "john@example.com";

$stmt->execute();

 

$firstname = "Mary";

$lastname = "Moe";

$email = "mary@example.com";

$stmt->execute();

 

$firstname = "Julie";

$lastname = "Dooley";

$email = "julie@example.com";

$stmt->execute();

 

echo "New records created successfully";

 

$stmt->close();

$conn->close();

?>

 

Statemen $stmt->bind_param("sss", $firstname, $lastname, $email); menunjukkan cara mengikat data. Argumen “sss” menujukkan jenis data untuk ketiga variabel (kolom): ketiganya string. Argumen tadi bisa bernilai:

s = untuk string

i = integer

d = double

b = blob

 

Latihan

Eksplorasi PHPMyadmin

Jalankan XAMPP atau Laragon

Jalankan server Apache di XAMPP atau di Laragon.

Untuk Laragon, jika belum memiliki modul PHPMyAdmin, install modulnya seperti ini.

Buka browser, ketik di address bar: localhost/phpmyadmin

Buatkan basis data prak8_pma.

Buat tabel mahasiswa di basis data prak8_pma, dengan kolom terserah anda.

Isi data di tabel mahasiswa.

Browse

Tugas Akhir

  • Membuat aplikasi CRUD (create, read, update, delete) basisdata dengan PHP:

Buatkan program PHP yang dapat melakukan CRUD basis data

Buatkan basis data prak8_php

Buatkan form yang mengandung isian (fields) nrp (primary key), nama, no kontak, email dan alamat.

Buatkan cara untuk validasi: nama: wajib diisi dan tidak boleh mengandung angka

Isian nrp hanya angka dan tanda minus (-) dengan format seperti 15-2003-001

Isian no kontak: harus angka dan boleh dipisah dengan spasi atau tanda minus dan boleh diawali tanda plus, seperti +62 812 1443 xxxx

Alamat email harus berformat: unyil@gmail.com atau unyil@gmail.co.id.

Proses form dan tampilkan data dari isian form tersebut.

Masukkan data ke dalam tabel mahasiswa.

Tampilkan data mahasiswa pada tabel.

Sertakan tombol edit pada tiap baris untuk mengedit data mahasiswa

Sertakan juga tombol del pada tiap baris untuk menghapus data mahasiswa.

  • Implementasikan pencari data dari basisdata dengan AJAX:

Buatkan aplikasi live search dari basisdata yang dibuat di tugas 1.

Tutorial live search di w3schools.com mencari data dari file XML. Yang harus anda kerjakan adalah membuat live search dari basisdta di tugas 1.

Pertama sekali aplikasi dijalankan, tampilkan semua data mahasiswa dalam tabel.

Sediakan isian form untuk mengetikkan data yang dicari. Begitu pengguna mengetikkan sesuatu, isi tabel berubah hanya menampilkan data yang sesuai dengan yang dicari.

Makin banyak huruf diketikkan di isian form, tampilan makin sedikit karena aplikasi memperkecil jumlah data yang dicari.


Last modified: Sunday, 22 November 2020, 10:15 PM