Tampilkan postingan dengan label html. Tampilkan semua postingan
Tampilkan postingan dengan label html. Tampilkan semua postingan

Kamis, 20 Agustus 2015

Mengenal dan Menangkal SQL Injection

SQL Injection dapat merusak database kita. Itulah hal penting yang harus kita ketahui sebelumnya. Jadi, saya akan berbagi pengetahuan tentang SQL Injection yang sudah saya miliki.

Apa itu SQL Injection?

SQL Injection adalah suatu teknik yang memungkinkan pengguna nakal untuk menyuntikkan atau memasukkan perintah SQL ke dalam pernyataan SQL, melalui inputan yang ada pada halaman web. Perintah SQL yang disuntikkan dapat mengubah pernyataan SQL dan mengganggu keamanan aplikasi web.

Contohnya, dengan teknik ini seseorang bisa saja masuk (login) ke dalam sistem tanpa harus memiliki akun(username dan password). Bukan hanya itu saja, SQL Injection juga memungkinkan seseorang untuk memanipulasi (create, read, update, delete) suatu data dalam database... berbahaya bukan?

Beberapa teknik SQL Injection

Kita tidak akan membahas teknik SQL Injection terlalu banyak, karena ilmu security saya masih cetek. Jadi, kita akan membahas yang umum saja.

OR 1=1 itu selalu benar

1=1 itu benar, karena satu memang satu. Iya, kan?

Sebagai contoh, coba kita katakan kalau tujuan kode SQL dibuat adalah untuk memilih user yang telah diberikan user id. Jika tidak ada yang mencegah pengguna untuk memasukkan inputan yang 'salah', pengguna dapat memsukkan inputan yang 'pintar' seperti :

Username

Maka perintah SQL yang akan dieksekusi adalah

SELECT * FROM user WHERE username='' OR 1=1
Arti dari pernyataan SQL berikut adalah memilih semua kolom dari tabel user dimana username kosong atau 1=1.Dengan kata lain, username apapun akan dianggap benar dan dapat memasuki sistem.

OR "="sama dengan TRUE

Bayangkan ada sebuah form untuk mem-verifikasi user login ke sebuah situs web.


Username :
Password :

Dan kode php untuk verifikasinya seperti ini

sql = "SELECT * FROM user WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'"

Seorang hacker pintar bisa saja mendapatkan akses username dan password dalam database hanya dengan memasukkan "or""=" pada username dan password. Sehingga hasilnya seperti berikut:

sql = "SELECT * FROM user WHERE username=""or""="" AND password=""or""=""

Hasil pernyataan SQL di atas valid, dan akan menampilkan seluruh baris yang ada dalam tabel user karena ""="" selalu bernilai TRUE.

 SQL Batched

Kebanyakan database mendukung SQL Batched, yang dipisahkan dengan titik koma (;).

Bayangkan jika anda mempunyai inputan seperti berikut

userid


Dan akan menghasilkan pernyataan seperti berikut:

SELECT * FROM user WHERE username=105;DROP TABLE nama_tabel

Meskipun pengguna tidak berhasil memasuki sistem, akan tetapi pengguna akan menghapus tabel nama_tabel dari database.

Perlindungan

 Salah satu cara untuk melindungi serangan SQL Injection adalah dengan menggunakan parameter SQL. Parameter SQL adalah nilai-nilai yang ditambahkan ke dalam sebuah query SQL ketika dieksekusi, dengan cara yang terkendali.

Untuk php non-OOP, dapat menggunakan mysql_real_escape_string(). Sedangkan php OOP yang menggunakan pdo menggunakan cara berikut :

$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd);
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();

Untuk php OOP yang menggunakan mysqli, mirip dengan yang pdo di atas.


--------
Untuk referensi, silahkan kunjungi https://en.wikipedia.org/wiki/SQL_injection
Sekian, kalau ada pertanyaan jangan malu untuk bertanya.

Rabu, 19 Agustus 2015

ID dan CLASS pada CSS

Kita akan membahas mengenai id dan class yang ada pada css nih. Saya anggap anda sekalian sudah paham sintaks css dan html.

Pertama, apa itu id dan class di css? Jawabannya simpel, id dan class itu merupakan selector css (saya rasa). Sebagai alternatif, kalau selector menggunakan elemen html dirasa terlalu ribet. Sebagai contoh, kalau ada script html seperti ini

<div>
  <h1>Header1</h1>
  <div>
    <h1>Header2</h1>
  </div>
</div>
Maka, kalau kita hanya ingin mengakses <h1>Header2</h1> maka tidak mungkin kita menggunakan css

div h1{
  ...
}

Karena akan berpengaruh baik pada <h1>Header1</h1> maupun <h1>Header2</h1>. Di sinilah kita bisa menggunakan id ataupun class, dengan catatan: "sesuai kebutuhan".

Selector ID


Selector id digunakan untuk menandai element yang unik. Maksudnya, satu nama id hanya bisa digunakan oleh satu elemen saja. Jika dalam satu halaman web ada elemen yang memiliki nama id sama, maka id hanya akan berpengaruh pada id yang pertama saja. Selector id pada css ditandai dengan "#" (tanpa tanda kutip).
Contoh :

#id1{
  ...Kode CSS... 
}

Sedangkan pada bagian html-nya, misalnya pada header, maka ditulis

<header id="id1">Ini Header</header>

Untuk penulisan nama id, saya sarankan diawali dengan huruf.

Selector Class 

Selector class digunakan untuk menandai elemen-elemen dengan kriteria tertentu pada halaman web. Berbeda dengan selector id yang hanya bisa digunakan oleh sebuah elemen, selector class bisa digunakan oleh elemen manapun. Maksudnya, sebuah selector class bisa dipanggil oleh berbagai elemen pada saat bersamaan. Bahkan, sebuah elemen html bisa memanggil lebih dari satu nama selector class, dengan catatan beberapa class yang dipanggil tidak saling bertentangan style-nya. Selector class ditandai dengan tanda titik "." (tanpa tanda kutip).
Contoh :

.class1{
  ..Kode Css..
}

Sedangkan pada elemen html-nya, misalnya div.

<div class="class1">Ini kotak div</div>

Kalau digunakan pada elemen footer, maka :

<footer class="class1">Ini footer</footer>

Sama seperti id, saya sarankan huruf pertama nama class adalah huruf. Sekalian untuk mempermudah mengingat.

Sekarang, bagaimana caranya satu element html mengakses beberapa class sekaligus?
Pertama, kita bayangkan ada beberapa class pada css seperti berikut :

.latar-hitam{
  background-color: #000;
}
.text-putih{
  color: #fff;
}
.padding16{
  padding: 16px;
}
Kemudian ada sebuah paragraf yang akan menggunakan class .layar-hitam .text-putih dan .padding16
Cara memanggil beberapa class itu cukup dengan menambahkan nama class-nya dan dipisahkan dengan spasi menjadi class="layar-hitam text-putih padding16"

<p class="layar-hitam text-putih padding16">Paragraf</p>
Dengan begitu, paragraf itu akan memiliki background hitam sesuai dengan .layar-hitam, teks berwarna putih sesuai .text-putih dan padding 16px sesuai .padding16

Ada pertanyaan? Silahkan komentarnya.
Semoga Bermanfaat...

Selasa, 18 Agustus 2015

Membuat CSS Framework Sendiri

 Pernahkah terpikirkan dalam benak kalian untuk membuat sebuah css framework sendiri? Sayang sekali jika anda tidak pernah berpikir untuk membuatnya, karena saya ketika pertama kali bertemu dengannya langsung ingin membuat versi saya sendiri. Tentu saja itu bukan hal yang mudah untuk dilakukan. Tapi, bukan pula hal yang mustahil untuk anda dan saya lakukan.
Keinginan untuk membuat css framework semakin kuat ketika saya mengenal yang namanya w3.css. Kalau mau buat css framework sekelas bo*tstrap, saya rasa terlalu banyak kodenya (dan mungkin lumayan rumit). Tapi kalau yang mirip-mirip sama w3.css mungkin bisa.

Konsep dari css framework yang akan kita buat ini hanya pemanggilan class, itu saja. Berhubung sebuah elemen html bisa memanggil lebih dari satu class. Silahkan pelajari w3.css atau pahami pemanggilan class di html. Karena di sini, saya tidak akan menjelaskan secara rinci pembuatan css framework akan tetapi hanya memberikan tips dan masukan yang mungkin saja berguna.

Yang anda perlukan untuk membuat css framework adalah :
  1. Pemahaman tentang css yang memadahi

     Ini sangat penting, karena jika kalian tidak paham css maka kemungkinan besar css framework yang akan kalian buat tidak akan pernah selesai. Namanya juga css framework, jadi ya harus ngerti css dulu. Mulai dari selector sampai transisi dan animasi css. Tapi yah, kembali lagi kepada diri kalian sendiri.
  2. Tentukan apa saja kemampuan css framework yang akan kalian buat

     Kalau mau buat css framework, tentu harus ada kemampuan dari framework tersebut yang bisa memudahkan kita untuk membuat tampilan website bukan? Seperti warna, bentuk, responsif, transisi dan animasi, dll. Penentuan kemampuan framework ini akan menjadi acuan ketika kalian mulai ngoding css framework yang kalian buat. Untuk awal-awal, jangan terlalu WOW dulu. Sesuai kemampuan yang sudah ada saja.
  3. Mulai dari yang sederhana

    Ketika membuat css framework, mulailah dari yang paling sederhana. Seperti warna, margin, padding, atau font. Barulah secara bertahap, selesaikan bagian yang sulit.
Itu saja dahulu. Yang paling penting dari "make something" adalah ulet dan tekun plus kerja keras.
Jika ada yang ingin ditanyakan, silahkan komentar ... Jangan malu. Karena saya yakin, ia tertutupi.

Senin, 17 Agustus 2015

Membuat segitiga dengan css

Kali ini kita akan membuat segitiga dengan css. Membuat segitiga dengan css tidak sulit, hanya perlu sedikit pemahaman mengenai css border. Langsung saja, pertama kita akan membuat segitiga sama kaki berdiri.

html-nya.

<div class="atas"></div>
sedangkan css-nya.

.atas{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-bottom: 50px solid black;
  border-left: 30px solid tranparent;
  border-right: 30px solid tranparent;
}
Hasilnya:

Dengan div yang sama, kalau kita ingin membuat segitiga terbalik tinggal ganti css

border-bottom: 50px solid black;

Menjadi...

border-top: 50px solid black;

Dan hasilnya.

Intinya, kalau ingin membuat segitiga ke atas jangan kasih border-top, tapi kasih border-bottom. Sedangkan kalau ingin membuat segitiga ke bawah jangan kasih border-bottom, tapi border-top. Begitu juga kalau mau membuat segitiga yang mengarah ke samping kiri ataupun kanan.
Contoh :

<div class="kiri"></div>
<div class="kanan"></div>
css-nya

.kiri{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-top: 30px solid tranparent;
  border-bottom: 30px solid tranparent;
  border-right: 50px solid black;
}

.kanan{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-top: 30px solid tranparent;
  border-bottom: 30px solid tranparent;
  border-left: 50px solid black;
}

Hasilnya...
Bisa kita lihat baik width ataupun height-nya nol. Jadi, besar kecilnya ukuran segitiga ditentukan oleh seberapa besar atau tebal border yang digunakan.

Bagaimana kalau mau membuat segitiga yang arahnya ke sudut?

<div class="kiri-atas"></div>
<div class="kanan-atas"></div>

.kiri-atas{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-top: 50px solid black;
  border-right: 50px solid transparent;
}

.kanan-atas{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-top: 50px solid black;
  border-left: 50px solid tranparent;
}


Yang sudut bawah

<div class="kiri-bawah"></div>
<div class="kanan-bawah"></div>

.kiri-bawah{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-bottom: 50px solid black;
  border-right: 50px solid transparent;
}

.kanan-bawah{
  margin: 30px;
  width: 0px;
  height: 0px;
  border-bottom: 50px solid black;
  border-left: 50px solid tranparent;
}

Silahkan download source codenya di sini.

Kamis, 13 Agustus 2015

Navigasi Fixed Ketika di Scrool

Kali ini kita akan membuat menu navigasi yang akan otomatis fixed ketika di scrool. Tidak terlalu rumit kok. Cuma beberapa baris JavaScript menggunakan jQuery. Baiklah, mari kita mulai.

Pertama, kita buat halamannya.

<!doctype html>
<html>
<head>
 <title>nav-fixed-scrool</title>
 <link rel="stylesheet" type="text/css" href="style.css">
 <script type="text/javascript" src="jquery-1.11.3.min.js"></script>
</head>
<body>
 <header id="menu1">
  <h1>Ini Header</h1>
 </header>
 <nav>
  <ul>
   <a href="#menu1"><li>Home</li></a>
   <a href="#menu2"><li>Portofolio</li></a>
   <a href="#menu3"><li>Tentang Kami</li></a>
   <a href="#menu4"><li>Hubungi Kami</li></a>
  </ul>
 </nav>
 <section>
  <article id="menu2">
   <h1>Portofolio</h1>
  </article>
  <article id="menu3">
   <h1>Tentang Kami</h1>
  </article>
  <article id="menu4">
   <h1>Hubungi Kami</h1>
  </article>
 </section>
</body>
</html>
Untuk jQuery-nya bisa di download di sini. Nanti muncul halaman, terus di-SaveAs.

Lalu buat file css di folder yang sama dengan html tadi. Nama file css-nya style.css

body *{margin:0px;}
header{
 width: 100%;
 height: 250px;
 background-color: orange;
}
nav{
 position: absolute;
 width: 100%;
 height: 50px;
 background-color: #333;
}
nav a{
 display: inline-block;
 padding-right: 20px;
 text-decoration: none;
 font-size: 14pt;
 cursor: pointer;
 color: #fff;
}
nav a:hover{
 color:  orange;
}
article{
 padding-top: 50px;
 width: 100%;
 height: 500px;
 background-color: orange;
 border-top: 5px solid #333;
}
Yang terakhir, tambahkan script berikut di atas tag </head>.


<script type="text/javascript">
 $(document).ready(function(){
  $(window).scroll(function(){
    var y = $(window).scrollTop();
    if (y>=250){
     $("nav").css({
      "position":"fixed",
      "top":"0px"
     });
    }else{
     $("nav").css({
      "position":"absolute",
      "top":"250px"
     });
    };
  });
 });
 </script>
Selesai...

Untuk yang butuh source code-nya, bisa di download

Rabu, 12 Agustus 2015

Membuat Game Puzzle Sederhana dengan HTML, CSS dan JavaScript (part2)

Melanjutkan permasalahan yang kemarin. Kok kalau gambarnya didrag n drop ke gambar lain, gambar yang didrag ngilang? Kuncinya ada di javascript.

Ubah bagian function JavaScript

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}

Menjadi

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    var u = ev.target.id;
    var i = u.substr(0,1);
    if (i!="g") {
     ev.target.appendChild(document.getElementById(data));
    };
}

Penjelasan :

Di sini, gambar harus mempunyai id yang berawalan huruf "g". Jika konten yang didrag diletakkan di konten yang memiliki id yang berawalan "g", maka tidak dilakukan pertukaran data seperti seharusnya. Jadi, gambar tidak bisa diletakkan ke dalam gambar karena gambar memiliki id yang berawalan "g".

Untuk lebih jelasnya, silahkan download contohnya di sini.

Silahkan diobrak-abrik codenya biar paham. Atau silahkan kunjungi Membuat Game Puzzle Sederhana dengan HTML, CSS dan JavaScript (part1).

Selasa, 11 Agustus 2015

Membuat Game Puzzle Sederhana dengan HTML, CSS dan JavaScript (part1)

Kali ini kita akan membuat semacam game puzzle gambar dengan memanfaatkan css clip yang pernah saya posting sebelumnya di sini, dan juga sedikit javascript yang saya dapatkan dari w3shcools.com di sini.

Kenapa kita memerlukan css clip? Ada yang bertanya seperti itu? Kalau ada, maka jawaban saya adalah tentu saja untuk memotong gambar. Agar cukup satu gambar saja yang kita gunakan pada game ini. Tapi, jika kalian tidak menggunakan css clip juga tidak masalah. Asalkan mau memotong gambar yang akan kalian gunakan menjadi beberapa bagian.

Lalu gunanya javascript itu buat apa? Ya buat nge-drag and nge-drop gambarlah. Ini adalah bagian pentingnya. Tanpa javasript ini, gambar tidak akan bisa di-drag maupun di-drop. Tenang saja, javascript-nya gak banyak kok. Cuma se-di-kit aja.

Baiklah, mari kita buat puzzle-nya!

Pertama, kita akan memilih gambar yang akan kita gunakan. Di sini, saya akan menggunakan gambar di bawah.



Kedua, buat tiga buah file kosong dengan nama game.html, game.css dan game.js. Pada game.html, kita tulis :

<!doctype html>
<html>
<head>
  <title>puzzle</title>
  <link rel="stylesheet" type="text/css" href="game.css">
  <script type="text/javascript" src="game.js"></script>
</head>
<body>

</body>
</html>

Setelah itu, buat tiga buah div di dalam body dengan class all dan gbr. Jangan lupa masukkan gambar kita ke dalam div yang class-nya gbr.

<div class="all"></div>
<div class="gbr">
  <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
</div>

Kemudian buat sebuah tabel dengan 5 kolom dan 2 baris di bawah kedua div sebelumnya. Pastikan cellspacing dan cellpadding bernilai nol. Biar kelihatan, nilai border dibuat menjadi 1.

<table cellspacing="0" cellpadding="0" border="1">
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

Lalu kita buka game.css dan tulis : 

.all{
  position: absolute;
  width: 100%;
  height: 100%;
}
.gbr{
  float: left;
}
.gbr img{
  width: 400px;
  height: 400px;
  border: 2px solid black;
  opacity: .5;
}
table{
  float: left;
  position: absolute;
}

Kali ini kita akan menyusutkan gambarnya sehinggal panjang dan lebar gambar menjadi 400px (lihat yang di-mark di atas). Jadi, akan lebih baik jika kalian menggunakan gambar yang nilai panjang dan lebarnya sama. Agar gambar tetap kelihatan bagus.

Masukkan div dengan class box dan juga id mulai d1 sampai d4 ke dalam cell atau td, kecuali td urutan yang ketiga. Sekalian drag event dan drop event juga. Nanti hasilnya akan seperti ini :

<table cellspacing="0" cellpadding="0" border="1">
  <tr>
    <td>
      <div class="box" id="d1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    </td>
    <td>
      <div class="box" id="d2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    </td>
    <td></td>
    <td>
      <div class="box" id="d3" ondrop="drop(event)" ondragover="allowDrop(event)">
        <img draggable="true" ondragstart="drag(event)" class="k21" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
      </div>
    </td>
    <td>
      <div class="box" id="d4" ondrop="drop(event)" ondragover="allowDrop(event)">
        <img draggable="true" ondragstart="drag(event)" class="k11" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
      </div>
    </td>
  </tr>
  <tr>
    <td>
      <div class="box" id="d5" ondrop="drop(event)" ondragover="allowDrop(event)"&  gt;</div>
    </td>
    <td>
      <div class="box" id="d6" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    </td>
    <td></td>
    <td>
      <div class="box" id="d7" ondrop="drop(event)" ondragover="allowDrop(event)">
        <img draggable="true" ondragstart="drag(event)" class="k22" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
      </div>
    </td>
    <td>
      <div class="box" id="d8" ondrop="drop(event)" ondragover="allowDrop(event)">
        <img draggable="true" ondragstart="drag(event)" class="k12" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
      </div>
    </td>
  </tr>
</table>

Kemudian masukkan gambar pada 2 div terakhir masing-masing tr. Lihat script atas.

<img draggable="true" ondragstart="drag(event)" class="k11" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">

Pastikan gambar mempunyai class mulai dari k11, k12, k21 dan k22. Gambar yang mempunyai class k11 akan kelihatan pojok kiri atas, k12 pojok kanan atas, k21 pojok kiri bawah dan k22 pojok kanan bawah. Jadi, jangan sampai ada gambar dengan class yang sama ataupun double. kalau sampai ada, nanti gambarnya gak bisa diselesaikan.

Di game.css tambahkan script css ini dibawahnya.

.box{
  width: 200px;
  height: 200px;
}
.box img{
  position: absolute;
  width: 400px;
  height: 400px;
}
.k11{
  clip: rect(0px, 200px, 200px, 0px);
}
.k12{
  clip: rect(0px, 400px, 200px, 200px);
  margin-left: -200px;
}
.k21{
  clip: rect(200px, 200px, 400px, 0px);
  margin-top: -200px;
}
.k22{
  clip: rect(200px, 400px, 400px, 200px);
  margin-top: -200px;
  margin-left: -200px;
}

Script css di ataslah yang berperan penting dalam pemotongan gambar.
Buka gambar.js dan tulis.

function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}

Hasilnya :
















Lho? Kok gak bisa digerakin sih? Ada yang tahu penyebabnya? Kita lupa menambahkan id pada gambar. Ok, kita tambahkan id. Id gak boleh ada yang sama ya! Kita kasih id g1 sampai g4 aja.

Jadi...
<!doctype html>
<html>
<head>
 <title>puzzle</title>
 <link rel="stylesheet" type="text/css" href="game.css">
 <script type="text/javascript" src="game.js"></script>
</head>
<body>
 <div class="all"></div>
 <div class="gbr">
  <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
 </div>
 <table border="0" cellspacing="0" cellpadding="0">
  <tr>
   <td>
    <div class="box" id="d1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
   </td>
   <td>
    <div class="box" id="d2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
   </td>
   <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
   <td>
    <div class="box" id="b1" ondrop="drop(event)" ondragover="allowDrop(event)">
     <img id="g4" draggable="true" ondragstart="drag(event)" class="k22" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
    </div>
   </td>
   <td>
    <div class="box" id="b2" ondrop="drop(event)" ondragover="allowDrop(event)">
     <img id="g3" draggable="true" ondragstart="drag(event)" class="k21" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
    </div>
   </td>
  </tr>
  <tr>
   <td>
    <div class="box" id="d3" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
   </td>
   <td>
    <div class="box" id="d4" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
   </td>
   <td></td>
   <td>
    <div class="box" id="b3" ondrop="drop(event)" ondragover="allowDrop(event)">
     <img id="g2" draggable="true" ondragstart="drag(event)" class="k12" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
    </div>
   </td>
   <td>
    <div class="box" id="b4" ondrop="drop(event)" ondragover="allowDrop(event)">
     <img id="g1" draggable="true" ondragstart="drag(event)" class="k11" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWLJ4GXFO9YYPWxS9MpaA5LqzYNk3gEpWZw19RwJSptZR_IMzeVQcKIpvD5-gMFW_8xk4USJAYWIM8G2A2Y7gkZRWFmuPdzQXB3iWsl_b1g1w6yESdeciMEfL7M2vfwc7udt3Lyqny-Vmy/s1600/photo.jpg">
    </div>
   </td>
  </tr>
 </table>
</body>
</html>



















Tapi, kalau gambarnya di drag n drop ke gambar kok ngilang?
Kita akan mengatasi masalah itu di part2. Silahkan klik di sini untuk menuju part2. Tunggu besok ya...