Masino Sinaga

Web Development and PHPMaker

Anda di sini: Beranda / PHPMaker / Mudahnya Memperbarui Total Detail di Tabel Master di Aplikasi Web dari PHPMaker
Mudahnya Menampilkan Total di Kolom Baru pada Aplikasi Web dari PHPMaker
Mudahnya Menentukan Field Mandatory pada Kriteria Pencarian dari PHPMaker

Mudahnya Memperbarui Total Detail di Tabel Master di Aplikasi Web dari PHPMaker

Rab, 26 November 2014 oleh Masino Sinaga 15 Komentar

Semakin sering Anda bereksperimen menggunakan PHPMaker dalam membangun Aplikasi Web, maka akan semakin banyak hal-hal baru yang akan Anda ketahui. Tidak hanya hal baru saja yang akan Anda temui, tetapi juga banyak sekali keuntungan yang akan Anda alami dan rasakan sendiri. Sayang sekali jika Anda sebagai Web Developer mengabaikan dan tidak mengoptimalkan semua itu.

Hari ini kita akan mengeksplorasi lagi salah satu kemampuan PHPMaker yang demikian hebat dan powerful. Namun, di balik kehebatannya itu, PHPMaker masih tetap mengandalkan kesederhanaan. Artinya, sekalipun tujuan yang kita inginkan bisa tercapai dengan sangat mudah dan cepat, tetapi PHPMaker masih tetap mengutamakan kesederhanaan dalam penulisan kode.

Contoh, seperti yang Anda baca pada judul artikel ini. Kita dapat memperbarui nilai Total di table Master berdasarkan hasil penjumlahan field tertentu yang terdapat di tabel Detail. Ya, betul. Dalam hal ini ada dua table yang kita libatkan, dan keduanya memiliki relasi sebagai Master/Detail.

Artinya, kita sebagai Web Developer dapat memperoleh dengan sangat mudah dan cepat nilai hasil penjumlahan field terkait di table Detail, lalu memperbarui field tertentu di table Master dengan hasil tadi. Masih bingung juga? Jangan khawatir, karena Anda dapat memahaminya melalui contoh kasus yang sangat sederhana berikut.

Katakanlah kita memiliki dua buah table yang masing-masing sebagai Master dan Detail, yaitu: categories (Master) dan category_detail (Detail). Struktur kedua tabel dan datanya adalah sebagai berikut:

-- ----------------------------
-- Table structure for categories
-- ----------------------------
DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories` (
  `Cat_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Cat_Name` varchar(50) DEFAULT NULL,
  `Cat_Date` datetime DEFAULT NULL,
  `Cat_Total` int(11) DEFAULT NULL,
  PRIMARY KEY (`Cat_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of categories
-- ----------------------------
INSERT INTO `categories` VALUES ('1', 'First Category', '2014-11-26 09:33:26', '150');
INSERT INTO `categories` VALUES ('2', 'Second Category', '2014-11-26 09:33:41', '45');

-- ----------------------------
-- Table structure for category_detail
-- ----------------------------
DROP TABLE IF EXISTS `category_detail`;
CREATE TABLE `category_detail` (
  `Det_ID` int(11) NOT NULL AUTO_INCREMENT,
  `Cat_ID` int(11) DEFAULT NULL,
  `Description` varchar(50) DEFAULT NULL,
  `Value` int(11) DEFAULT NULL,
  PRIMARY KEY (`Det_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of category_detail
-- ----------------------------
INSERT INTO `category_detail` VALUES ('1', '1', 'First Detail in First Cat', '10');
INSERT INTO `category_detail` VALUES ('2', '1', 'Second Detail in First Cat', '20');
INSERT INTO `category_detail` VALUES ('3', '1', 'Third Detail in First Cat', '30');
INSERT INTO `category_detail` VALUES ('4', '2', 'First Detail in Second Cat', '5');
INSERT INTO `category_detail` VALUES ('5', '2', 'Second Detail in Second Cat', '7');
INSERT INTO `category_detail` VALUES ('6', '2', 'Third Detail in Second Det', '9');
INSERT INTO `category_detail` VALUES ('7', '2', 'Fourth Detail in Second Det', '11');
INSERT INTO `category_detail` VALUES ('8', '1', 'Fourth detail in First Cat', '40');
INSERT INTO `category_detail` VALUES ('9', '1', 'Fifth Detail in First Cat', '50');
INSERT INTO `category_detail` VALUES ('10', '2', 'Fifth detail in Second cat', '13');

Berdasarkan kedua table tersebut, ada kebutuhan untuk memperbarui hasil penjumlahan di kolom Value pada table category_detail berdasarkan Cat_ID tertentu, lalu hasilnya akan memperbarui nilai field Cat_Total yang terdapat di table categories. Sudah semakin jelas sekarang?

Nah, pertanyaannya adalah, bagaimana cara kita memperbarui nilai field Cat_Total di table categories (Master) setiap kali Pengguna menambahkan data detail di table category_detail?

Jawabannya ternyata sangatlah simpel. Kita cukup menambahkan dua baris (betul, hanya dua baris!) kode PHP berikut ke dalam server event Row_Inserted milik table category_detail (Detail):

	$tot_det = ew_ExecuteScalar("SELECT SUM(Value) FROM category_detail WHERE Cat_ID = ".$rsnew["Cat_ID"]."");
	ew_Execute("UPDATE categories SET Cat_Total = ".$tot_det." WHERE Cat_ID = ".$rsnew["Cat_ID"]."");

Perhatikanlah kode tersebut. Kode di baris pertama berfungsi untuk menjumlahkan nilai di field Value berdasarkan data kunci di field Cat_ID. Kode di baris kedua selanjutnya akan memperbarui nilai di field Cat_Total pada table categories berdasarkan hasil penjumlahan yang sebelumnya sudah ditampung di variabel $tot_det.

Kita menggunakan server event Row_Inserted untuk memastikan data yang ditambahkan oleh Pengguna sudah berhasil masuk ke Database, dan setelah itu barulah mengeksekusi kedua baris kode di atas. Dengan cara ini, maka kita dapat mengoptimalkan nilai kunci yang terdapat di $rsnew[“Cat_ID”].

Jadi, setiap kali Pengguna menambahkan data baru di table category_detail, maka hasil penjumlahan di kolom Value untuk Cat_ID yang terpilih akan otomatis memperbarui nilai di field Cat_Total pada table categories.

Eit, tapi jangan puas dulu. Mungkin di antara Anda ada yang bertanya “Lha itu kan kalau saat menambah data. Lalu bagaimana saat mengubah dan menghapus data detail?”. Hohoho! Pertanyaan yang sangat bagus!

Jika Pengguna mengubah data pada field Value di table Detail, maka itu artinya nilai ID yang digunakan adalah nilai ID yang sudah ada. Artinya, nilai ID berasal dari Recordset yang lama ($rsold), sehingga kode di atas tadi menjadi seperti ini di dalam server event Row_Updated:

	$tot_det = ew_ExecuteScalar("SELECT SUM(Value) FROM category_detail WHERE Cat_ID = ".$rsold["Cat_ID"]."");
	ew_Execute("UPDATE categories SET Cat_Total = ".$tot_det." WHERE Cat_ID = ".$rsold["Cat_ID"]."");

Sedangkan jika Pengguna menghapus data, maka Anda harus menangani sampai dengan kemungkinan jika Record di table Detail tersebut sudah tidak ada lagi. Selain itu, server event yang terkait dengan penghapusan data tidak memiliki recordset $rsold dan $rsnew, tapi menggunakan $rs saja, sehingga kode di atas menjadi seperti berikut ini di dalam server event Row_Deleted:

	$rec_cnt_det = ew_ExecuteScalar("SELECT COUNT(Value) FROM category_detail WHERE Cat_ID = ".$rs["Cat_ID"]."");
	if ($rec_cnt_det > 0) {
		$tot_det = ew_ExecuteScalar("SELECT SUM(Value) FROM category_detail WHERE Cat_ID = ".$rs["Cat_ID"]."");
		ew_Execute("UPDATE categories SET Cat_Total = ".$tot_det." WHERE Cat_ID = ".$rs["Cat_ID"]."");
	} else {
		ew_Execute("UPDATE categories SET Cat_Total = 0 WHERE Cat_ID = ".$rs["Cat_ID"]."");
	}

Wow, betapa mudah dan cepatnya, bukan? Kita hanya perlu menambahkan sedikit kode saja untuk mengimplementasikan kebutuhan tadi! Selebihnya, untuk yang hal-hal/urusan teknis, cukup kita serahkan kepada PHPMaker!

Bayangkan, betapa PHPMaker telah menyediakan kerangka kerja yang demikian rapi dan sangat terstruktur, yang memungkinkan Web Developer dapat bekerja dengan sangat mudah dan cepat! 😀

Ditempatkan di bawah: PHPMaker Ditag dengan:Master/Detail, PHPMaker Indonesia, Row_Inserted, Server Events, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com, ilovephpmaker.com, dan phpmakerprojects.com.

Mudahnya Menampilkan Total di Kolom Baru pada Aplikasi Web dari PHPMaker
Mudahnya Menentukan Field Mandatory pada Kriteria Pencarian dari PHPMaker

Komentar

  1. Herman mengatakan

    Jum, 28 November 2014 pada 8:05 am

    Terima kasih Master ini yang saya tunggu-tunggu…

    Balas
    • Masino Sinaga mengatakan

      Jum, 28 November 2014 pada 8:34 am

      Hehehe… sama-sama. 🙂

      Balas
  2. ardi mengatakan

    Jum, 28 November 2014 pada 6:53 pm

    pak, saya mau tanya kebetulan pake php maker10
    saya buat 3 buah input
    1. kolom input jumlah
    2. kolom input harga
    3. kolom input total harga
    gimana caranya ketika kita menginputkan data pada kolom input jumlah dan input harga otomatis kolom input total harga akan keluar otomatis hasil dari perkalian jumlah dan harga

    Balas
    • Masino Sinaga mengatakan

      Sab, 29 November 2014 pada 8:12 am

      Mengenai hal ini sudah pernah dibahas, langsung saja ke artikel Menampilkan Hasil Perhitungan pada Sisi Client di Aplikasi Web dari PHPMaker.

      Balas
      • ARDI mengatakan

        Sab, 29 November 2014 pada 10:41 am

        makasih pak. saya udah nyari 3 hari gak ketemu ketemu akhirnya ketemu. kesulitan saya pake script di di phpmaker karena tidak tau nama nama kelas yang di phpmaker contohnya keyup(function ()) ini juga baru tahu. tutorialnya banyak banget pak, makasih banyak. kalo boleh minta tolong bagaimana cara membuat tabel didalam frame. karena kesulitan ketika menampilkan tabel dengan jumlah field yang banyak. contoh seperti ini http://loebizpiss.blogspot.com/2012/11/membuat-frame-tabel-html-dan-php.html

        Balas
        • Masino Sinaga mengatakan

          Sen, 1 Desember 2014 pada 10:28 am

          Anda tidak perlu membuat fitur seperti itu di Aplikasi Web yang dihasilkan oleh PHPMaker. Tentu Anda akan bertanya: Mengapa?

          Jawabannya: Karena PHPMaker sudah menangani hal ini melalui pemakaian extension yang bernama ScrollingTable. Jadi, ketika jumlah field terlalu banyak sehingga lebar total tabel melebihi lebar layar komputer, maka sistem akan otomatis menampilkan horizontal scroll di table-nya.

          Extension ini saya kembangkan lagi dengan menambahkan banyak fitur advanced sehingga menghasilkan MasinoFixedWidthSite11 (untuk PHPMaker 11), dan bisa didownload jika sudah menjadi member di situs http://www.ilovephpmaker.com

          Balas
  3. Edi mengatakan

    Kam, 23 April 2015 pada 2:13 pm

    kalo di implementasikan di aplikasi Penjualan bgaimana ya ?
    ketika ada proses Penjualan Barang berarti otomatis ada pengurangan jumlah Stok di Tabel Barang.

    Balas
    • Masino Sinaga mengatakan

      Kam, 23 April 2015 pada 3:27 pm

      Anda bisa melihat contoh pengimplementasiannya melalui salah satu project open-source yang saya bikin di http://sourceforge.net/projects/stock-inventory-management/

      Jika ingin memperoleh file project PHPMaker-nya, silahkan download dari http://www.ilovephpmaker.com.

      Balas
  4. Adhie mengatakan

    Sab, 2 April 2016 pada 3:16 pm

    Selamat siang pak,

    Saya sedang membangun inventory system, misal ada 2 table: “products” dan “checkout”
    Bagaimana caranya supaya ketika saya memasukan “quantity” di check out, maka otomatis akan mengurangi “stock” di table “products”.
    Terakhir, bagaimana cara menampilkan peringatan, atau error message jika “quantity” yang diminta melebihi sisa stock.

    Terimakasih sebelumnya.

    Salam.

    Balas
    • Masino Sinaga mengatakan

      Sab, 2 April 2016 pada 6:06 pm

      Anda bisa menggunakan server event Row_Inserted di table checkout dengan menjalankan SQL Update untuk mengurangi jumlah stok di table products.

      Untuk menampilkan pesan peringatan dan membatalkan proses transaksi, Anda bisa menggunakan server event Row_Inserting di table checkout.

      Untuk info lebih lanjut, silahkan pelajari topik Server Events and Client Scripts dari menu Help PHPMaker.

      Balas
      • Liang mengatakan

        Ming, 3 April 2016 pada 12:24 pm

        Kalau kek gini salahnya dimana ya?

        $MyResult = ew_Execute(“UPDATE products SET quantity=quantity-qty WHERE id=product_id”);

        Keterangan:
        products = tabel produk
        quantity = field jumlah stok di tabel produk
        qty = field jumlah barang keluar di tabel checkout
        id = primary key di tabel produk
        product_id = foreign key untuk id produk di tabel checkout

        makasih

        Balas
        • Masino Sinaga mengatakan

          Sen, 4 April 2016 pada 10:32 am

          Salahnya di bagian clausa WHERE id=product_id.

          Balas
  5. Taufiq mengatakan

    Ming, 26 November 2017 pada 7:58 pm

    Pak saya sedang buat database visitor management. Yang ingin saya tanyakan bagaimana cara buat data visitor check out dengan mengupdate di data table visitor check in-out.
    Terima kasih

    Balas
    • Masino Sinaga mengatakan

      Kam, 30 November 2017 pada 2:26 pm

      Caranya ya dibuat saja dulu. 🙂

      Balas
  6. Irwanto mengatakan

    Kam, 4 Januari 2018 pada 1:23 pm

    Selamat Siang . saya punya form master detail (permintaan pembelian).

    -> Next process pembuatan PO,
    yang mau saya tanyakan, saat pembuatan PO, setelah pilih No permintaan pembelian(form 1) , maka detailnya otomatis terisi dari detail permintaan pembelian.

    untuk PHPMaker Apa memungkinkan?

    Balas

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses

Pos-pos Terbaru

  • Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Solusi Buat Field Lookup Table yang Bermasalah di Server Hosting
  • Hati-Hati Meredirect Pengguna Setelah Login di PHPMaker 2025
  • Ini Alasan Mengapa Kalian Harus Selalu Pakai PHPMaker versi Terakhir
  • Masino Extensions for PHPMaker 2025 Now Changed!

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Masino Sinaga pada Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Charly pada Menonaktifkan Field Tertentu Saat Data Diubah pada Aplikasi Web dari PHPMaker
  • Nanda pada Cara Menampilkan Tombol Close di Footer Modal buat Custom File yang SkipHeaderFooter-nya Bernilai True
  • Nanda pada Mudahnya Menghitung Saldo per Transaksi di Aplikasi Web dari PHPMaker
  • Masino Sinaga pada Menonaktifkan Field Tertentu Saat Data Diubah pada Aplikasi Web dari PHPMaker

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Projects
  6. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2025 | WordPress | Catat masuk | Kembali ke atas