Wavy Tail

Minggu, 28 April 2019

PENDAHULUAN "Update Data dengan PHP - MySQL"


Proses update suatu data dengan menggunakan script PHP dan MySQL biasanya memiliki mekanisme sebagai berikut:

1.      Tampilkan list data terlebih dahulu

2.      Buat sebuah link pada setiap baris data yang menuju proses update. Link tersebut memuat sebuah parameter yang di dalamnya terdapat value yang nantinya digunakan sebagai acuan dalam proses update datanya.

3.      Selanjutnya bila link tersebut diklik akan muncul form berisi data yang akan diedit.


Dalam melakukan proses update data, pada prinsipnya adalah menjalankan query update pada SQL nya.

UPDATE namaTabel SET namafield = value WHERE …

Baiklah… kita langsung saja mempraktekkan proses update data. Sebagai contoh, kita akan mengupdate data mahasiswa, dimana tabel untuk menyimpan data mahasiswanya berbentuk seperti di bawah ini

nim
varchar(5)
primary key
nama
varchar(30)

alamat
text

sex
varchar(1)

tgllahir
date


Sebagai contoh misalkan kita telah mempunyai data awal sebagai berikut

NIM
NAMA
ALAMAT
SEX
TGLLAHIR
M0001
A
SOLO
L
1979-10-20
M0002
B
JAKARTA
L
1982-09-10
M0003
C
BANDUNG
P
1980-11-07

Catatan: Untuk membuat data awal Anda bisa mengisikannya langsung ke MySQL dengan phpMyAdmin atau membuat script PHP untuk memasukkan datanya.



Sesuai dengan mekanisme di atas, maka langkah pertama kita buat terlebih dahulu script untuk menampilkan list datanya. Dalam script list ini, data akan disajikan dalam bentuk tabel dengan 6 buah kolom. Lima kolom pertama untuk menampilkan data semua fieldnya, sedangkan kolom ke-6 untuk meletakkan link untuk editnya.

list.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

// query SQL untuk memunculkan semua mahasiswa

$query = "SELECT * FROM mhs";

$hasil = mysql_query($query);

echo "<table border='1'>";

echo "<tr><td>NIM</td>

<td>Nama Mahasiswa</td>
<td>Alamat</td>

<td>Sex</td>

<td>Tgl Lahir</td>

<td>Action</td></tr>";
while ($data = mysql_fetch_array($hasil))

{

echo "<tr><td>".$data['nim']."</td>

<td>".$data['nama']."</td>
<td>".$data['alamat']."</td>

<td>".$data['sex']."</td>

<td>".$data['tgllahir']."</td>

<td>Edit</td></tr>";

}

echo "</table>";

?>


Hasil dari script di atas akan menghasilkan tampilan sebagai berikut:
Selanjutnya, bagaimana bentuk link editnya? Link edit misalkan kita buat sebagai berikut




Dalam link edit di atas, link akan diarahkan ke script edit.php yang nantinya akan memunculkan form untuk keperluan edit data. Di dalam link tersebut terdapat parameter nim yang nantinya digunakan sebagai acuan mahasiswa manakah yang datanya akan diedit. Sebagai contoh, misalkan akan diedit mahasiswa bernim ‘M0001 maka linknya akan berbentuk


OK.. sekarang kita modifikasi sedikit script list.php di atas untuk memunculkan link editnya.

list.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

// query SQL untuk memunculkan semua mahasiswa

$query = "SELECT * FROM mhs";

$hasil = mysql_query($query);

echo "<table border='1'>";

echo "<tr><td>NIM</td>
<td>Nama Mahasiswa</td>

<td>Alamat</td>

<td>Sex</td>

<td>Tgl Lahir</td>
<td>Action</td></tr>";

while ($data = mysql_fetch_array($hasil))

{

echo "<tr><td>".$data['nim']."</td>
<td>".$data['nama']."</td>

<td>".$data['alamat']."</td>

<td>".$data['sex']."</td>

<td>".$data['tgllahir']."</td>
<td><a href='edit.php?nim=".$data['nim']."'>Edit</a></td></tr>";

}

echo "</table>";

?>

Langkah selanjutnya kita buat script edit.php yang nantinya akan memunculkan form edit sekaligus data mahasiswa yang akan diedit. Mungkin yang menjadi pertanyaan adalah bagaimana cara memunculkan data mahasiswa yang akan diedit? Ya… jawabnya adalah dengan menggunakan query SELECT dengan nim sebagai syaratnya. Dalam hal in nim yang ada dalam link edit lah yang nantinya akan digunakan sebagai syarat.

SELECT * FROM mhs WHERE nim = …;

OK… berikut ini adalah script edit.php untuk memunculkan form dan data yang akan diedit.


edit.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

$nim = $_GET['nim'];

$query = "SELECT * FROM mhs WHERE nim = '$nim'"; $hasil = mysql_query($query);

$data = mysql_fetch_array($hasil);

echo "<form method='post' action='update.php'>"; echo "<table>";

echo "<tr><td>NIM</td><td>:</td>

<td><input type='text' name='nim' value='".$data['nim']."'></td></tr>"; echo "<tr><td>Nama Mahasiswa</td><td>:</td>

<td><input type='text' name='nama' value='".$data['nama']."'></td></tr>"; echo "<tr><td>Alamat</td><td>:</td>

<td><textarea name='alamat'>".$data['alamat']."</textarea></td></tr>"; echo "<tr><td>Sex</td><td>:</td>

<td><input type='radio' name='sex' value='L'> Laki-Laki


<input type='radio' name='sex' value='P'> Perempuan</td></tr>"; echo "<tr><td>Tgl Lahir</td><td>:</td><td>

<select name='tgl'>";

for ($i=1; $i<=31; $i++)
{

echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>

<select name='bln'>";

for ($i=1; $i<=12; $i++)

{

echo "<option value='".$i."'>".$i."</option>";
}

echo "</select>

<select name='thn'>";

for ($i=1980; $i<=1997; $i++)
{

echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>
</td></tr>";

echo "</table>";

echo "<input type='submit' name='submit' value='Submit'>"; echo "</form>";

?>


Catatan:

Untuk keperluan edit data nim, script di atas menggunakan komponen textbox.

Demikian pula edit data nama mahasiswa.

Sedangkan untuk alamat, script di atas menggunakan komponen textarea.

Untuk edit jenis kelamin, kita menggunakan komponen radiobutton

Untuk edit tanggal lahir mahasiswa, kita menggunakan 3 komponen combobox yang masing-masing digunakan untuk tanggal, bulan dan tahun. Option dari masing-masing combobox digenerate otomatis dengan looping FOR.

Hasil tampilan dari script di atas ketika digunakan untuk mengedit data mahasiswa bernim ‘M0001’ adalah

Bila kita perhatikan tampilan script edit di atas, maka untuk edit jenis kelamin masih belum berfungsi. Seharusnya karena data awal mahasiswa bernim ‘M0001’ adalah berjenis kelamin ‘Laki-laki’ maka radiobutton Laki-laki terpilih (checked). Demikian pula bila jenis kelaminnya adalah Perempuan. Lantas.. bagaimana caranya mewujudkan ha ini? OK.. caranya adalah dengan menggunakan konsep IF.

Perhatikan bagian script dari edit.php di bawah ini:

echo "<tr><td>Sex</td><td>:</td>
<td><input type='radio' name='sex' value='L'> Laki-Laki

<input type='radio' name='sex' value='P'> Perempuan</td></tr>";

Nah… kita akan memodifikasi bagian script di atas menjadi seperti di bawah ini:

echo "<tr><td>Sex</td><td>:</td><td>”;

if ($data['sex'] == ”L”)

echo ”<input type='radio' name='sex' value='L' checked> Laki-Laki <input type='radio' name='sex' value='P'> Perempuan”;

else if ($data['sex'] == ”P”)

echo ”<input type='radio' name='sex' value='L'> Laki-Laki

<input type='radio' name='sex' value='P' checked> Perempuan”;

echo "</td></tr>";

Konsep dari ide script modifikasi di atas adalah jika data jenis kelamin mahasiswa adalah laki-laki (L) maka komponen radiobutton laki-laki akan dichecked. Demikian pula jika perempuan.

Setelah bagian script edit jenis kelamin diedit maka hasilnya adalah
Simpel bukan idenya?

OK… next… kita perhatikan bagian edit tanggal lahir. Dalam tampilan script yang telah kita buat di atas, seharusnya tanggal lahir menyesuaikan data tanggal lahir awal sebelum diedit.

Untuk mewujudkan hal ini, pada dasarnya konsep atau idenya sama dengan jenis kelamin di atas yaitu menggunakan IF. Namun… yang menjadi masalah bagaimana caranya memecah tanggal supaya ketiga komponen combobox yang ada dapat membaca tanggal, bulan dan tahun.

OK solusi untuk memecah tanggal, pernah kita bahas sebelumnya yaitu dengan memanfaatkan function explode().

Berikut ini script edit.php yang telah dimodifikasi untuk edit tanggal lahirnya

edit.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

$nim = $_GET['nim'];

$query = "SELECT * FROM mhs WHERE nim = '$nim'"; $hasil = mysql_query($query);

$data = mysql_fetch_array($hasil);

// memecah tanggal lahir ke dalam masing-masing unsur (tgl, bln, thn)

$pecahTgl = explode("-", $data['tgllahir']);

$tgl = $pecahTgl[2];
$bln = $pecahTgl[1];

$thn = $pecahTgl[0];

echo "<form method='post' action='update.php'>"; echo "<table>";

echo "<tr><td>NIM</td><td>:</td>

<td><input type='text' name='nim' value='".$data['nim']."'></td></tr>"; echo "<tr><td>Nama Mahasiswa</td><td>:</td>

<td><input type='text' name='nama' value='".$data['nama']."'></td></tr>"; echo "<tr><td>Alamat</td><td>:</td>

<td><textarea name='alamat'>".$data['alamat']."</textarea></td></tr>"; echo "<tr><td>Sex</td><td>:</td>

<td><input type='radio' name='sex' value='L'> Laki-Laki

<input type='radio' name='sex' value='P'> Perempuan</td></tr>"; echo "<tr><td>Tgl Lahir</td><td>:</td><td>

<select name='tgl'>";
for ($i=1; $i<=31; $i++)

{

if ($i == $tgl) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>

<select name='bln'>";

for ($i=1; $i<=12; $i++)
{

if ($i == $bln) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}
echo "</select>

<select name='thn'>";

for ($i=1980; $i<=1997; $i++)

{

if ($i == $thn) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>

</td></tr>";

echo "</table>";

echo "<input type='submit' name='submit' value='Submit'>"; echo "</form>";

?>

Nah… mudah dan simpel bukan idenya?
Sekarang yang terakhir, kita buat script untuk updatenya. Tapi… eiiit… wait a minute.. bagaimana bila NIM mahasiswanya yang diubah? Lho.. emangnya ada apa? Mungkin d pikiran Anda konsepnya sama dengan update data yang lain. Iya sih… but… coba kita lihat pemisalannya. Jika data seorang mahasiswa sebelum diubah memiliki NIM ‘M0001’. Kemudian data NIM nya diubah menjadi ‘M0002’. Bagaimana SQL nya? SQL nya adalah sebagai berikut:

UPDATE mhs SET nim = ‘M0002’ WHERE nim = ‘M0001’;

Dari SQL di atas, kita bisa melihat bahwa kita perlu NIM lama mahasiswa guna proses update tersebut. Nah… bila komponen textbox pada form edit untuk update NIM di atas kita ubah isinya, maka dengan kata lain kita akan kehilangan NIM yang lama. Nah… gimana tuh?

OK… ide untuk menanggulangi hal tersebut adalah kita buat komponen hidden input untuk menyimpan NIM yang lama (sebelum diedit). NIM lama ini nantinya kita gunakan sebagai acuan proses updatenya.

Nah.. dengan demikian kita modifikasi kembali script edit.php yang telah kita buat sebelumnya.

edit.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

$nim = $_GET['nim'];

$query = "SELECT * FROM mhs WHERE nim = '$nim'"; $hasil = mysql_query($query);

$data = mysql_fetch_array($hasil);

$pecahTgl = explode("-", $data['tgllahir']);

$tgl = $pecahTgl[2];

$bln = $pecahTgl[1];

$thn = $pecahTgl[0];

echo "<form method='post' action='update.php'>"; echo "<table>";

echo "<tr><td>NIM</td><td>:</td>

<td><input type='text' name='nimBaru' value='".$data['nim']."'></td></tr>";
echo "<tr><td>Nama Mahasiswa</td><td>:</td>

<td><input type='text' name='nama' value='".$data['nama']."'></td></tr>"; echo "<tr><td>Alamat</td><td>:</td>

<td><textarea name='alamat'>".$data['alamat']."</textarea></td></tr>"; echo "<tr><td>Sex</td><td>:</td>

<td><input type='radio' name='sex' value='L'> Laki-Laki

<input type='radio' name='sex' value='P'> Perempuan</td></tr>"; echo "<tr><td>Tgl Lahir</td><td>:</td><td>

<select name='tgl'>";

for ($i=1; $i<=31; $i++)

{

if ($i == $tgl) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>

<select name='bln'>";
for ($i=1; $i<=12; $i++)

{

if ($i == $bln) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}

echo "</select>

<select name='thn'>";

for ($i=1980; $i<=1997; $i++)
{

if ($i == $thn) echo "<option value='".$i."' selected>".$i."</option>"; else echo "<option value='".$i."'>".$i."</option>";

}
echo "</select>

</td></tr>";

echo "</table>";

echo "<input type='hidden' name='nimLama' value='".$data[‘nim’]."'>"; echo "<input type='submit' name='submit' value='Submit'>";

echo "</form>";

?>

Catatan:

Letak komponen hidden input ini bisa diletakkan di sebarang tempat di dalam form, mengingat komponen ini tidak terlihat oleh mata

Nah.. dengan demikian kita sekarang bisa konsentrasi ke script updatenya. Konsepnya hanyalah menjalankan query SQL UPDATE.

update.php

<?php

mysql_connect("localhost", "root", "root");

mysql_select_db("data");

$nimLama = $_POST['nimLama'];

$nimBaru = $_POST['nimBaru'];

$nama = $_POST['nama'];

$alamat = $_POST['alamat'];

$sex = $_POST['sex'];

//  menggabung unsur tgl dalam combobox menjadi satu dalam format yyyy-mm-dd $tgllahir = $_POST['thn']."-".$_POST['bln']."-".$_POST['tgl'];

$query = "UPDATE mhs

SET nim = '$nimBaru', nama = '$nama', alamat = '$alamat', sex = '$sex', tgllahir = '$tgllahir'

WHERE nim = '$nimLama'";

$hasil = mysql_query($query);

if ($hasil) echo "Data sudah diupdate";

else echo "Data gagal diupdate";

?>

OK deh selesai proses pembuatan script updatenya.