Multi action dalam 1 Form

form di html biasa dipakai untuk menghandle 1 submit button. Mungkinkah kita membuat beberapa tombol submit dalam 1 form, dan tiap tombol mempunyai perlakuan action yang berbeda-beda ?
semuanya bisa terwujud jika dibantu dengan javascript. Berikut contoh koding mutiple button di php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript">
 
	function doSimpan()
	{
		document.form1.action = "<?=$_SERVER['PHP_SELF'];?>" + "?action=simpan";
		document.form1.submit();
	}
 
	function doHapus()
	{
		document.form1.action = "<?=$_SERVER['PHP_SELF'];?>" + "?action=hapus";
		document.form1.submit();
	}
 
	function doEdit()
	{
		document.form1.action = "<?=$_SERVER['PHP_SELF'];?>" + "?action=edit";
		document.form1.submit();
	}
 
</script>
</head>
 
<body>
 
	<div style="background-color:#FFCC00;color:#FF0000">
		<?
			if($_GET['action'] == "simpan")
			{
				echo "Anda Menekan Tombol Simpan";
			}
			else if($_GET['action'] == "edit")
			{
				echo "Anda Menekan Tombol Edit";
			}
			else if($_GET['action'] == "hapus")
			{
				echo "Anda Menekan Tombol Hapus";
			}
			else
			{
				echo "Silahkan tekan 3 tombol dibawah ini !!!";
			}
		?>
	</div>
 
	<form name="form1" action="" method="post">
		<input type="button" value="simpan" onclick="doSimpan();" />
		<input type="button" value="hapus" onclick="doHapus();" />
		<input type="button" value="edit" onclick="doEdit();" />
	</form>
 
</body>
</html>

Kill The Dragon

How to kill a dragon with various programming languages

There’s a beautiful princess, prisoner in the highest tower of a castle, guarded by a mighty dragon, and a fearless knight must rescue her…
This is how each language would manage to rescue the princess from the hands of the dragon
  • Java - Gets there, finds the dragon, develops a framework for dragon anihilation with multiple layers, writes several articles about the framework… But doesn’t kill the dragon.
  • .NET - Gets there, sees the idea of the Java developer and copies it. Tries to kill the dragon, but the monster eats him.
  • C - Arrives, looks down at the dragon, pulls out his sword, beheads the dragon, finds the princess… And ignores her to see the last checkins of linux kernel cvs.
  • C++ - Creates a basic needle, and gathers funcionality until he has a complex sword that he can barely understand… He kills the dragon, but gets stuck crossing the bridge because of memory leaks.
  • COBOL - Arrives, sees the dragon and thinks that he is too old to kill a monster that big and rescuing the princess, so he leaves.
  • Pascal - He prepares for 10 years to create a dragon anihilation system… When the moment comes, he discovers the program can only take lizards as an entry.
  • VB - Builds a dragon destruction weapon based on several components, jumps to the back of the dragon and in the most critical time he discovers that the sword works only on rainy nights…
  • PL/SQL - Gets data from other dragon slayers, creates tables with n ternary complexity relations, tridimensional data, OLAP, takes 15 years to process the information… And by then, the princess became a lesbian.
  • Ruby - Arrives with massive fame, saying he is the best at anything and when he faces the dragon, he shows a lame motion picture of himself killing a dragon… The dragon eats him out of boredom.
  • Smalltalk - Arrives, analyzes the dragon and princess, turns around and leaves, they are way too inferior.
  • shell - Creates a very powerful dragon slaying weapon… But in the moment of truth, he can’t remember how to use it.
  • shell(2)- The guy approaches the dragon with a two line script that kills, cuts, disembowels, impales, chops to pieces and packs the beast, but when he runs it the script grows, it fattens, irritates and puts alcohol in the fire of the dragon…
  • Assembler - He thinks he’s doing the right and most efficient things… But he writes an A instead of a D and kills the princess to end up f***ing the dragon.
  • Fortran - Arrives and develops a 45-thousand-code-line- solution, kills the dragon, meets the princess… But she calls him a weakling and runs after the Java programmer who was elegant, and also rich.
  • FOX PRO - Develops a dragon killing system. It’s gorgeous and works on the outside, but it’s really patched inside, so when he runs the dragon anihilator, he realizes he forgot to index the DBFs.
  • PROCESS ANALYST - Approaches the dragon with two tons of documentation, develops the unified dragon-killing process, he develops a DFD to free the princess and marry her, convinces the dragon that it’s the best for him and it won’t hurt. When he executes the process, he estimates the effort and the damage he will cause with a plan signed by the Pope, Buddha and Michael Jackson. Then he buys a couple of nukes, 45 cannons, an aircraft carrier and hires 300 heavily armed men… When all he needed was the sword he was holding in his hand in the beginning…
  • CLIPPER: Sets up a routine that loads a codeblock array to insult the dragon, serenade the princess, load the sword in memory, beat the crap out of the dragon, clean the mess, prepare a raspberry milkshake for the princess, make love to her, take a bath, start the car, put it some gas and come back home. When he runs it, he gets a ”Bound Error: Array Access” and the dragon eats him with fries.
  • Lisp, where the famous knight-errant, after speaking with numerous experts in dragon-killing, and modeling the knowledge they posess, he programs the system, and when he runs it he realizes he forgot a bracket (bender the offender).
  • HTML: Mounts a web on famous swords used to kill dragons, but he ignores the W3C standards. When he meets the dragon, he finds out the code isn’t compatible with his browser, so he’s left swordless. The dragon eats him as an appetizer.
  • Prolog: Thinks he needs a weapon to kill the dragon. Searches in a catalog for 182014 weapons. By the time the princess dies of her age, he’s achieved to know how to make every weapon starting with A: Atomic Bombs, Anti-Air Weapons, Arches, Ammunition, Axes…
  • PHP: Creates a web page that when he executes it would eliminate the $dragon selecting from a weapons databese in MySQL over an Apache server. Nevertheless he forgot the WHERE in the DELETE query and kills the princess, the dragon, the peasants, the witch, the sorceror and the programmer himself.
  • JavaScript: The programmer tries to kill  the great green dragon that spits fire throug his mouth. He creates a script that will delete the dragon when he loads a webpage, to create seconds after, some damsels to throw him flowers and make clapping sounds. Unfortunately he didn’t take into account the DOM structure of the lizard, also known as Mozilla, and the only thing he gets is to fill his console of errors and that the Book of Mozilla tells how he was devoured.
  • ActiveX: The programmers create a tunnel to enter the dragon’s lair from the castle and run a program that will kil the dragon from a safe and prudential distance. The dragon discovers the tunnel, eats the workers who dug, the dragon slayers, and enslaves every servant in the castle. The castle becomes a dragon-breeding place, full of little dragons that the dragon sends in pop-ups to other castles. The untasty remains of the knights are put in cans of Spam and sent to other castles as well as a warning. (aquelquesiente)
  • Basic. He creates a weapon able to kill paper dragons, but no matter how they improve it, they discover it’s not good enough to kill any dragon bigger than a baby poodle.
  • Matlab : They create a loop that calculates the trajectories to shoot a giant arrow at the dragon. The program works flawlessly. What they need now are the voluntaries caoable to launch tha arrow with the necessary strength and accuracy.
  • Videogame Programmer : Spends two years programming a state-of-the-art sword with shaders and all. When the time comes to kill the dragon, he finds that half the knights aren’t strong enough to raise the sword. Then someone programs a patch that reveals the sex scenes with the princess and Hillary Clinton makes it a scandal.

Reporting Services untuk data rekursif

Untuk membuat data model pada database aplikasi  memang perlu dibuat secara normalize, atau se normal mungkin. Tetapi ada kalanya kita perlu melakukan proses denormalize pada table dengan tujuan pertama jelas untuk menyederhanakan data model, kedua mempermudah pembuatan reporting, dan data minning, ketiga untuk mempercepat query.

Saya akan memberikan ilustrasi untuk mempermudah pembaca memahami proses denormalize pada suatu table. Misalkan ada suatu table yang berisi informasi wilayah yang tersusun secara hirarki dari kota, kecamatan, sampai tingkat RT. Struktur tablenya tersusun secara rekursif membentuk skema parent and child.

Ok, sekarang kita coba menampilkan data tersebut ke dalam reporting services. Sepertinya susah sekali kalau langsung di tampilkan ke dalam reporting services. Karena proses grouping di reporting services ditidak dilakukan dari perintah query tadi dari toolnya langsung. Terus gimana nih ? apakah harus menyerah sampe disini ? ooo, tentu tidak. Kita cari cara laen dengan transformasikan data asli pada table normalize diatas menjadi table yang denormalize sehingga data wilayah dari kota sampai tingkat RT terlihat semuanya pada setiap barisnya seperti terlihat pada tampilan dibawah ini :

Dengan tampilan data seperti ini sangat memudahkan kita untuk membentuk report di reporting services, Proses grouping nya pun cukup simple jadi bisa dibuat drilldown dari kota sampai tingkat RT, Untuk memunculkan data diatas kita bisa membuat view dengan yang berisi query denormalize table, berikut contoh querynya :

SELECT
w.NAMA_WIL,
(SELECT NAMA_WIL FROM WILAYAH WHERE ID_WIL = w.ID_WIL_INDUK) AS RW,
(SELECT NAMA_WIL FROM WILAYAH WHERE ID_WIL =
	(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL = w.ID_WIL_INDUK)) AS KEL,
(SELECT NAMA_WIL FROM WILAYAH WHERE ID_WIL =
	(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL=
		(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL = w.ID_WIL_INDUK))) AS KEC,
(SELECT NAMA_WIL FROM WILAYAH WHERE ID_WIL =
	(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL=
		(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL =
			(SELECT ID_WIL_INDUK FROM WILAYAH WHERE ID_WIL = w.ID_WIL_INDUK)  ))) AS KOTA
FROM
(SELECT * FROM WILAYAH WHERE JNS_WIL='RT') AS W

cara kerja querynya adalah dengan melihat entitas yang paling bawah yaitu RT, dari RT kita bisa melihat parent ID nya yaitu RW dan seterusnya sampe ketemua kotanya.

Semoga bisa memberikan pencerahan kepada pembaca ,,,

Bagaimana Mengencryp query string

Waktu kita melihat di beberapa situs atau portal besar seperti Yahoo, Google, dan lainnya sering kita lihat tampilan url yang susah dimengerti. Tidak seperti layaknya url yang biasa dan mudah dimengerti maksudnya. Contohnya seperti ini:

http://www.google.co.id/setprefs?sig=0_lAlIdPyCDlP9TeBq9tLdQSFVp0I=&amp;hl=jw

Coba lihat tampilan diatas terutama bentuk url setelah sig, bentuknya aneh dan cukup panjang. Apakah betul value dari ’sig’ berisikan data yang panjang seperti diatas ?

Kalau memang betul didesain seperti itu, hmmm sungguh tindakan yg konyol sekali. Sebenarnya data yang asli tidak sepanjang itu. Data tersebut terlihat panjang karena telah dilakukan proses enkripsi. Buat apa sih di enkrip segala ? ya tentunya untuk menyembunyikan index url dan nilainya dengan tujuannya untuk pengamanan aplikasi web dan serangan dari pihak luar yang biasa dilakuan dengan mencoba-coba memasukkan url ke dalam website yang dituju.

beberapa hari yang lalu, saya menemukan komponen bagus dari TSHAK. Komponen ini dipakai untuk mengenkrip query string. Cukup mudah penggunaannya hanya beberapa baris coding saja kita bisa melakukan enkripsi pada url (Query String).

Untuk mengenkrip query string kita membutuhkan kunci encripsi berupa byte array.

Dim qs As TSHAK.Components.SecureQueryString
qs = New TSHAK.Components.SecureQueryString(New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, })

Cara menambahkan nilai query string :

qs("Myname")= "Dale"
qs("MyAge")= 17
Response.Redirect("Page2.aspx?data=" + HttpUtility.UrlEncode(qs.ToString()))

Sekarang, bagaimana cara mendekrip nilai yang ada di Page2.aspx

Dim qs As TSHAK.Components.SecureQueryString
qs= New TSHAK.Components.SecureQueryString(New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 8}, Request("data"))
Dim myName=qs("MyName")
Dim age=qs("MyAge")

Bagi yang mau mencobanya Anda bisa mendapatkan library TSHAK
disini
selamat mencoba :D

Validasi Angka

sebelum data kita inputkan ke dalam database perlu dilakukan proses validasi agar data yang masuk sudah benar-benar valid dan tidak ada data kotor. salah satu dari sekian banyak macam validasi adalah memvalidasi inputan berupa angka (numeric). Proses validasi ini bisa kita lakukan dengan menggunakan function isNumeric yang sudah terdapat di dalam .Net. Ada banyak cara ketika kita ingin memvalidasi inputan angka, proses cek bisa dilakukan dibelakang/ setelah anda submit data atau bisa juga dilakukan pada saat user mengetikkan data di inputan aplikasi.

Dalam tulisan ini saya akan membahas bagaimana cara membatasi hanya data numeric saja yang bisa diinputkan pada sebuah textBox di aplikasi desktop .Net

Pertama buat sebuah textBox pada Windows Form aplikasi, masuk ke dalam view source dan aktifkan code event KeyPress pada textBox yang akan akan digunakan untuk memvalidasi inputan. Tambahkan kode berikut pada event KeyPress tersebut :

Private Sub txtUn_KeyPress(ByVal sender As Object, ByVal e As     System.Windows.Forms.KeyPressEventArgs) Handles txtUn.KeyPress
   If Not IsNumeric(e.KeyChar) Then
      If e.KeyChar = Chr(Keys.Back) Then
          e.Handled = False
      Else
          e.Handled = True
      End If
   End If
End Sub

Dale Learn To Kryptography

Sharing jawaban saat ujian catur wulan dengan temanku waktu SMP memang sudah menjadi tradisi. Aku beruntung punya teman yang selalu juara kelas dan belum pernah tergeser dari podium 1. Namanya Chandra, murid favorit dan paling dasyat untuk masalah nilai. Sementara aku dapat merebut podium 5 besar saja sudah syukur. Pagi hari menjelang ujian kami memikirkan cara terbaik agar bisa tetap berkomunikasi untuk tukar jawaban, sedangkan posisi duduk saling berjauhan. Temenku duduk di bangku paling depan sedangkan aku sendiri duduk di bangku paling belakang, jarak yang cukup jauh untuk memanggil temenku dan aku tidak mungkin berbisik-bisik untuk memanggilnya, pasti akan menimbulkan pengawas ujian curiga. Setelah dipikir-pikir tidak ada cara lain untuk menggunakan jalur perantara, gimana caranya ? ya ibaratnya perlu sebuah relay untuk memperkuat sinyal , hehe kayak jaringan aja. Siapa yang dijadikan relay ? kebetulan di antara kami ada temenku cewek dan posisinya sangat strategis untuk dijadikan relay. Aku coba tawarkan kepadanya untuk menyampaikan pesan dariku untuk temenku yang didepan. Dia pun mulai bertanya “pesan apa sih yang mau disampaikan ?” aku tidak menjawabpun akhirnya dia tahu juga isi pesan yang akan aku kirim. Tanpa berpikir panjang dan dengan senang hati dia menerima tawaran kami. Akhirnya masalah yang satu ini sudah terselasaikan. Tiap pesan yang aku kirim dan aku terima tersampaikan dengan lancar, itu semua berkat adanya perantara temenku.

Ujian sudah selesai, tinggal menunggu hasil rapot yang akan dibagikan minggu depan. Saat pembagian rapot semua murid saling menanyakan masalah ranking di kelas. Untuk podium 1 sudah menjadi langganan temenku Chandra, ini sudah hal yang biasa. Alhamdulillah aku bisa masuk podium 3, wah ternyata metode kami berhasil. Situasi kelas mulai ramai ketika ada seorang murid yang tidak terlalu pandai bisa merebut posisi rangking di podium 2. Wah ini kejadian yang luar binasa !!! perlu diketahui siapakah orang tersebut ??? dan ternyata dia adalah temenku cewek yang kami jadikan relay untuk media pertukaran jawaban selama ujian catur wulan kemaren. Dan semua ini hanya kami yang tahu. Sepertinya ada pihak yang diuntungkan dari komunikasi kami, metode kemarin sudah tidak layak lagi untuk digunakan.

Four Mount Later….

Ujian catur wulan berikutnya sudah tiba, kami harus berpikir lagi untuk mencari solusi terbaik agar kami tetap bisa bertukar jawaban tanpa bisa diketahui atau dimanfaatkan oleh temenku. Kebetulan kebanyakan soal didominasi dengan soal pilihan ganda, akhirnya kami punya suatu ide cemerlang dengan membuat aturan sandi. Biasanya jawaban yang kami kirimkan adalah jawaban aslinya, dan sekarang tidak semudah itu. jawaban pilihan ganda A,B,C,D akan digeser satu kali sehigga A => B, B=> C dan seterusnya. Sebelum masuk ruang kelas, temenku cewek menghampiri kami dan menanyakan apakah dia masih difungsikan sebagai relay ? kami pun menjawab “Oh ya kami tetap memperpanjang kontrak kamu sebagai relay sampai akhir tahun ”, hehehee ya asal jangan ditelan mentah-mentah aja, ungkap kami dalam hati. Seperti biasa ujian berjalan seperti ujian kemaren. Komunikasi tetap lancar dan kami makin tenang dengan aturan baru. Setiap selesai ujian kami selalu ketawa-ketiwi, kami ketawa bukan karena ide sandi yang telah kami buat, kami ketawa karena kebodohan temenku yang dengan polosnya menelan mentah2 sandi yang kami kirimkan, dan dia tidak melakukan cross cek atas jawaban tersebut. Semingu setelah ujian rapotpun dibagikan. Tidak ada perubaha posisi rangking dari catur wulan yang kemaren. Hanya saja podium dua tidak lagi tempati oleh temenku cewek. Terus diposisi berapakah dia sekarang ? ya , dia harus tergeser dari posium dua ke posisi 20. Pastinya ini membuat dia curiga tentang kami. Ternyata betul, tak lama setelah pembagian rapot selesai dia mendatangi kami. Terlihat matanya berkaca2 sambil melihat hasil ujiannya yg jelek. Dengan perasaan marah campur jengkel dia memaki-maki kami. Sungguh ini pemandangan terburuk yang pernah kami lihat. Akhirnya kami menyadari imbas dari ide gila ini. Kami mencoba meminta maaf padanya bahwa ini semua salah kami. Sejak kejadian itu aku dan temenku Chandra tidak lagi saling bertukar jawaban saat ujian. Kami tidak ingin ada korban kedua, ketiga dan seterusnya dari ide sandi kami.

Paling tidak ini bisa menjadi kenangan waktu sekolah secara tidak sadar sudah menerapkan konsep krytography. Dan kami senang melakukannya waktu itu.

My First Blog

bingung mau dibikin apa situs pribadi. setelah dipikir-pikir akhirnya aku coba tanem wordpress aja di sini.

Dan pertualanganku akan segera dimulai …