KONIMEX Pharmaceutical laboratories Solo-Indonesia
IMPLEMENTASI SISTEM
4.5 USER INTERFACE
4.5.3 User Interface Proses Data Kategori
4.5.3.3 User Interface Proses Mengubah Data Kategori
Gambar 4.12 merupakan gambar user interface untuk memilih data Kategori yang akan diubah.
Gambar 4.12 User Interface Untuk Memilih Data Kategori Yang Akan Diubah
Proses mengubah data kategori hanya dapat dilakukan jika data kategori sudah dipilih terlebih dahulu dengan mengklik tombol edit. Berikut ini adalah stored procedure yang digunakan untuk memilih data kategori yang akan diubah.
CREATE PROCEDURE `formkategori`(kode int) BEGIN
select * from kategori where kode_ktg=kode; END
Listing 4.10. Stored procedure Form Kategori
Pada listing 4.10 dilakukan sebuah query untuk melihat data dari tabel kategori berdasarkan kode kategori.
<?
<form method=post action=proseseditktg.php> ";
$ktg=$HTTP_GET_VARS[ktg]; $des=$HTTP_GET_VARS[des]; include("database.php");
$query = "call formkategori('$ktg')";
$hasil_mysql = mysqli_query($sambungan,$query);
$baris = mysqli_fetch_row($hasil_mysql);
$kode = $baris[0];
$desk = $baris[1];
print("<input type=hidden name=kode_kt value=$ktg>");
print("<input type=hidden name=desk_kt value=$des>");
print("<input type=hidden name=old_time value=\"$wkt\">");
<tr>
<td height='10' width='5'><input type='checkbox' name='checkbox' value='kode_kateg'></td>
<td width=90 valign=top class='isi'>Kode Kategori</td>
<td valign=top class='isi'>:</td>
<td valign=top class='isi'><input type=text name=id_kat size=10 value='";print("$kode");echo "'</td>
<tr>
<td height='10' valign=top width='5'><input type='checkbox' name='checkbox1' value='deskrp'></td>
<td width=90 valign=top class='isi'>Deskripsi</td>
<td valign=top class='isi'>:</td>
"</textarea></td> </tr>
?>
Listing 4.11. Listing Form Edit Kategori
Pada Listing 4.11 digunakan sebuah form dengan action ke proseseditktg.php. Data yang akan diupdate ditampilkan dengan perintah print("$kode");, $kode merupakan hasil dari $baris =mysqli_fecth_row(mysqli_query($sambungan, call formkategori( $ktg )) yang menghasilkan baris atau record dalam array enumerated dengan perintah $kode = $baris[0], begitu pula denganprint("$desk").
Setelah itu akan muncul user interface yang akan berfungsi untuk mengubah data kategori. Gambar 4.13 merupakan user interface proses mengubah data kategori.
Gambar 4.13 User Interface Proses Mengubah Data Kategori
Proses update dilakukan untuk mengubah data kode kategori dan deskripsi. User bisa memilih data yang mana yang ingin dirubah dengan mencentang checkbox di data yang ingin dirubah Berikut adalah stored procedure dan Listing proseseditktg.php yang digunakan. untuk merubah data kode kategori dan deskripsi
CREATE PROCEDURE `updatekodekategori`(kode int,kode1 int,des varchar(30),desk varchar(30),waktu timestamp)
BEGIN
DECLARE txn_error INTEGER DEFAULT 0 ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
set session transaction isolation level serializable; start transaction;
update kategori set kode_ktg=kode,deskripsi=des where kode_ktg=kode1 and jam=waktu;
if txn_error then rollback;
select 'Telah terjadi error,proses update dibatalkan' as pesan;
elseif row_count()=0 then rollback;
select 'Data kategori telah dirubah oleh user yang lain' as pesan;
elseif(select count(*) from kategori where deskripsi=des)>1 then
rollback;
select 'Deskripsi telah ada' as pesan; else
update analisa set kategori=des where kategori=desk;
if txn_error then
rollback;
select "Telah terjadi error,proses update dibatalkan" as pesan;
elseif row_count()=0 then commit;
select "Data Kategori berhasil diedit ,data analisa untuk kategori ini belum ada " as pesan;
else
commit;
select "Data Kategori berhasil diedit, data analisa dengan kategori ini berhasil dirubah" as pesan;
end if;
end if; END
Listing 4.12. Stored procedure Update Kode Kategori dan Deskripsi
Dalam Listing 4.12 diatas digunakan salah satu teknik kontrol kebersamaan yaitu teknik timestamp. Jika pada saat eksekusi waktu timestampnya belum berubah maka proses update akan dilaksanakan, tetapi jika waktu timestampnya telah berubah maka proses update akan dibatalkan. Tahap selanjutnya untuk melihat proses update berhasil atau tidak maka akan dilakukan pengecekan dengan pemanggilan fungsi ROW_COUNT(), jika nilai yang
ROW_COUNT() tidak mengembalikan nilai 0 maka proses update akan berhasil. Untuk proses update yang dibatalkan, jika ingin mengupdate lagi maka harus masuk ke dalam form update lagi dan melakukan proses update selama waktu timestampnya belum berubah. Pada proses update ini akan melibatkan lebih dari satu tabel yang diupdate, yaitu tabel kategori dan tabel analisa. Jika deskripsi di tabel kategori berubah maka akan dilakukan perubahan juga di tabel analisa untuk deskripsi yang sama yang ada di tabel analisa. Jadi jika kondisi timestamp benar dan proses update tidak mengalami error maka proses akan dicommit, tetapi jika sebaliknya jika kondisi timestamp salah dan proses update mengalami error serta ada data deskripsi yang sama maka proses update akan dirollback. Jika salah satu proses update mengalami error, maka proses update dibatalkan, dalam hal ini jika update tabel kategori berhasil dan update tabel analisa gagal, maka proses dibatalkan. Proses update akan dicommit jika kedua tabel berhasil diupdate dan tidak mengalami error. Syarat dari teknik timestamp ini adalah proses update ini hanya melibatkan suatu record dalam suatu tabel dan tidak ada pembacaan suatu record, perubahan isi record asli dan dilanjutkan dengan proses update isi record tersebut dalam waktu kurang atau sama dengan 1 detik. Kelemahan teknik ini terletak pada kemampuan tipe data timestamp untuk menyimpan perbedaaan waktu proses update yang dilakukan dimana tipe data timestamp hanya dapat menyimpan perbedaan sampai orde detik. Keuntungan teknik timestamp ini adalah untuk meningkatan efesiensi proses update yang melibatkan suatu record dalam suatu tabel dalam lingkungan multiuser.
<?
session_start();
if(session_is_registered(master) and session_is_registered(hak_)) { if($hak_=="1") { include("database.php"); if($HTTP_POST_VARS[Submit]=="BATAL") {
echo "<meta http-equiv=\"refresh\" content=\"0; url=editktg.php?hal=1\">"; } else { $deskr1=str_replace(" ","_","$deskr"); $desk_kt1=str_replace("_"," ","$desk_kt"); $i = 1; while ($i <= 10000000): $i++; endwhile; if($checkbox=='kode_kateg'&&$checkbox1=='deskrp') { $query_update = "call updatekodekategori('$id_kat','$kode_kt','$deskr1','$d esk_kt','$old_time')"; $hasil_mysql_update = mysqli_query($sambungan,$query_update); $pesan = mysqli_fetch_array($hasil_mysql_update); echo "<script>alert('";print($pesan["pesan"]);echo"')</scr ipt>";
echo "<meta http-equiv=\"refresh\" content=\"0; url=editktg.php?hal=1\">"; } elseif($checkbox=='kode_kateg') { $query_update = "call updatekode('$id_kat','$kode_kt','$old_time')"; $hasil_mysql_update = mysqli_query($sambungan,$query_update); $pesan = mysqli_fetch_array($hasil_mysql_update); echo "<script>alert('";print($pesan["pesan"]);echo"')</scr ipt>";
} elseif($checkbox1=='deskrp') { $query_update = "call updatedeskripsi('$kode_kt','$deskr1','$desk_kt','$old _time')"; $hasil_mysql_update = mysqli_query($sambungan,$query_update); $pesan = mysqli_fetch_array($hasil_mysql_update); echo "<script>alert('";print($pesan["pesan"]);echo"')</scr ipt>";
echo "<meta http-equiv=\"refresh\" content=\"0; url=editktg.php?hal=1\">";
} else
{
print("Silahkan pilih data yang ingin anda edit"); } } } else header("location:logout.php"); } else header("location:index.php"); ?>
Listing 4.13. Listing editktg.php
Dalam proses update pada Listing 4.13 digunakan teknik timestamp. Alasan penggunaan teknik timestamp ini karena proses update ini bisa dilakukan oleh lebih dari satu orang, teknik timestamp ini digunakan untuk mengatasi masalah proses update secara bersamaan. Jadi, dengan teknik timestamp jika ada lebih dari satu user yang melakukan proses update secara bersamaan maka salah satu proses user akan dibatalkan untuk mencegah hilangnya data yang dirubah.
Gambar 4.14 merupakan gambar user interface proses menghapus data kategori.
Gambar 4.14 User Interface Proses Menghapus Data Kategori
Proses hapus data hanya dapat dilakukan jika data sudah dipilih terlebih dahulu dengan mengklik tombol hapus. Berikut ini adalah stored procedure dan Listingproseshapusktg.php yang digunakan.
CREATE PROCEDURE `hapuskategori`(kode int,des varchar(30),waktu timestamp)
BEGIN
DECLARE txn_error INTEGER DEFAULT 0 ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET txn_error=1; END;
set session transaction isolation level serializable; start transaction;
delete from kategori where kode_ktg=kode and jam=waktu; if row_count()=0 then
rollback;
select "Data tidak dapat dihapus" as pesan; elseif txn_error then
rollback;
select "Telah terjadi error,prosers hapus dibatalkan" as pesan;
else
delete from analisa where kategori=des;
if txn_error then
rollback;
select "telah terjadi error,proses hapus dibatalkan" as pesan;
else
commit;
select "Data analisa berhasil dihapus" as pesan;
end if;
end if; END
Listing 4.14. Stored procedure Hapus Kategori
Pada Listing 4.14 untuk proses hapus juga digunakan tekniktimestamp dan manajemen transaksi dengan level isolasi serializable. Jadi pada saat user ingin menghapus kategori, maka akan dicek dulu apakah waktu timestampnya belum berubah atau sudah berubah, jika sudah berubah maka proses hapus dibatalkan tetapi jika belum berubah maka proses hapus akan dilaksanakan. Penghapusan kategori akan berpengaruh juga pada data analisa, jika kategori dihapus maka data analisa yang menggunakan data kategori tersebut akan secara otomatis akan ikut terhapus juga. Jika ada salah satu tabel gagal diupdate maka proses hapus kategori akan dibatalkan.
if(session_is_registered(master) and session_is_registered(hak_)) { if($hak_=="1") { include("database.php"); $query = "call hapuskategori('$id','$desk_kt','$old_time')"; $hasil_mysql = mysqli_query($sambungan,$query); $pesan = mysqli_fetch_array($hasil_mysql); echo "<script>alert('";print($pesan["pesan"]);echo"')</script>"; echo "<meta http-equiv=\"refresh\" content=\"0;
url=editktg.php?hal=1\">"; } else header("location:logout.php"); } else header("location:index.php"); ?>
Listing 15. Listing proseshapusktg.php
Pada Listing 4.15 $old_time merupakan waktu yang ada di tabel kategori sebelum diupdate, $id merupakan kode kategori dan $desk_kt merupakan deskripsinya. Proses pemanggilan stored procedure dilakukan dengan perintah call hapuskategori( $id $deak_kt $old_time ).