Rabu, 02 November 2016

Membuat CRUD menggunakan PDO di PHP

Assalamualaikum Wr. Wb.

Saya akan berbagi mengenai apa itu PDO dan CRUD. Apa sih itu PDO ?? PDO (PHP Data Objects) adalah interface universal yang disediakan PHP untuk “berkomunikasi” dengan database server. Maksud istilah “interfaceuniversal” disini adalah bahwa PDO tidak terikat dengan aplikasi database tertentu. Apabila saat ini kita menggunakan database MySQL dan dikemudian hari ingin bermigrasi menggunakan PostgreSQL, kita hanya tinggal mengganti cara pemanggilan awal PDO dan seluruh kode program yang ada bisa langsung digunakan untuk database baru.

Secara teknis, apabila meggunakan mysql atau mysqli extension, PHP langsung berhubungan dengan MySQL Server, tetapi jika menggunakan PDO, ia tidak berhubungan langsung dengan database, tetapi hanya sebagai "interface"

Setelah kita mengetahui apa itu crud, sekarang kita masuk ke inti dari pembahasan kita yang satu ini, yaitu cara CRUD menggunakan PDO.

Berikut cara CRUD menggunakan PDO :
1. Pertama buatlah database terlebih dahulu dengan nama crud_oop di phpmyadmin.
2. Setelah membuat database, buatlah tabel. 

DROP TABLE IF EXISTS `mahasiswa`;
CREATE TABLE `mahasiswa` (
 `id` int(11) NOT NULL,
 `nim` varchar(20) NOT NULL,
 `nama` varchar(30) NOT NULL,
 `tempat_lahir` varchar(30) NOT NULL,
 `tanggal_lahir` date NOT NULL,
 `jenis_kelamin` enum('Laki-laki','Perempuan') NOT NULL,
 `agama` varchar(20) NOT NULL,
 `alamat` varchar(100) NOT NULL,
 `no_telepon` varchar(12) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

3. Jika sudah membuat table, maka buatlah field-field dari table tersebut. Masukkan Script dibawah ini :


INSERT INTO `mahasiswa` (`id`, `nim`, `nama`, `tempat_lahir`, `tanggal_lahir`, `jenis_kelamin`, `agama`, `alamat`, `no_telepon`) VALUES

(1, '16001', 'Danang Kusuma', 'Bandar Lampung', '1990-02-01', 'Laki-laki', 'Islam', 'Jalan Gatot Subroto No. 10, Bandar Lampung', '085758857775'),
(2, '16002', 'Isyana Sarasvati', 'Jakarta', '1993-05-02', 'Perempuan', 'Islam', 'Jalan Pagar Alam No. 15, Kedaton, Bandar Lampung', '085789892909'),
(3, '16003', 'Indra Styawantoro', 'Purbolinggo', '1991-05-15', 'Laki-laki', 'Islam', 'Perum Griya Gedung Meneng Blok C2 No. 2, Rajabasa, Bandar Lampung', '085669919769'),
(4, '16004', 'Maudy Ayunda', 'Jakarta', '1994-12-19', 'Perempuan', 'Islam', 'Jalan Radin Intan No. 77, Tanjung Karang, Bandar Lampung', '089977955772'),
(5, '16005', 'Valentino Rossi', 'Metro', '1979-03-16', 'Laki-laki', 'Islam', 'Jalan Zaenal Abidin Pagaralam No. 1, Bandar Lampung', '081922919212'),
(6, '16006', 'Raisa Andriana', 'Jakarta', '1990-06-06', 'Perempuan', 'Islam', 'Jalan Yos Sudarso No. 135, Bandar Lampung', '081388955767'),
(7, '16007', 'Cristiano Ronaldo', 'Teluk Betung', '1986-02-25', 'Laki-laki', 'Islam', 'Jalan Teuku Umar No. 52, Kedaton Bandar Lampung', '081269962201'),
(8, '16008', 'M Muzaqi', '', '0000-00-00', '', '', '', ''),
(9, '099023022', 'Nia Ramadhani', 'Jakarta', '1996-02-01', 'Perempuan', 'Islam', 'Cengkareng Barat', '12345678'),
(10, '109209381', 'Frienly Faisal', '', '0000-00-00', 'Laki-laki', '', '', '');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `mahasiswa`
--
ALTER TABLE `mahasiswa`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `mahasiswa`
--
ALTER TABLE `mahasiswa`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

<strong>
</strong>

4. Setelah selesai membuat database dan tabelnya, buat folder dengan nama pdo.

5. Buat file pada text editor, contoh text editor yang saya pakai adalah Notepad++. yang beri nama index.php kemudian bisa ketik atau paste source code dibawah ini:


<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="UTF-8">
<title>CRUD PDO</title>
<!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
 </head>

 <body>

<div class="container">

<h2>Tambah Mahasiswa Baru</h2>

 <form action="index.php" method="POST" class="form-group row">
 NIM : <input type="text" name="nim" required="required" class="form-control" >

 Nama : <input type="text" name="nama" required="required" class="form-control">

 Tempat Lahir : <input type="text" name="tempat_lahir" class="form-control">

 Tanggal Lahir : <input type="text" name="tanggal_lahir" class="form-control">

 Jenis Kelamin : <input type="text" name="jenis_kelamin" class="form-control">

 Agama : <input type="text" name="agama" class="form-control">

 No. Telepon : <input type="text" name="no_telepon" class="form-control">

 Alamat : <textarea name="alamat" class="form-control"></textarea>

 <input type="submit" name="tambahMhs" value="Tambah" class="btn btn-success">
 <input type="reset" value="Batal" class="btn btn-warning">
 </form>
</div>

 </body>
</html>
<?php
 require('library.php');
 if(isset($_POST['tambahMhs'])){
 $nim = $_POST['nim'];
 $nama = $_POST['nama'];
 $tempat_lahir=$_POST['tempat_lahir'];
 $tanggal_lahir=$_POST['tanggal_lahir'];
 $jenis_kelamin=$_POST['jenis_kelamin'];
 $agama=$_POST['agama'];
 $alamat=$_POST['alamat'];
 $no_telepon=$_POST['no_telepon'];

 $Lib = new Library();
 $add = $Lib->tambahMhs($nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon);
 if($add == "Success"){
 header('Location: List.php');
 }
 }
  
?>

6. Buat file baru dengan nama edit.php. Kemudian ketik atau paste source code dibawah ini :

<?php
require('library.php');
  
if(isset($_GET['id'])){
$Lib = new Library();
$id = $Lib->editMhs($_GET['id']);
$edit = $id->fetch(PDO::FETCH_OBJ);
echo '
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Edit Data Mahasiswa</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
 <!-- Latest compiled and minified JavaScript -->
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<h2>Ubah Data Mahasiswa</h2>
<form action="edit.php" method="POST" class="form-group">
NIM : <input type="text" name="nim" value="'.$edit->nim.'" required="required" class="form-control">

Nama : <input type="text" name="nama" value="'.$edit->nama.'" class="form-control">

Tempat Lahir : <input type="text" value="'.$edit->nama.'" name="tempat_lahir" class="form-control">

Tanggal Lahir : <input type="text" value="'.$edit->tanggal_lahir.'" name="tanggal_lahir" class="form-control">

Jenis Kelamin : <input type="text" value="'.$edit->jenis_kelamin.'" name="jenis_kelamin" class="form-control">

Agama : <input type="text" name="agama" value="'.$edit->agama.'" class="form-control">

No. Telepon : <input type="text" value="'.$edit->no_telepon.'" name="no_telepon" class="form-control">

Alamat : <textarea name="alamat" class="form-control">'.$edit->alamat.'</textarea>



<input type="submit" name="updates" value="Update" class="btn btn-info">
<input type="reset" value="Batal" class="btn btn-warning">
</form>
</div>
</body>
</html>
';
}

if(isset($_POST['updateMhs'])){
$nim = $_POST['nim'];
$nama = $_POST['nama'];
$tempat_lahir=$_POST['tempat_lahir'];
$tanggal_lahir=$_POST['tanggal_lahir'];
$jenis_kelamin=$_POST['jenis_kelamin'];
$agama=$_POST['agama'];
$alamat=$_POST['alamat'];
$no_telepon=$_POST['no_telepon'];

$Lib = new Library();
$upd = $Lib->updateMhs($id, $nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon);
if($upd == "Success"){
header('Location: list.php');
}
}

?>

7. Buat file baru dengan nama library.php. Kemudian ketik atau paste source code dibawah ini :

<?php
class Library{
public function __construct(){
$this->db = new PDO('mysql:host=localhost;dbname=crud_oop','root','');
}
public function tambahMhs($nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon){
$sql = "INSERT INTO mahasiswa (nim, nama, tempat_lahir, tanggal_lahir, jenis_kelamin, agama, alamat, no_telepon) VALUES('$nim', '$nama', '$tempat_lahir', '$tanggal_lahir', '$jenis_kelamin', '$agama', '$alamat', '$no_telepon')";
$query = $this->db->query($sql);
if(!$query){
return "Failed";
}
else{
return "Success";
}
}
public function editMhs($id){
$sql = "SELECT * FROM mahasiswa";
$query = $this->db->query($sql);
return $query;
}
public function updateMhs($nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon){
$sql = "UPDATE mahasiswa SET nim='$nim', nama='$nama', tempat_lahir='$tempat_lahir', tanggal_lahir='$tanggal_lahir', jenis_kelamin='$jenis_kelamin', agama='$agama', alamat='$alamat', no_telepon='$no_telepon' WHERE nim='$nim'";
$query = $this->db->query($sql);
if(!$query){
return "Failed";
}
else{
return "Success";
}
}

public function showmahasiswa(){
$sql = "SELECT * FROM mahasiswa order by id desc";
$query = $this->db->query($sql);
return $query;
}
public function deleteMhs($nim){
$sql = "DELETE FROM mahasiswa WHERE nim='$nim'";
$query = $this->db->query($sql);
}
}
?>

8. Dan yang terakhir adalah buat file baru dengan nama list.php.  Kemudian ketik atau paste source code dibawah ini :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>List Mahasiswa</title>
<!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</head>

<body>
<div class="container">
<h2>Daftar Nama Mahasiswa</h2>
<table class="table">
<tr>
<td>NIM</td>
<td>Nama</td>
<td>Jenis Kelamin</td>
<td>Alamat</td>
<td>Edit</td>
<td>Delete</td>
</tr>
<?php
require("library.php");
$Lib = new Library();
$show = $Lib->showmahasiswa();
while($data = $show->fetch(PDO::FETCH_OBJ)){
echo "
<tr>
<td>$data->nim</td>
<td>$data->nama</td>
<td>$data->jenis_kelamin</td>
<td>$data->alamat</td>
<td><a class='btn btn-info' href='edit.php?nim=$data->id'>Edit</td>
<td><a class='btn btn-danger' href='list.php?delete=$data->nim'>Delete</a></td>
</tr>
";
};
?></table>
<a href="index.php" class="btn btn-success">Tambah Mahasiswa Baru</a>
</div>
</body>
</html>

<?php
if(isset($_GET['delete'])){
$del = $Lib->deleteMhs($_GET['delete']);

}
?>

9. Setelah mengetik/mempaste semua source code diatas. Kemudian panggil file index.php di web browser contohnya web browser chrome.
Ketikkan localhost/pdo/index.php maka akan muncul tampilan seperti ini :


10. Kemudian kita inputkan data mahasiswa baru, lalu klik button “Tambah”.



11. Setelah menambahkan data, selanjutnya akan menuju tampilan list.php. Untuk mengedit data mahasiswa, klik button “Edit” seperti yang dibawah ini:


12. Setelah klik button “Edit”, namun tampilannya kosong seperti yang dibawah ini :


Mengapa tampilan kosong? karena ada kesalahan pada source code yang sudah dicopynya tadi. Untuk mengatasi masalah seperti  ini, saya akan memberikan cara mengatasinya. Langsung saja kita lihat file List.php baris 35

<td><a class='btn btn-info' href='edit.php?nim=$data->id'>Edit</td>

diubah menjadi seperti dibawah ini:

<td><a class='btn btn-info' href='edit.php?id=$data->id'>Edit</td>

Kemudian kita lihat juga file Edit.php baris 24

Tempat Lahir : <input type="text" value="'.$edit->nama.'" name="tempat_lahir"

diubah menjadi :

Tempat Lahir : <input type="text" value="'.$edit->tempat_lahir.'

Setelah file Edit.php baris 24 tadi sudah dirubah, maka akan muncul tampilan seperti dibawah ini :

Setelah muncul tampilan diatas, silahkan ubah data misalkan pada Alamat yang akan dirubah, kemudian klik Button “Update”. Namun ada kesalahan lagi apabila di klik button “update” masih belum mau mengupdate datanya. Cara mengatasinya adalah kembali buka file Edit.php baris 32 dirubah yang tadinya :


<input type="submit" name="updates" value="Update" class="btn btn-info">


dirubah menjadi :

<input type="submit" name="updateMhs" value="Update" class="btn btn-info">


Kemudian pada baris 52 samakan parameter di file edit.php dengan library.php supaya tidak error. Berikut source code baris 52 pada file edit.php :


$upd = $Lib->updateMhs($id, $nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon);

dirubah supaya sama dengan parameter pada file library.php menjadi:

$upd = $Lib->updateMhs($nim, $nama, $tempat_lahir, $tanggal_lahir, $jenis_kelamin, $agama, $alamat, $no_telepon);

Setelah menyamakan parameter di file edit.php baris 52 coba refresh web browsernya. Maka akan muncul tampilan seperti dibawah :



Kemudian klik button “Delete” untuk menghapus data yang akan dihapus. Tetapi datanya tidak bisa dihapus, cara mengatasinya adalah buka file list.phppada setelah baris 48 tambahkan source code berikut :

header('Location: list.php');

fungsi source code teakhir itu adalah supaya bisa menghapus data. Selanjutnya kita mencoba refresh kembali web browsernya kini sudah tidak ada lagi kesalahan pada list mahasiswa.


Demikian, secara singkat saya berikan langkah-langkah untuk membuat CRUD menggunakan PDO di PHP. Mohon maaf apabila banyak kesalahan dalam penulisan, semoga bermanfaat :)
Terimakasih. 
Wassalamu'alaikum Wr.Wb .