Author Archives: admin

Responsive Web Design

Dalam membuat website atau aplikasi berbasis web sebaiknya menggunakan disain web responsif (Responsive Web Design / RWD). Dengan RWD website atau aplikasi web kita dapat ditampilkan dengan baik di berbagai ukuran (diagonal) layar. Misalnya di TV dengan ukuran layar besar > 20 inch, di PC laptop/desktop 10-20 inch, atau di tablet / smartphone < 10 inch.

RWD terkait resolusi layar seperti UHD (3840 x 2160), FHD (1360px X 768px), HD (1024px X 768px), ataupun nHD (360p× X 640px).

Tampilan website atau aplikasi berbasis web yang responsif akan meningkatkan aksesibilitas (accessibility), usabilitas (usability) dan kepuasan pengguna (user satisfaction). Disamping itu juga akan mengurangi biaya pengembangan (Reduced development costs) karena tidak perlu membuat kode terpisah untuk device yang berbeda, dan dapat meningkatkan level SEO (Search Engine Optimization) karena lebih user-friendly dan mudah diakses.

Untuk membuat tampilan website atau aplikasi web dengan RWD, pertama kita perlu menambahkan dulu tag <meta> pada bagian HTML <head>, berikut ini.

 


 

Setelah itu kita bisa membuat layout web menggunakan CSS dengan 3 cara:

  1. CSS Layout Float
  2. CSS Layout Flexbox
  3. CSS Layout Grid

CSS memiliki @media rule yang diperkenalkan pada CSS2. @media rule ini digunakan untuk membuat style yang berbeda pada setiap tipe media. Misalnya: membuat rule style untuk layar PC, untuk printers, untuk smartphone, untuk TV, dan sebagainya.

Contoh kode CSS Media Queries untuk membuat style warna background biru pada device layar kecil (< 480px):

@media screen and (min-width: 480px) {
body {
background-color: #0000ff;
}
}

Berikut ini kode HTML5 dengan CSS Layout Float.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>RWD with CSS float</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style>
      * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
      }
      body {
        font-family: Arial, Helvetica, sans-serif;
      }

      /* Style the header */
      header {
        background-color: #666;
        padding: 10px;
        text-align: center;
        font-size: 35px;
        color: white;
      }

      /* Create two columns that floats next to each other */
      nav {
        float: left;
        width: 15%;
        height: 300px;
        background: #ccc;
        padding: 20px;
      }

      /* Style the list inside the menu */
      nav ul {
        list-style-type: none;
        padding: 10px;
      }

      article {
        float: left;
        padding: 20px;
        width: 85%;
        background-color: #f1f1f1;
        height: 300px;
      }

      /* Clear floats after the columns */
      section::after {
        content: "";
        display: table;
        clear: both;
      }

      /* Style the footer */
      footer {
        background-color: #777;
        padding: 10px;
        text-align: center;
        color: white;
      }

      /* Responsive layout on small screens
      makes two columns stack on top of each other instead of next to each other*/
      @media (max-width: 600px) {
        nav,
        article {
          width: 100%;
          height: auto;
        }
      }
    </style>
  </head>
  <body>
    <header>
      <p>R W D</p>
    </header>

    <section>
      <nav>
        <ul>
          <li><a href="#">HTML5</a></li>
          <li><a href="#">CSS3</a></li>
          <li><a href="#">JavaScript ES6</a></li>
        </ul>
      </nav>

      <article>
        <h1>Responsive Web Design (RWD)</h1>
        <p>
          This website is using CSS Layout Float. We create a header, two
          columns/boxes and a footer. On smaller screens, the columns will stack
          on top of each other.
        </p>
        <p>Resize the browser window to see the responsive effect.</p>
        <p>
          You can learn more about this in
          <a href="https://www.w3schools.com/html/html_responsive.asp"
            >HTML Responsive.</a
          >
        </p>
      </article>
    </section>

    <footer>
      <p>&copy; 2023</p>
    </footer>
  </body>
</html>

Berikut ini kode HTML5 dengan CSS Layout Flex.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>RWD with CSS Flexbox</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style>
      * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
      }
      body {
        font-family: Arial, Helvetica, sans-serif;
      }

      /* Style the header */
      header {
        background-color: #666;
        padding: 10px;
        text-align: center;
        font-size: 35px;
        color: #fff;
      }

      /* Container for flexboxes */
      section {
        display: flex;
      }

      /* Style the navigation menu */
      nav {
        flex: 1;
        background: #ccc;
        padding: 20px;
        height: 300px;
      }

      /* Style the list inside the menu */
      nav ul {
        list-style-type: none;
        padding: 0;
      }

      /* Style the content */
      article {
        flex: 6;
        background-color: #f1f1f1;
        padding: 10px;
      }

      /* Style the footer */
      footer {
        background-color: #777;
        padding: 10px;
        text-align: center;
        color: white;
      }

      /* Responsive layout 
      makes the menu and the content (inside the section) sit on top of each other 
      instead of next to each other */
      @media (max-width: 600px) {
        section {
          flex-direction: column;
        }
      }
    </style>
  </head>
  <body>
    <header>
      <p>R W D</p>
    </header>

    <section>
      <nav>
        <ul>
          <li><a href="#">HTML5</a></li>
          <li><a href="#">CSS3</a></li>
          <li><a href="#">JavaScript ES6</a></li>
        </ul>
      </nav>

      <article>
        <h1>Responsive Web Design (RWD)</h1>
        <p>
          This website is using CSS Layout Flexbox. We create a header, two
          columns/boxes and a footer. On smaller screens, the columns will stack
          on top of each other.
        </p>
        <p>Resize the browser window to see the responsive effect.</p>
        <p>
          <strong>Note:</strong> Flexbox is not supported in Internet Explorer
          10 and earlier versions.
        </p>
        <p>
          You can learn more about this in
          <a href="https://www.w3schools.com/html/html_responsive.asp"
            >HTML Responsive.</a
          >
        </p>
      </article>
    </section>

    <footer>
      <p>&copy; 2023</p>
    </footer>
  </body>
</html>

Berikut ini kode HTML5 dengan CSS Layout Grid.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>RWD with CSS Grid</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        font-family: Arial, Helvetica, sans-serif;
      }
      .wrapper {
        display: grid;
        grid-gap: 0.1em;
        grid-template-areas: "header" "sidebar" "content" "sidebar2" "footer";
      }
      header {
        grid-area: header;
        padding: 10px;
        background-color: #666;
        color: #fff;
        text-align: center;
        font-size: 35px;
      }
      nav {
        grid-area: sidebar;
        padding: 20px;
        background-color: #ccc;
        color: #444;
        width: 180px;
        height: 300px;
      }
      aside {
        grid-area: sidebar2;
        padding: 10px;
        background-color: #ccc;
        color: #444;
      }
      section {
        grid-area: content;
        padding: 10px;
      }
      footer {
        grid-area: footer;
        padding: 10px;
        background-color: #666;
        color: #fff;
        text-align: center;
      }

      @media (min-width: 600px) {
        .wrapper {
          grid-gap: 5px;
          grid-template-columns: 220px auto 200px;
          grid-template-areas: "header header  header" "sidebar content sidebar2" "footer  footer  footer";
        }
      }
    </style>
  </head>
  <body>
    <div class="wrapper">
      <header>R W D</header>
      <nav>
        <ul>
          <li><a href="#">HTML5</a></li>
          <li><a href="#">CSS3</a></li>
          <li><a href="#">JavaScript ES6</a></li>
        </ul>
      </nav>
      <aside>Right Sidebar</aside>
      <section>
        <h1>Responsive Web Design (RWD)</h1>
        <p>
          The CSS Grid Layout Module offers a grid-based layout system, with
          rows and columns, making it easier to design web pages without having
          to use floats and positioning.
        </p>
        <p>Resize the browser window to see the responsive effect.</p>
        <p>
          You can learn more about this in
          <a href="https://www.w3schools.com/html/html_responsive.asp"
            >HTML Responsive.</a
          >
        </p>
      </section>
      <footer>&copy; 2023</footer>
    </div>
  </body>
</html>

Silakan Anda coba ketiga teknik tersebut untuk membuat layout website atau aplikasi web menjadi responsif.

AJAX XHR vs Fetch API

Pada posting sebelumnya kita telah mencoba menggunakan AJAX (Asynchronous JavaScript and XML) dengan menggunakan object XHR (XMLHttpRequest), sebuah object JavaScript yang banyak digunakan dalam pengembangan website dinamis.

Pada artikel kali ini kita akan membandingkan teknologi pengembangan web yang menggunakan XHR dengan Fetch API. Keduanya berguna untuk membuat aplikasi web interaktif yang memungkinkan halaman web kita dapat memperbarui informasi secara asinkron tanpa harus memuat ulang seluruh halaman web.

Teknologi Ajax dengan menggunakan XHR sudah diperkenalkan sejak tahun 2006. Pada tahun 2015 diperkenalkan teknologi AJAX baru dengan menggunakan Fetch API. Fetch API dirancang untuk menggantikan teknologi XHR dalam pengambilan data dari server menggunakan JavaScript supaya lebih mudah.

Berikut ini contoh coding perbandingan AJAX XHR dan Fetch API:

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>Belajar Dasar Ajax</title>

  </head>

  <body>

    <h1>Tutorial Ajax</h1>

    <button id="button" onclick="xhrloadContent()">XHR Load Content</button>

    <button id="button2" onclick="fetchloadContent()">

      Fetch API Load Content

    </button>

    <div id="hasil"></div>

    <script>

      const apiUrl = "https://jsonplaceholder.typicode.com/posts";

      const xhr = new XMLHttpRequest();

      xhr.onreadystatechange = function () {

        if (this.readyState === 0) {

          console.log("request not initialized: ", this.readyState);

        }

        if (this.readyState === 1) {

          console.log("server connection established: ", this.readyState);

        }

        if (this.readyState === 2) {

          console.log("request received: ", this.readyState);

        }

        if (this.readyState === 3) {

          console.log("processing request: ", this.readyState);

        }

        if (this.readyState === 4) {

          console.log(

            "request finished and response is ready: ",

            this.readyState

          );

        }

      };

      xhr.open("GET", apiUrl, true);

      xhr.send();

      function xhrloadContent() {

        var xhr = new XMLHttpRequest();

        var url = "https://jsonplaceholder.typicode.com/posts";

        xhr.onloadstart = function () {

          document.getElementById("button").innerHTML = "Loading...";

        };

        xhr.onerror = function () {

          alert("Gagal mengambil data");

        };

        xhr.onloadend = function () {

          if (this.responseText !== "") {

            var data = JSON.parse(this.responseText);

            var template = data.map((post) => {

              return `  <h3>${post.title}</h3>

                        <p>${post.body}</p>

                        <hr>

                        `;

            });

            document.getElementById("hasil").innerHTML = template.join("<br>");

            document.getElementById("button").innerHTML = "Done";

            setTimeout(function () {

              document.getElementById("button").innerHTML = "Load Lagi";

            }, 3000);

          }

        };

        xhr.open("GET", url, true);

        xhr.send();

      }

      function fetchloadContent() {

        var url = "https://jsonplaceholder.typicode.com/posts";

        fetch(url)

          .then((response) => response.json())

          .then((data) => {

            console.log("Success:", data);

            var template = data.map((post) => {

              return `  <h3>${post.title}</h3>

                        <p>${post.body}</p>

                        <hr>

                        `;

            });

            document.getElementById("hasil").innerHTML = template.join("<br>");

          })

          .catch((error) => {

            console.error("Error:", error);

          });

        document.getElementById("button2").innerHTML = "Done";

      }

    </script>

  </body>

</html>

Membuat Center Div

Ada kalanya dalam membuat sebuah halaman web kita membutuhkan bagian yang harus berada di tengah. Biasanya kita menggunakan CSS property “text-align:center”.

Disini akan diberikan 6 cara untuk membuat bagian yang harus berada di tengah itu dengan menggunakan tag div dan CSS.

Cara 1: Menggunakan class parent dan child dengan property “position: relative” dan “margin:auto”

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Centering divs</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }

        #parentContainer {
            width: 100%;
            height: 400px;
            background-color: #2196F3;
            position: relative;
        }

        #childContainer {
            width: 100px;
            height: 100px;
            background-color: #b5deff;
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            margin: auto;
        }
    </style>
</head>

<body>
    <div id="parentContainer">Parent Container
        <div id="childContainer">Child Container</div>
    </div>
</body>

</html>

Cara 2: Menggunakan class parent dan child dengan property “margin: auto” saja

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Centering divs</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }

        .center {
            margin: auto;
            padding: 10px;
            width: 300px;
            border: 3px solid #2196F3;
            background-color: #b5deff;
            text-align: center;
        }
    </style>
</head>

<body>

    <h2>Center Align Elements</h2>
    <p>To horizontally center a block element (like div), use margin: auto;</p>

    <div class="center">
        <p>Hello World!</p>
    </div>

</body>

</html>

Cara 3: Menggunakan property “margin: auto” dengan content image

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Centering divs</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }

        .center {
            display: block;
            margin: auto;
            content: url("./gambartengah.jpg");
        }
    </style>
</head>

<body>

    <h2>Center Align Element</h2>
    <p>To horizontally center a block element (like div), use margin: auto;</p>

    <div class="center"></div>
</body>

</html>

Cara 4: Menggunakan property “position: absolute” dan “transform: translate(-50%, -50%)”

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Centering divs</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }

        .center {
            position: absolute;
            transform: translate(-50%, -50%);
            padding: 10px;
            border: 3px solid green;
            top: 50%;
            left: 50%;
        }
    </style>
</head>

<body>
   <h2>Center with position and transform</h2>

    <div class="center">
        <p>vertically and horizontally centered.</p>
    </div>

</body>

</html>

Cara 5: Menggunakan CSS Flexbox dengan property “display: flex” dan “justify-content: center” serta “align-items: center”

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Center Div 5</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }

        .center {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 400px;
            border: 3px solid green;
        }
    </style>
</head>

<body>
    <h2>Flexbox Centering</h2>
    <div class="center">
        <p>I am vertically and horizontally centered.<br>
            <img src="./gambartengah.jpg" alt="Paris" /></p>
    </div>
</body>

</html>

Cara 6: Menggunakan CSS Grid dengan class parent child dan property “display: grid”, “justify-content: center” serta “align-content: center”

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Center Div 5</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0px;
            padding: 0px;
        }
        .parent {
            display: grid;
            justify-content: center;
            align-content: center;
            height: 600px;
            width: 100%;
            border: 1px solid black;
        }
        .child {
            height: 200px;
            width: 200px;
            background-color: #2196F3;
            text-align: center;
        }
    </style>
</head>

<body>
    <h2>Grid Centering</h2>

    <div class="parent">
        <div class="child">child</div>
    </div>
</body>

</html>

Selamat mencoba, semoga bermanfaat.

Happy Coding!

Membuat Multiple Select Option Checkbox

Pada tulisan kali ini kita akan mencoba membuat multiple select option dengan checkbox. Pada gambar di atas ada 2 bentuk select option. Yang pertama adalah multiple select option tanpa checkbox dan yang kedua adalah multiple select option dengan checkbox.

Untuk membuat multiple select option kita biasanya menggunakan HTML tag <select> dan <option> dengan memberikan atribut ‘multiple’ pada tag select. Berikut ini coding multiple select option yang biasa (tanpa checkbox).

&lt;h2&gt;Multiple Select Option&lt;/h2&gt;
&lt;form&gt;
    &lt;label&gt;Pilihan: &lt;/label&gt;
    Tekan tombol Ctrl untuk memilih beberapa pilihan&lt;br /&gt;
    &lt;select name=&quot;pilih[]&quot; multiple style=&quot;height:70px;width:200px&quot;&gt;
        &lt;option value=&quot;0&quot; disabled&gt;Pilih Opsi&lt;/option&gt;
        &lt;option value='1'&gt;Pilihan Pertama&lt;/option&gt;
        &lt;option value='2'&gt;Pilihan Kedua&lt;/option&gt;
        &lt;option value='3'&gt;Pilihan Ketiga&lt;/option&gt;
    &lt;/select&gt;
    &lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Submit&quot;&gt;&lt;/p&gt;
&lt;/form&gt;

Untuk beberapa memilih opsi, kita harus tekan dan tahan tombol ‘Ctrl’ pada keyboard lalu klik opsi-opsi yang ada. Jika kita klik lagi satu opsi tanpa tekan tombol Ctrl maka pilihan yang sudah dipilih tadi akan hilang dan kita harus pilih lagi. Ini tentunya akan sedikit menyulitkan.

Nah, sekarang kita coba buat multiple select option dengan checkbox supaya kita tidak perlu menggunakan tombol ‘Ctrl’ untuk memilih opsinya sehingga opsi-opsi yang sudah dipilih tadi tidak hilang karena lupa tekan tombol ‘Ctrl’. Berikut ini coding multiple select option dengan checkbox. Pada coding tersebut kita menggunakan CSS untuk menempatkan posisi checkbox sedemikian rupa sehingga tampilannya seperti pada gambar diatas. Kita juga menggunakan javascript untuk membuat dropdown selectBox.

&lt;style&gt;
.multiselect{width:200px;}
.selectBox{position: relative;}
.selectBox select {width:100%;}
.overSelect {position: absolute;left: 0;right: 0;top: 0;bottom: 0;}
#checkboxes {display: none;border: 1px #a0a0a0 solid;}
#checkboxes label {display: block;}
#checkboxes label:hover {background-color: #1e90ff;}
&lt;/style&gt;

&lt;h2&gt;Multiple Select Option Checkbox&lt;/h2&gt;
&lt;form&gt;
    &lt;div class=&quot;multiselect&quot;&gt;
        &lt;div class=&quot;selectBox&quot; onclick=&quot;showCheckboxes()&quot;&gt;
            &lt;select&gt;
                &lt;option readonly&gt;Pilih opsi&lt;/option&gt;
            &lt;/select&gt;
            &lt;div class=&quot;overSelect&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div id=&quot;checkboxes&quot;&gt;
            &lt;label for=&quot;satu&quot;&gt;
            &lt;input type=&quot;checkbox&quot; id=&quot;satu&quot; name=&quot;pilih[]&quot; value=&quot;1&quot; /&gt;Pilihan Pertama&lt;/label&gt;
            &lt;label for=&quot;dua&quot;&gt;
            &lt;input type=&quot;checkbox&quot; id=&quot;dua&quot; name=&quot;pilih[]&quot; value=&quot;2&quot; /&gt;Pilihan Kedua&lt;/label&gt;
            &lt;label for=&quot;tiga&quot;&gt;
            &lt;input type=&quot;checkbox&quot; id=&quot;tiga&quot; name=&quot;pilih[]&quot; value=&quot;3&quot; /&gt;Pilihan Ketiga&lt;/label&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Submit&quot;&gt;&lt;/p&gt;
&lt;/form&gt;

&lt;script&gt;
    var expanded = false;
    function showCheckboxes() {
        var checkboxes = document.getElementById(&quot;checkboxes&quot;);
        if (!expanded) {
            checkboxes.style.display = &quot;block&quot;;
            expanded = true;
        } else {
            checkboxes.style.display = &quot;none&quot;;
            expanded = false;
        }
    }
&lt;/script&gt;

Selamat mencoba. Happy coding…

Membuat Dialog Box dengan HTML tag Dialog

Hai semua… kali ini saya akan memberikan cara membuat modal dialog box menggunakan tag HTML <dialog> dan javascript tanpa jquery.

Pada intinya tag dialog itu akan membuat kotak khusus sebagai subwindow atau bagian lain dari window kita. Biasanya dipakai untuk membuat pemberitahuan (alert) atau popup windows tanpa membuka window browser baru.

Contohnya kita ingin menampilkan dialog box berisi form yang bisa diisi dan diambil datanya.

&lt;dialog id=&quot;dialogBox&quot;&gt;
        &lt;form method=&quot;dialog&quot;&gt;
            &lt;p&gt;&lt;label&gt;Warna favorit:
                    &lt;select&gt;
                        &lt;option&gt;&lt;/option&gt;
                        &lt;option&gt;Merah&lt;/option&gt;
                        &lt;option&gt;Kuning&lt;/option&gt;
                        &lt;option&gt;Hijau&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/label&gt;&lt;/p&gt;
            Nama: &lt;input type=&quot;text&quot; name=&quot;nama&quot; id=&quot;nama&quot; size=&quot;5&quot; /&gt;
            &lt;menu&gt;
                &lt;button value=&quot;cancel&quot;&gt;Cancel&lt;/button&gt;
                &lt;button id=&quot;confirmBtn&quot; value=&quot;default&quot;&gt;Confirm&lt;/button&gt;
            &lt;/menu&gt;
        &lt;/form&gt;
    &lt;/dialog&gt;

    &lt;menu&gt;
        &lt;button id=&quot;openForm&quot;&gt;Open form&lt;/button&gt;
    &lt;/menu&gt;

    &lt;output aria-live=&quot;polite&quot;&gt;&lt;/output&gt;

Ada 2 field dalam form ini yaitu combo box dan text box. Kemudian diberikan 2 tombol: Cancel dan Confirm di dalam form tersebut.

Lalu kita sediakan tombol untuk membuka dialog form tersebut.

Tag output disediakan untuk menampilkan form dialog box yang dibuka dengan tombol ‘Openform’. Attribut aria-live=”polite” pada tag output diberikan untuk membuat screen reader menunggu sampai user melakukan perubahan pada tag output.

Selanjutnya kita buat coding javascriptnya berikut ini.

        const updateButton = document.getElementById('openForm');
        const dialogBox = document.getElementById('dialogBox');
        const outputBox = document.querySelector('output');
        const selectEl = document.querySelector('select');
        const nama = document.getElementById('nama');
        const confirmBtn = document.getElementById('confirmBtn');

        // &quot;Open form&quot; button opens the &lt;dialog&gt; modally
        updateButton.addEventListener('click', function onOpen() {
            if (typeof dialogBox.showModal === &quot;function&quot;) {
                dialogBox.showModal();
            } else {
                alert(&quot;The &lt;dialog&gt; API is not supported by this browser&quot;);
            }
        });
        // input sets the value of the submit button
        selectEl.addEventListener('change', function onSelect(e) {
            confirmBtn.value = selectEl.value;
        });
        // &quot;Confirm&quot; button of form triggers &quot;close&quot; on dialog because of [method=&quot;dialog&quot;]
        dialogBox.addEventListener('close', function onClose() {
            outputBox.value = &quot;Warna favorit &quot; + nama.value + &quot; adalah &quot; + dialogBox.returnValue;
        });

Itulah cara untuk membuat modal dialog box dengan html tag <dialog> dan javascript sederhana. Selamat mencoba, semoga berhasil.

Mengamankan Data Input User

Pada artikel sebelumnya, saya telah menuliskan tentang cara Membuat Script Login yang Aman dengan PHP dan MySQL. Kali ini saya akan berikan sekali lagi cara mengamankan data yang di-input oleh user.

Jika kita ingin mendapatkan data dari user, tentu kita sediakan field input. Pada dasarnya user dapat memasukan apa saja dalam field input tersebut.

“Never trust user data”

Nah, supaya data yang diinput oleh user itu aman, kita perlu melakukan validasi terhadap data tersebut.
Caranya?

1. Pakai PHP strip_tags()
Contoh:
<?php
$user_input = "alert(‘AWAS!’);”;
echo strip_tags($user_input);
?>

2. Pakai trim(htmlspecialchars())
Contoh:
<?php
$user_input = "alert(‘AWAS’);”;
echo trim(htmlspecialchars($user_input));
}
?>

3. Pakai filter_input()
Contoh:
<?php
$user_input = "alert(‘AWAS’);”;
echo filter_input($user_input, FILTER_SANITIZE_STRIPPED);
?>

Untuk filter_input() tersedia beberapa pilihan filter.
Contoh:
filter_input($user_input, FILTER_SANITIZE_STRIPPED);
filter_input($user_input, FILTER_SANITIZE_STRING);
filter_input($user_input, FILTER_VALIDATE_EMAIL);
filter_input($user_input, FILTER_VALIDATE_INT);
filter_input($user_input, FILTER_VALIDATE_URL);

Anda bisa baca perbedaannya di sini https://www.php.net/manual/en/filter.filters.sanitize.php

Jadi supaya data yang di-input oleh user itu aman, sebenarnya kita cukup berikan filter_input() pada setiap field yang di-input oleh user. Pastikan setelah di-filter datanya sesuai yang kita mau ya…

Selamat mencoba. Semoga sukses.

Membuat Header dan Footer tetap di atas dan di bawah

Kita akan membuat header tetap berada di atas dan footer tetap berada di bawah jika posisi content di-scroll seperti pada gambar di atas. Walaupun content hanya berisi beberapa baris namun header dan footer tetap di posisinya.

Pada bagian div class fixed-header diberikan CSS properti top:0 untuk membuat header pada posisi atas layar dan pada bagian div class fixed-footer diberikan CSS properti bottom:0 untuk membuat footer pada posisi bawah layar. Untuk membuat posisi header dan footer tetap di posisinya, maka kita berikan CSS properti position: fixed; Walaupun halaman web ini di scroll namun posisi header tetap berada di atas dan footer tetap berada di bawah. Sebagai testing scroll halaman web diberikan CSS properti line-height: 100px; supaya halaman lebih panjang untuk scroll.

Berikut coding CSS dan HTML selengkapnya.

        body {
            margin: 0;
            padding: 0;
        }

        nav a {
            color: #fff;
            text-decoration: none;
            padding: 10px;
            display: inline-block;
        }

        nav a:hover {
            background-color: red;
        }

        .fixed-header,
        .fixed-footer {
            width: 100%;
            position: fixed;
            background: #333;
            padding: 5px;
            color: #fff;
        }

        .fixed-header {
            top: 0;
        }

        .fixed-footer {
            bottom: 0;
            text-align: center;
        }


        .content {
            width: 100%;
            padding-top: 60px;
            padding-bottom: 50px;
        }

        .content p {
            line-height: 100px;
            padding: 10px;
        }
    



    <div class="fixed-header">
        
            <a href="#">Home</a>
            <a href="#">About</a>
            <a href="#">Products</a>
            <a href="#">Contact Us</a>
        
    </div>
    <div class="content">
        <h1>Membuat Fixed Header dan Footer dengan CSS</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu sem tempor, varius quam at, luctus dui.
            Mauris magna metus, dapibus nec turpis vel, semper malesuada ante. Vestibulum id metus ac nisl bibendum
            scelerisque non non purus. Suspendisse varius nibh non aliquet sagittis. In tincidunt orci sit amet
            elementum vestibulum. Vivamus fermentum in arcu in aliquam. Quisque aliquam porta odio in fringilla. Vivamus
            nisl leo, blandit at bibendum eu, tristique eget risus. Integer aliquet quam ut elit suscipit, id interdum
            neque porttitor. Integer faucibus ligula.
        </p>
        <p>Quis quam ut magna consequat faucibus. Pellentesque eget nisi a mi suscipit tincidunt. Ut tempus dictum
            risus. Pellentesque viverra sagittis quam at mattis. Suspendisse potenti. Aliquam sit amet gravida nibh,
            facilisis gravida odio. Phasellus auctor velit at lacus blandit, commodo iaculis justo viverra. Etiam vitae
            est arcu. Mauris vel congue dolor. Aliquam eget mi mi. Fusce quam tortor, commodo ac dui quis, bibendum
            viverra erat. Maecenas mattis lectus enim, quis tincidunt dui molestie euismod. Curabitur et diam tristique,
            accumsan nunc eu, hendrerit tellus.
        </p>
    </div>
    <div class="fixed-footer">
        Copyright &copy; 2021
    </div>



Selamat mencoba. Happy coding…

Membuat Display Card secara Vertical

Untuk menampilkan CSS Card secara horizontal kita dapat membuatnya dengan coding berikut ini.

&lt;!doctype HTML&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;CSS Vertical Cards&lt;/title&gt;
  &lt;style&gt; 
html, body {
  font-family: 'Open Sans', 'Helvetica Neue', sans-serif;
  margin:0;padding:0;
}
header {
  overflow: hidden;
  background-color:#1A237E;
  color:#ffffff;
  padding: 10px;
  text-align: center;
  font: bold 25px Roboto;
}
nav {
  background-color:#3F51B5;
  padding: 5px;
  text-align: center;
}
select {
  border: 0;
  font: 20px Roboto;
}
article {
  display: grid;
  grid-gap: 0px;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  grid-auto-rows: max-content;
  grid-auto-flow: row dense;
}
.card {
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
    transition: 0.3s;
    width: 95%;
	margin:10px;
}
.card:hover {
    box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
}
.container {
    padding: 2px 10px;
}
footer {
  position: relative;
  left: 0;
  bottom: 0;
  padding: 2px 0;
  height: 40px;
  width: 100%;
  background-color:#1A237E;
  color: white;
  text-align: center;
  font: 12px Arial;
}
@keyframes spin {to {stroke-dashoffset:-264;}}
.spinner circle {
  fill: none;
  stroke: yellow;
  stroke-width: 16;
  stroke-linecap: round;
  stroke-dasharray: 0, 0, 70, 194;
  stroke-dashoffset: 0;
  animation: spin 1s infinite linear;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;header&gt;CSS Vertical Cards&lt;/header&gt;
  &lt;nav&gt;
    &lt;select id=&quot;sources&quot; onchange='document.getElementById(&quot;spinner&quot;).style.display=&quot;inline&quot;;'&gt;
	&lt;option value=&quot;cat1&quot;&gt;Category 1&lt;/option&gt;
	&lt;option value=&quot;cat2&quot;&gt;Category 2&lt;/option&gt;
	&lt;option value=&quot;cat3&quot;&gt;Category 3&lt;/option&gt;
	&lt;option value=&quot;cat4&quot;&gt;Category 4&lt;/option&gt;
	&lt;option value=&quot;cat5&quot;&gt;Category 5&lt;/option&gt;
    &lt;/select&gt;
    &lt;svg id=&quot;spinner&quot; class=&quot;spinner&quot; viewBox=&quot;0 0 100 100&quot; width=&quot;20&quot; height=&quot;20&quot; style=&quot;display:none;&quot;&gt;
     &lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;42&quot; transform=&quot;rotate(-90,50,50)&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;
  &lt;/nav&gt;
  &lt;article&gt;
	&lt;div class=&quot;card&quot;&gt;
	  &lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/8pa9E97uBFicnzfDGWcuFW-1200-80.jpg&quot; alt=&quot;Amazon Echo Show review&quot; style=&quot;width:100%&quot;&gt;
	  &lt;div class=&quot;container&quot;&gt;
		&lt;a href=&quot;https://www.techradar.com/reviews/amazon-echo-show-review&quot;&gt;
		&lt;h3&gt;Amazon Echo Show review&lt;/h3&gt;&lt;/a&gt;
		&lt;p&gt;This isn't Amazon's first entry into the world of smart screens – the company has two smart screen products currently on the market - the original Echo Show and the smaller Echo Spot. While the Spot is an incredibly cute, quirky little guy with charm in spade…..&lt;/p&gt;
	&lt;/div&gt;
	&lt;/div&gt;		
	&lt;div class=&quot;card&quot;&gt;
	  &lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/kdjAsfBqajhQR2ZFTu7CAb-1200-80.jpg&quot; alt=&quot;Your iPad Pro might have a bend but it’s not a defect&quot; style=&quot;width:100%&quot;&gt;
	  &lt;div class=&quot;container&quot;&gt;
	&lt;a href=&quot;https://www.techradar.com/news/your-ipad-pro-might-have-a-bend-but-its-not-a-defect&quot;&gt;
	&lt;h3&gt;Your iPad Pro might have a bend but it’s not a defect&lt;/h3&gt;&lt;/a&gt;
	&lt;p&gt;Back in November we started hearing reports that some of Apple’s latest iPads – the iPad Pro 11 and iPad Pro 12.9 (2018) - were exhibiting slight bends, either straight out of the box or after normal use. Now, Apple has responded to these claims, admitting th…..&lt;/p&gt;
	 &lt;/div&gt;
	&lt;/div&gt;				  
&lt;div class=&quot;card&quot;&gt;
	&lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/ugAWR3oUmPFtzrKs5ptJwP-1200-80.jpg&quot; alt=&quot;PlayStation Classic drops to just $75 on Amazon&quot; style=&quot;width:100%&quot;&gt;
	&lt;div class=&quot;container&quot;&gt;
	&lt;a href=&quot;https://www.techradar.com/news/playstation-classic-drops-to-just-dollar75-on-amazon&quot;&gt;
	&lt;h3&gt;PlayStation Classic drops to just $75 on Amazon&lt;/h3&gt;&lt;/a&gt;
	&lt;p&gt;Sony’s PlayStation Classic is an amazing device, but we found it doesn’t quite measure up to Nintendo’s NES and SNES nostalgia boxes. Namely, the PS1 revival machine’s games catalog left out some of heavy-hitters. But, thanks to a $25 off deal on Amazon right…..&lt;/p&gt;
	&lt;/div&gt;
	&lt;/div&gt;		
	&lt;div class=&quot;card&quot;&gt;
	&lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/tpDMjdzhEQ4Fe2czRELHhH-1200-80.jpg&quot; alt=&quot;HP Spectre Folio review&quot; style=&quot;width:100%&quot;&gt;
	&lt;div class=&quot;container&quot;&gt;
	&lt;a href=&quot;https://www.techradar.com/reviews/hp-spectre-folio-review&quot;&gt;
	&lt;h3&gt;HP Spectre Folio review&lt;/h3&gt;&lt;/a&gt;
	&lt;p&gt;When HP unveiled the HP Spectre Folio earlier this year, it made some big claims about how the 2-in-1 laptop would reinvent the PC. That’s a pretty huge promise, especially as we’ve seen a number of innovative designs that have changed how we think about PCs.…..&lt;/p&gt;
	 &lt;/div&gt;
	&lt;/div&gt;		
			  
	&lt;div class=&quot;card&quot;&gt;
	  &lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/fPJqvxAMVtc46AyzAKVPbX-1200-80.jpg&quot; alt=&quot;TechRadar's Holiday Gift Guide 2018&quot; style=&quot;width:100%&quot;&gt;
	  &lt;div class=&quot;container&quot;&gt;
	        &lt;a href=&quot;https://www.techradar.com/best/holiday-gift-guide-2018&quot;&gt;
	        &lt;h3&gt;TechRadar's Holiday Gift Guide 2018&lt;/h3&gt;&lt;/a&gt;
		&lt;p&gt;The TechRadar editorial team spends all year testing and writing about gadgets so that you, the consumer, know about the best gadgets to buy. And there's no more important time for us than Black Friday and Cyber Monday. It's when we see our tech buying advice…..&lt;/p&gt;
	   &lt;/div&gt;
	&lt;/div&gt;		
			  
	&lt;div class=&quot;card&quot;&gt;
	  &lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/FtQZs2si8P9CozVhQ8W56c-1200-80.jpg&quot; alt=&quot;10 ways to stay connected on the go without your smartphone&quot; style=&quot;width:100%&quot;&gt;
	  &lt;div class=&quot;container&quot;&gt;
	        &lt;a href=&quot;https://www.techradar.com/news/10-ways-to-stay-connected-on-the-go-without-your-smartphone&quot;&gt;
		&lt;h3&gt;10 ways to stay connected on the go without your smartphone&lt;/h3&gt;&lt;/a&gt;
		&lt;p&gt;Ten years after the first iPhone burst onto the scene, defining the smartphone, more than a billion people across the world use a smartphone every day, and in the west roughly two-thirds of the population have committed to the ‘smart’ life. From breakfast to …..&lt;/p&gt;
	     &lt;/div&gt;
	 &lt;/div&gt;		
    &lt;/article&gt;
&lt;footer&gt;&lt;p&gt;CSS Card Vertical © 2019&lt;/p&gt;&lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga berhasil.

Membuat Display Card secara Horizontal

CSSHorizontalCard

Untuk menampilkan CSS Card secara horizontal kita dapat membuatnya dengan coding berikut ini.
Pada script CSS kita gunakan ukuran tinggi dan lebar secara relative dengan satuan em (2em = 2 kali ukuran font saat ini) dan juga vh (1vh = 1% dari tinggi viewport).
Pada script CSS ini juga kita buat supaya tampilan text yang terlalu panjang ditampilkan gradient seolah-olah akan hilang/putus seperti pada card 5.

Berikut coding selengkapnya.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta charset=&quot;utf-8&quot;&gt;
	&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
	&lt;title&gt;CSS Horizontal Cards&lt;/title&gt;
	&lt;style&gt;
	html,body {
	  margin: 0; padding:0;
	  width: 100vw;
	  overflow-x: hidden;
	  background-color: #f0f0f0;
	  font: 14px 'Open Sans', sans-serif;
	  line-height: 1.4em;
	  color: #404646;
	}
	header {
	  overflow: hidden;
	  background-color:#1565C0;
	  color:#ffffff;
	  padding: 10px;
	  text-align: center;
	  font: bold 25px Roboto;
	}
	.container {
	  box-sizing: border-box;
	  min-height: 83vh;
	  width: 100%;
	  margin: auto;
	  display: flex;
	  flex-flow: row wrap;
	  align-content: flex-start;
	  padding: 0.2em;
	}
	.card {
	  margin: 0.5em 1.2em 0.5em 0.1em;
	  height: 14em;
	  max-width: 99%;
	  flex: 1 1 auto;
	  display: flex;
	  background-color: white;
	  box-shadow: 1px 3px 3px rgba(0, 10, 20, 0.06);
	  border-radius: 15px;
	}
	.card img {
	  height: 100%;
	  max-width: 10em;
	  -o-object-fit: cover;
		 object-fit: cover;
	  flex: 1 1 auto;
	  border-radius: 15px 0 0 15px;
	}
	.card-body {
	  width: 12em;
	  max-height: 100%;
	  flex: 1 1 auto;
	  display: flex;
	  flex-flow: column nowrap;
	  justify-content: flex-start;
	  padding: 1em;
	}
	.card-body button {
	  min-width: 8.3em;
	  flex: none;
	  align-self: flex-start;
	  margin-top: auto;
	  padding: 0.6em 1.2em;
	  font-size: 0.92em;
	  color: #404646;
	  background: none;
	  border: 0.5px solid #777;
	  border-radius: 5px;
	}
	.card-body button:hover {
	  border-color: #BBDEFB;
	  background:#BBDEFB;
	}
	.card-text {
	  position: relative;
	  flex: 1;
	  overflow: hidden;
	  text-overflow: ellipsis;
	  margin: 0 0 0.8em 0;
	  padding: 0;
	}
	.card-text h3, .card-text p {
	  margin-top: 0;
	}
	.card-text:after {
	  position: absolute;
	  bottom: 0;
	  content: &quot;&quot;;
	  width: 100%;
	  height: 1em;
	  background: linear-gradient(rgba(255, 255, 255, 0), white);
	}
	a {
	  color: #d07777;
	  text-decoration: none;
	}
	a:hover {
	  text-decoration: underline;
	}
	footer {
	  position:relative;
	  left: 0;
	  bottom: 0;
	  height: 40px;
	  width: 100%;
	  background-color:#1565C0;
	  color: white;
	  text-align: center;
	  vertical-align: text-bottom;
	}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;header&gt;CSS Horizontal Cards&lt;/header&gt;
	&lt;div class='container'&gt;
		&lt;div class='card'&gt;
			&lt;img src='https://images.pexels.com/photos/462235/pexels-photo-462235.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;h=750&amp;amp;w=1260'&gt;
			&lt;div class='card-body'&gt;
			  &lt;div class='card-text'&gt;
				&lt;h3&gt;1. Lorem ipsum&lt;/h3&gt;
				&lt;p&gt;
				  Also check out the
				  &lt;a href='https://codepen.io/abcretrograde/pen/ZogNOZ' target='_blank'&gt;Grid&amp;nbsp;version&lt;/a&gt;
				&lt;/p&gt;
			  &lt;/div&gt;
			  &lt;button&gt;More...&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		
		&lt;div class='card'&gt;
			&lt;img src='https://images.pexels.com/photos/1065711/pexels-photo-1065711.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;h=750&amp;amp;w=1260'&gt;
			&lt;div class='card-body'&gt;
			  &lt;div class='card-text'&gt;
				&lt;h3&gt;2. Lorem ipsum&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;
			  &lt;/div&gt;
			  &lt;button&gt;More...&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		
		&lt;div class='card'&gt;
			&lt;img src='https://images.pexels.com/photos/139248/pexels-photo-139248.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;h=750&amp;amp;w=1260'&gt;
			&lt;div class='card-body'&gt;
			&lt;div class='card-text'&gt;
				&lt;h3&gt;3. Lorem ipsum&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;
			&lt;/div&gt;
			&lt;button&gt;More...&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		
		&lt;div class='card'&gt;
			&lt;img src='https://images.pexels.com/photos/6273/home-decoration-interior-decor.jpg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;h=750&amp;amp;w=1260'&gt;
			&lt;div class='card-body'&gt;
			  &lt;div class='card-text'&gt;
				&lt;h3&gt;4. Lorem ipsum&lt;/h3&gt;
				&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;
			  &lt;/div&gt;
			  &lt;button&gt;More...&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
		
		&lt;div class='card'&gt;
			&lt;img src='https://images.pexels.com/photos/924675/pexels-photo-924675.jpeg?auto=compress&amp;amp;cs=tinysrgb&amp;amp;h=750&amp;amp;w=1260'/&gt;
			&lt;div class='card-body'&gt;
			  &lt;div class='card-text'&gt;
				&lt;h3&gt;5. Lorem ipsum&lt;/h3&gt;
				Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
				Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
				when an unknown printer took a galley of type and scrambled it to make a type specimen book. 
				It has survived not only five centuries, but also the leap into electronic typesetting, 
				remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset 
				sheets containing Lorem Ipsum passages, and more recently with desktop publishing software 
				like Aldus PageMaker including versions of Lorem Ipsum.In porttitor porta mi pharetra tempor.&lt;/p&gt;
			  &lt;/div&gt;
			  &lt;button&gt;More...&lt;/button&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
	&lt;footer&gt;&lt;p&gt;CSS Horizontal Card - &amp;copy; 2019&lt;/p&gt;&lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga bermanfaat.

Membuat Spiner svg dengan CSS

Spinner svg

Untuk menampilkan animasi lingkaran berputar saat menunggu proses di web sebaiknya kita gunakan html tag karena lebih ringan dari pada menggunakan file gif. Elemen HTML SVG (Scalable Vector Graphics) dapat menampilkan bentuk gambar lingkaran , persegi , poligon atau lainnya.
Kita akan memanfaatkannya untuk membuat animasi lingkaran berputar dengan rule CSS @keyframes animation.

Berikut coding selengkapnya.

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;
  &lt;title&gt;Spinner&lt;/title&gt;
  &lt;style&gt;
  @keyframes spin {to {stroke-dashoffset:-260;}}/* minus = searah jarum jam */
  .spinner circle {
    fill: #ffff00; /* warna lingkaran */
    stroke: #ff0000; /* warna garis */
    stroke-width: 15; /* tebal garis */
    stroke-linecap: round; /* bentuk ujung garis */
    stroke-dasharray: 0, 0, 80, 50;  /* garis putus */
    stroke-dashoffset: 0; /* tempat mulai putus */
    animation: spin 1s infinite linear; /* kecepatan putar 1 detik */
  }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h3&gt;Membuat Spiner svg dengan CSS&lt;/h3&gt;  
  &lt;svg class=&quot;spinner&quot; viewBox=&quot;0 0 100 100&quot; width=&quot;25&quot; height=&quot;25&quot;&gt;
    &lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;40&quot; transform=&quot;rotate(-90,50,50)&quot; /&gt;
  &lt;/svg&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga bermanfaat.

Membuat Tabel Responsive

Untuk menampilkan tabel yang panjang diperangkat mobile dengan layar kecil tentu akan menyulitkan kita untuk melihatnya. Kita akan membuat tampilan tabel dengan banyak kolom menjadi baris secara responsive mengikuti ukuran layar smartphone seperti pada gambar di atas.

Berikut coding selengkapnya.

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Responsive Table&lt;/title&gt;
  &lt;style&gt;
  	table,th,td {border-collapse:collapse;font:12px verdana;border:1px #c0c0c0 solid;color:#808080;}
	table tr:hover td {background:#BBDEFB;}
	table th {background-color:#BBDEFB;color:#1a73eb;padding:8px;}
	table tr:nth-child(odd) {background-color:#E3F2FD;}
	@media only screen and (max-width:500px)  {
		table,thead,tbody,th,td,tr{display:block;}
		thead tr {
			position: absolute;
			top: -9999px;
			left: -9999px;
		}
		tr {margin:0 0 1rem 0;}
		td {
			position: relative;
			padding-left: 160px;
		}
		td:before {
			position: absolute;
			top: 0;
			left: 6px;
			width: 25%;
			padding-right: 10px;
			white-space: nowrap;
			color:#1a73eb;
		}
		td:nth-of-type(1):before { content: &quot;No.&quot;; }
		td:nth-of-type(2):before { content: &quot;Nama&quot;; }
		td:nth-of-type(3):before { content: &quot;Versi&quot;; }
		td:nth-of-type(4):before { content: &quot;Tanggal Rilis&quot;; }
		td:nth-of-type(5):before { content: &quot;Versi Kernel Linux&quot;; }
		td:nth-of-type(6):before { content: &quot;Level API&quot;; }
		td:nth-of-type(7):before { content: &quot;Fitur&quot;; }
	}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Table Responsive&lt;/h1&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
    &lt;th&gt;No.&lt;/th&gt;
    &lt;th&gt;Nama&lt;/th&gt;
    &lt;th&gt;Versi Android&lt;/th&gt;
    &lt;th&gt;Tanggal Rilis&lt;/th&gt;
	&lt;th&gt;Versi Kernel Linux&lt;/th&gt;
	&lt;th&gt;Level API&lt;/th&gt;
	&lt;th&gt;Fitur&lt;/th&gt;
	&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
    &lt;td&gt;1&lt;/td&gt;
    &lt;td&gt;Froyo&lt;/td&gt;
    &lt;td&gt;2.2&lt;/td&gt;
    &lt;td&gt;10 Mei 2010&lt;/td&gt;
	&lt;td&gt;?&lt;/td&gt;
	&lt;td&gt;8&lt;/td&gt;
	&lt;td&gt;USB tethering and Wi-Fi hotspot functionality&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;2&lt;/td&gt;
    &lt;td&gt;Gingerbread&lt;/td&gt;
    &lt;td&gt;2.3&lt;/td&gt;
    &lt;td&gt;6 Desember 2010&lt;/td&gt;
	&lt;td&gt;2.6.35&lt;/td&gt;
	&lt;td&gt;9-10&lt;/td&gt;
	&lt;td&gt;Support for Near Field Communication (NFC)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;3&lt;/td&gt;
    &lt;td&gt;Honeycomb&lt;/td&gt;
    &lt;td&gt;3.0&lt;/td&gt;
    &lt;td&gt;22 Februari 2011&lt;/td&gt;
	&lt;td&gt;2.6.36&lt;/td&gt;
	&lt;td&gt;11-13&lt;/td&gt;
	&lt;td&gt;Increased ability of applications to access files on the SD card&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;4&lt;/td&gt;
    &lt;td&gt;Ice Cream Sandwich&lt;/td&gt;
    &lt;td&gt;4.0&lt;/td&gt;
    &lt;td&gt;19 Oktober 2011&lt;/td&gt;
	&lt;td&gt;3.0.1&lt;/td&gt;
	&lt;td&gt;14-15&lt;/td&gt;
	&lt;td&gt;Improvements to graphics, databases, spell-checking and Bluetooth functionality&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;5&lt;/td&gt;
    &lt;td&gt;Jelly Bean&lt;/td&gt;
    &lt;td&gt;4.1&lt;/td&gt;
    &lt;td&gt;9 Juli 2012&lt;/td&gt;
	&lt;td&gt;3.0.31-39&lt;/td&gt;
	&lt;td&gt;16-18&lt;/td&gt;
	&lt;td&gt;Bluetooth Audio/Video Remote Control Profile (AVRCP) 1.3 support&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;6&lt;/td&gt;
    &lt;td&gt;Kitkat&lt;/td&gt;
    &lt;td&gt;4.4&lt;/td&gt;
    &lt;td&gt;31 Oktober 2013&lt;/td&gt;
	&lt;td&gt;3.10&lt;/td&gt;
	&lt;td&gt;19-20&lt;/td&gt;
	&lt;td&gt;UI updates for Google Maps navigation and alarmsv&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;7&lt;/td&gt;
    &lt;td&gt;Lollipop&lt;/td&gt;
    &lt;td&gt;5.0&lt;/td&gt;
    &lt;td&gt;12 November 2014&lt;/td&gt;
	&lt;td&gt;3.16&lt;/td&gt;
	&lt;td&gt;21-22&lt;/td&gt;
	&lt;td&gt;Ability to join Wi-Fi networks and control paired Bluetooth devices from quick settings&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;8&lt;/td&gt;
    &lt;td&gt;Marshmallow&lt;/td&gt;
    &lt;td&gt;6.0&lt;/td&gt;
    &lt;td&gt;28 Mei 2015&lt;/td&gt;
	&lt;td&gt;3.18&lt;/td&gt;
	&lt;td&gt;23&lt;/td&gt;
	&lt;td&gt;Doze mode, which reduces CPU speed while the screen is off in order to save battery life&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;9&lt;/td&gt;
    &lt;td&gt;Nougat&lt;/td&gt;
    &lt;td&gt;7.0&lt;/td&gt;
    &lt;td&gt;22 Agustus 2016&lt;/td&gt;
	&lt;td&gt;4.4&lt;/td&gt;
	&lt;td&gt;24-25&lt;/td&gt;
	&lt;td&gt;Touch/display performance improvements&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;10&lt;/td&gt;
    &lt;td&gt;Oreo&lt;/td&gt;
    &lt;td&gt;8.0&lt;/td&gt;
    &lt;td&gt;21 Agustus 2017&lt;/td&gt;
	&lt;td&gt;4.10&lt;/td&gt;
	&lt;td&gt;26-27&lt;/td&gt;
	&lt;td&gt;Bluetooth battery level for connected devices, accessible in Quick Settings&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga bermanfaat.

Tombol Switch dengan CSS

Kali ini kita akan mencoba membuat tombol geser kiri kanan (switch button) dengan menggunakan CSS lalu mengambil statusnya dengan javascript.
Kita manfaatkan properti CSS: ‘appearance’ pada elemen input checkbox untuk manipulasi tampilan field checkbox biasa menjadi tombol geser.
Kita juga menfaatkan pseudo-element ‘:before’ untuk manipulasi tampilan content di dalam tombol switch.

Berikut coding selengkapnya.

&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;utf-8&quot;&gt;
	&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
	&lt;title&gt;CSS Switch Botton&lt;/title&gt;
	&lt;style&gt;
	.toggle {
	  -webkit-appearance: none;
	  -moz-appearance: none;
	  appearance: none;
	  width: 98px;
	  height: 30px;
	  position: relative;
	  border-radius: 20px;
	  display: inline-block;
	  overflow: hidden;
	  outline: none;
	  border: none;
	  cursor: pointer;
	  background-color: #707070;
	  transition: background-color ease 0.3s;
	}
	.toggle:before {
	  content: &quot;Depan Belakang&quot;;
	  display: block;
	  position: absolute;
	  z-index: 2;
	  width: 25px;
	  height: 25px;
	  background: #fff;
	  left: 2px;
	  top: 2px;
	  border-radius: 50%;
	  font:bold 12px/28px Helvetica;
	  text-indent: -40px;
	  word-spacing: 30px;
	  color: #fff;
	  text-shadow: -1px -1px rgba(0,0,0,0.15);
	  white-space: nowrap;
	  box-shadow: 0 1px 2px rgba(0,0,0,0.2);
	  transition: all cubic-bezier(0.3, 1.5, 0.7, 1) 0.3s;
	}
	.toggle:checked {background: #4CD964;}
	.toggle:checked:before {left:70px;}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2 id=&quot;status&quot;&gt;Belakang&lt;/h2&gt;
&lt;input id=&quot;swbtn&quot; class=&quot;toggle&quot; type=&quot;checkbox&quot; /&gt;
&lt;script&gt;
	let swbtn = document.getElementById(&quot;swbtn&quot;);
	let status = document.getElementById(&quot;status&quot;);
	swbtn.addEventListener(&quot;click&quot;, function(){
		if (swbtn.checked) {
			status.innerHTML = &quot;Depan&quot;;
		} else if (!swbtn.checked)	{
			status.innerHTML = &quot;Belakang&quot;;
		}
	});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga bermanfaat.

Sumber: https://danklammer.com/articles/simple-css-toggle-switch/

Sort dan Search Data Tabel

JSSortSearchData

Fitur pengurutan (sort) data dan pencarian (search) data merupakan fitur yang umum diperlukan dalam aplikasi web. Kita bisa membuatnya dengan bantuan library seperti jquery dan datatables.
Kali ini saya akan memberikan cara membuat fitur sort dan search data dalam table menggunakan fungsi javascript tanpa library.

Ada 2 fungsi yang kita buat:

  • fungsi searchTable()
  • fungsi sortTable(), yang dapat melakukan sort data huruf (alphabet), angka (numeric) dan tanggal (date)

Fungsi resetHeader() digunakan untuk mengembalikan kolom header tabel supaya ketika kolom header di click, tanda panah ke atas ↑ (sort ascending) atau ke bawah ↓ (sort descending)  hanya tampil di kolom yang di click. Header kolom disimpan dalam variable array headerCol.

Berikut coding selengkapnya.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;/&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;title&gt;Sort Search Data in Table&lt;/title&gt;
&lt;style&gt;
html,body{font:12px Arial,Helvetica,sans-serif;}
.cari {padding:5px;border:1px solid #ddd;}
#table1 {border-collapse:collapse;}
#table1 th {padding:12px;text-align:center;background-color:#f0f0f0;cursor:pointer;}
#table1 th, #table1 td {border:1px solid #ddd;padding:6px;}
#table1 tr:nth-child(odd){background-color: #f1f1f1;}
#table1 tr:hover {background-color:#f8f8f8;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Tabel Versi Android&lt;/h2&gt;
&lt;p&gt;&lt;input type=&quot;text&quot; id=&quot;1&quot; class=&quot;cari&quot; onkeyup=&quot;searchTable(1)&quot; size=&quot;10&quot; placeholder=&quot;Cari Nama...&quot;&gt;
&lt;input type=&quot;text&quot; id=&quot;3&quot; class=&quot;cari&quot; onkeyup=&quot;searchTable(3)&quot; size=&quot;10&quot; placeholder=&quot;Cari Rilis...&quot;&gt;&lt;/p&gt;
&lt;table id=&quot;table1&quot;&gt;
  &lt;tr&gt;
    &lt;th onclick=&quot;sortTable('num',0)&quot;&gt;No.&lt;/th&gt;
	&lt;th onclick=&quot;sortTable('alfa',1)&quot;&gt;Nama&lt;/th&gt;
    &lt;th onclick=&quot;sortTable('num',2)&quot;&gt;Versi&lt;/th&gt;
    &lt;th onclick=&quot;sortTable('date',3)&quot;&gt;Rilis&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;1&lt;/td&gt;
	&lt;td&gt;Froyo&lt;/td&gt;
    &lt;td&gt;2.2&lt;/td&gt;
    &lt;td&gt;10 May 2010&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;2&lt;/td&gt;
	&lt;td&gt;Gingerbread&lt;/td&gt;
    &lt;td&gt;2.3&lt;/td&gt;
    &lt;td&gt;6 Dec 2010&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;3&lt;/td&gt;
	&lt;td&gt;Honeycomb&lt;/td&gt;
    &lt;td&gt;3.0&lt;/td&gt;
    &lt;td&gt;22 Feb 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;4&lt;/td&gt;
	&lt;td&gt;Ice Cream Sandwich&lt;/td&gt;
    &lt;td&gt;4.0&lt;/td&gt;
    &lt;td&gt;19 Oct 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;5&lt;/td&gt;
	&lt;td&gt;Jelly Bean&lt;/td&gt;
    &lt;td&gt;4.1&lt;/td&gt;
    &lt;td&gt;9 Jul 2012&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;6&lt;/td&gt;
	&lt;td&gt;Kitkat&lt;/td&gt;
    &lt;td&gt;4.4&lt;/td&gt;
    &lt;td&gt;31 Oct 2013&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;7&lt;/td&gt;
	&lt;td&gt;Lollipop&lt;/td&gt;
    &lt;td&gt;5.0&lt;/td&gt;
    &lt;td&gt;12 Nov 2014&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;8&lt;/td&gt;
	&lt;td&gt;Marshmallow&lt;/td&gt;
    &lt;td&gt;6.0&lt;/td&gt;
    &lt;td&gt;28 May 2015&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;9&lt;/td&gt;
	&lt;td&gt;Nougat&lt;/td&gt;
    &lt;td&gt;7.0&lt;/td&gt;
    &lt;td&gt;22 Aug 2016&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;10&lt;/td&gt;
	&lt;td&gt;Oreo&lt;/td&gt;
    &lt;td&gt;8.0&lt;/td&gt;
    &lt;td&gt;21 Aug 2017&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;script&gt;
var cols = document.getElementById('table1').rows[0].cells;
var headerCol = new Array();
for (var i = 0; i &lt; (cols.length); i++) {
	headerCol[i]=cols[i].textContent;
}
	
function searchTable(col) {
  var input, filter, table, tr, td, i;
  input = document.getElementById(col);
  filter = input.value.toUpperCase();
  table = document.getElementById(&quot;table1&quot;);
  tr = table.getElementsByTagName(&quot;tr&quot;);
  for (i = 0; i &lt; tr.length; i++) {
    if(col=='1') td = tr[i].getElementsByTagName(&quot;td&quot;)[1];
	else if(col=='3') td = tr[i].getElementsByTagName(&quot;td&quot;)[3];
    if (td) {
      if (td.innerHTML.toUpperCase().indexOf(filter) &gt; -1) {
        tr[i].style.display = &quot;&quot;;
      } else {
        tr[i].style.display = &quot;none&quot;;
      }
    }     
  }
}
function resetHeader(){
	var c = document.getElementById('table1').rows[0].cells;
	for (var i = 0; i &lt; (c.length); i++) {
		c[i].textContent=headerCol[i];
	}
}
function sortTable(d,n) {
  var table, rows, col_header, switching, i, x, y, a,b,shouldSwitch, dir = &quot;asc&quot;, switchcount = 0;
  table = document.getElementById(&quot;table1&quot;);
  rows = table.getElementsByTagName(&quot;tr&quot;);
  col_header  = rows[0].getElementsByTagName(&quot;th&quot;)[n];
  switching = true;
  while (switching) {
	switching = false;    
    for (i = 1; i &lt; (rows.length - 1); i++) {
		shouldSwitch = false;
		x = rows[i].getElementsByTagName(&quot;td&quot;)[n];
		y = rows[i + 1].getElementsByTagName(&quot;td&quot;)[n];
		if (d==&quot;num&quot;)
		{	a = Number(x.innerHTML);
			b = Number(y.innerHTML);
		} else if (d==&quot;alfa&quot;)
		{	a = x.innerHTML.toLowerCase();
			b = y.innerHTML.toLowerCase();
		} else if (d==&quot;date&quot;)
		{	a = Date.parse(x.innerHTML);
			b = Date.parse(y.innerHTML);
		}
		if (dir == &quot;asc&quot;) {
			if (a &gt; b) {
			  shouldSwitch = true;
			  break;
			}
		} else if (dir == &quot;desc&quot;) {
			if (a &lt; b) {
			  shouldSwitch = true;
			  break;
			}
		}
    }
    if (shouldSwitch) {
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
      switchcount ++;
    } else {
      if (switchcount == 0 &amp;&amp; dir == &quot;asc&quot;) {
        dir = &quot;desc&quot;;
        switching = true;
      }
    }	
  }
  resetHeader();
  if (dir == &quot;asc&quot;) {col_header.textContent =  headerCol[n] + &quot; \u2191&quot;;}
  if (dir == &quot;desc&quot;) {col_header.textContent = headerCol[n] + &quot; \u2193&quot;;}
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

 Selamat mencoba dan semoga bermanfaat.

CSS Hide Show Field

css_showhide

css_showhide

Halo Semua, kali ini saya akan memberikan cara bagaimana menampilkan dan menyembunyikan (Show Hide Toggle) elemen html hanya dengan menggunakan CSS saja.
Mengapa dengan CSS bukan JavaScript? Ya, JavaScript memang bisa melakukan apa saja yang bisa dilakukan dengan CSS, tapi lebih simpel dengan CSS, Keep It Simple Smart! 🙂
CSS menyediakan pseudo-class “:checked” yang bisa kita gunakan pada selector CSS, dalam hal ini id=trigger.
Tanda tilde (~) pada selector .trigger:checked ~ .toggle1 digunakan untuk memilih element toggle1 yang ditempatkan secara langsung setelah memilih (:checked) element .trigger.

Berikut coding selengkapnya.

&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;CSS Toggle&lt;/title&gt;
&lt;style&gt;
   .toggle1 {display:none;}
   .trigger:checked ~ .toggle1 {display:inline;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div&gt; Warna Favorit: &lt;/div&gt;
&lt;input type=&quot;radio&quot; name=&quot;warna&quot; id=&quot;Merah&quot;/&gt;&lt;label for=&quot;Merah&quot;&gt;Merah&lt;/label&gt;
&lt;input type=&quot;radio&quot; name=&quot;warna&quot; id=&quot;Hijau&quot;/&gt;&lt;label for=&quot;Hijau&quot;&gt;Hijau&lt;/label&gt;
&lt;input type=&quot;radio&quot; name=&quot;warna&quot; id=&quot;Biru&quot;/&gt;&lt;label for=&quot;Biru&quot;&gt;Biru&lt;/label&gt;
&lt;input type=&quot;radio&quot; name=&quot;warna&quot; class=&quot;trigger&quot; id=&quot;Lainnya&quot;/&gt;&lt;label for=&quot;Lainnya&quot;&gt;Lainnya : &lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;warna&quot; class=&quot;toggle1&quot; autofocus/&gt;
&lt;/body&gt;
&lt;/html&gt;

Anda tertarik, selamat mencoba.

Sumber: http://css-workshop.com/css-show-hide-div-without-javascript/

Send HTML Email dengan Attachment

Pada posting saya terdahulu tentang cara mengirim email dengan form di PHP, kali ini saya akan sharing tentang cara mengirim email dengan attachment yang diambil langsung dari local.
Berikut ini coding lengkapnya.

&lt;?php
$from = &quot;Amir &lt;amir@gmail.com&gt;&quot;;
$to = &quot;budi@yahoo.com , cica@hotmail.com&quot;;
$subject = &quot;Ini File Excelnya&quot;;
$message = &quot;&lt;b&gt;Terlampir file excel&lt;/b&gt;&lt;br/&gt;Thanks.&quot;;
$filename = &quot;Dummy File1.xls&quot;;
	
$uid = md5(uniqid(time()));
$header = &quot;From: &quot;.$from.&quot;\r\n&quot;;
$header .= &quot;Reply-To: &quot;.$from.&quot;\r\n&quot;;
$header .= &quot;MIME-Version: 1.0\r\n&quot;;

if (file_exists($filename))
{ $header .= &quot;Content-Type:multipart/mixed; boundary=\&quot;&quot;.$uid.&quot;\&quot;\r\n\r\n&quot;;
  $nmessage = &quot;--&quot;.$uid.&quot;\r\n&quot;;
  $nmessage .= &quot;Content-type:text/html; charset=\&quot;UTF-8\&quot;\r\n&quot;;
  $nmessage .= &quot;Content-Transfer-Encoding:quoted-printable\r\n\r\n&quot;;
  $nmessage .= $message.&quot;\r\n\r\n&quot;;
  $nmessage .= &quot;--&quot;.$uid.&quot;\r\n&quot;;
  $content = chunk_split(base64_encode(file_get_contents($filename)));
  $nmessage .= &quot;Content-Type:application/octet-stream; name=\&quot;&quot;.$filename.&quot;\&quot;\r\n&quot;;
  $nmessage .= &quot;Content-Transfer-Encoding:base64\r\n&quot;;
  $nmessage .= &quot;Content-Disposition:attachment; filename=\&quot;&quot;.$filename.&quot;\&quot;\r\n\r\n&quot;;
  $nmessage .= $content.&quot;\r\n\r\n&quot;;
  $nmessage .= &quot;--&quot;.$uid.&quot;--&quot;;
  $message = $nmessage;
} else {
  $header .= &quot;Content-Type:text/html; boundary=\&quot;&quot;.$uid.&quot;\&quot;\r\n\r\n&quot;;
}
	
if (mail($to, $subject, $message, $header)) {
  echo '&lt;p&gt;Mail has been sent! &lt;br /&gt;Please check both inbox and spam folder! &lt;/p&gt;'; 
} else {
  echo '&lt;p&gt;Mail can not be sent! Please try again later! &lt;/p&gt;';
}  

Anda bisa mengirimkan pesan email dengan format HTML pada variable $message.
Panjang pesan bisa lebih dari 1000 karakter, termasuk tag HTML-nya.

Jika tidak ingin mengirimkan file attachment Anda cukup kosongkan variable $filename=”;

Silakan Anda pakai coding ini di aplikasi php Anda. Selamat mencoba dan semoga sukses.

Membuat Tooltip yang Mengikuti Pointer Mouse

tooltips

Sekarang kita coba membuat tooltip seperti gambar di atas. Yang membuat saya tertarik adalah tooltip ini bisa bergerak mengikuti gerakan pointer mouse di sepanjang text link.

Tampilan kotak tooltip kita buat dengan menggunakan CSS lalu untuk menggerakan kotak tersebut kita pakai javascript

&lt;script&gt;
var tooltip = document.querySelectorAll('.tooltip');
document.addEventListener('mousemove', fn, false);
function fn(e) {
  for (var i = tooltip.length; i--;) {
    tooltip[i].style.left = e.pageX + 'px';
    tooltip[i].style.top = e.pageY + 'px';
  }
}
&lt;/script&gt;

Untuk coding lengkapnya silakan coba di bawah ini.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;CSS Tooltip&lt;/title&gt;
  &lt;style&gt;
	a:hover .tooltip 
	{ display: block; }
	.tooltip {
	  display: none;
	  position: absolute;
	  z-index: 1000;
	  margin: 15px;
	  border:2px solid #0094ff;
	  border-radius: 8px 8px 0 0;
	  width:400px;
	  font: 12px Arial;
	}
	.tooltip h3 {
	  background:#0094ff;
	  color:#ffffff;
	  margin:0;
	  padding:8px;
	}
	.tooltip p {
	  background:#f0f0f0;
	  color:#000000;
	  margin:0;padding:8px; 
	}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;a href=&quot;#&quot; &gt;Ini adalah link dengan tooltip mengikuti pointer mouse
&lt;div class=&quot;tooltip&quot;&gt;
    &lt;h3&gt;Contoh Teks Lorem Ipsum yang Lazim Digunakan&lt;/h3&gt;
    &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit,
	sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
	Ut enim ad minim veniam, quis nostrud exercitation ullamco
	laboris nisi ut aliquip ex ea commodo consequat. 
	Duis aute irure dolor in reprehenderit in voluptate 
	velit esse cillum dolore eu fugiat nulla pariatur. 
	Excepteur sint occaecat cupidatat non proident, 
	sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt; 

&lt;script&gt;
var tooltip = document.querySelectorAll('.tooltip');
document.addEventListener('mousemove', fn, false);
function fn(e) {
  for (var i = tooltip.length; i--;) {
    tooltip[i].style.left = e.pageX + 'px';
    tooltip[i].style.top = e.pageY + 'px';
  }
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga sukses.

Membuat Slideshow dengan CSS3

Hampir di setiap website kita temui slideshow. Kali ini saya berikan contoh membuat slideshow yang sangat simple hanya dengan menggunakan CSS, tanpa javascript.

CSS3 memiliki property “animation” yang akan kita gunakan untuk mengganti 1 gambar dengan gambar lainnya.

Pertama kita berikan nama animation : slideshow
dengan durasi: 9 detik (3 gambar masing masing tampil 3 detik)
dan kecepatan tiap slide berjalan sama atau linear.
Supaya slideshow ini jalan terus maka kita berikan animation-iteration-count: infinite.

img {
 animation-name: slideshow;
 animation-duration: 9s;
 animation-timing-function: linear;
 animation-iteration-count: infinite;
}

4 baris property “animation” poada css tersebut bisa kita singkat penulisannya (shorthand CSS) menjadi:
animation: slideshow 9s linear 0s infinite;

Kemudian kita buat @Keyframes untuk animation-name: slideshow untuk memberikan efek transisi antar gambar tersebut.

@keyframes slideshow {
   25% { opacity: 1;}
   33.33% { opacity: 0;}
   91.66% { opacity: 0;}
   100% { opacity: 1;}
}

Berikut coding selengkapnya.

&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Slideshow CSS3&lt;/title&gt;
&lt;style&gt;
div {margin: 100px 200px; }
img {
  position: absolute;
  z-index: 3;
  animation: slideshow 9s linear 0s infinite;
}
img:nth-child(2) {
  z-index: 2;
  animation: slideshow 9s linear 3s infinite;
}
img:nth-child(3) {
   z-index: 1;
  animation: slideshow 9s linear 6s infinite;
}
@keyframes slideshow {
   25% { opacity: 1;}
   33.33% { opacity: 0;}
   91.66% { opacity: 0;}
   100% { opacity: 1;}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div&gt;
	&lt;img src=&quot;images/img_1.jpg&quot; alt=&quot;Gambar 1&quot;/&gt;
	&lt;img src=&quot;images/img_2.jpg&quot; alt=&quot;Gambar 2&quot;/&gt;
	&lt;img src=&quot;images/img_3.jpg&quot; alt=&quot;Gambar 3&quot;/&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Membuat Popup Window dengan CSS

modal-box-dengan-css

Bagaimana cara membuat popup window tanpa javascript?
Kita bisa membuat modal dialog box atau yang dikenal popup window hanya dengan menggunakan CSS3 dan HTML5
Berikut ini codingnya :

&lt;!DOCTYPE html&gt;
&lt;head&gt;
	&lt;title&gt;Modal box dengan CSS3&lt;/title&gt;
	&lt;style&gt;
	.modalDialog {
		position: fixed;
		font-family: Arial, Helvetica, sans-serif;
		top: 0;
		right: 0;
		bottom: 0;
		left: 0;
		background: rgba(0,0,0,0.8);
		z-index: 99999;
		opacity:0;
		transition: opacity 200ms ease-in;
		pointer-events: none;
	}
	.modalDialog:target {opacity:1;	pointer-events: auto;}
	.modalDialog &gt; div {
		width: 400px;
		position: relative;
		margin: 10% auto;
		padding: 5px 20px 13px 20px;
		border-radius: 10px;
		background: #fff;
		background: linear-gradient(#fff, #aaa);
	}
	.close:hover { background:#00d9ff; }
	.close {
		background: #606061;
		color: #FFFFFF;
		line-height: 25px;
		position: absolute;
		text-align: center;
		top: -10px;
		right: -12px;
		width: 24px;
		text-decoration: none;
		font-weight: bold;
		border-radius: 12px;
		box-shadow: 1px 1px 3px #000;
	}
	
input[type=text], input[type=password] {
    width: 100%;
    padding: 12px 20px;
    margin: 8px 0;
    display: inline-block;
    border: 1px solid #ccc;
    box-sizing: border-box;
}
button {
    background-color: #4CAF50;
    color: white;
    padding: 14px 20px;
    margin: 8px 0;
    border: none;
    cursor: pointer;
    width: 100%;
}
span.psw {
    float: right;
}

	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;&lt;a href=&quot;#openModal&quot;&gt;Open Modal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#iklan&quot;&gt;IKLAN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#login&quot;&gt;Login&lt;/a&gt;&lt;/p&gt;


&lt;div id=&quot;openModal&quot; class=&quot;modalDialog&quot;&gt;
	&lt;div&gt;
		&lt;a href=&quot;#&quot; title=&quot;Close&quot; class=&quot;close&quot;&gt;X&lt;/a&gt;
		&lt;h2&gt;Perhatian!&lt;/h2&gt;
		&lt;p&gt;Ini adalah contoh kotak dialog modal yang dibuat hanya dengan menggunakan CSS3 saja, tanpa javascript.&lt;/p&gt;
		&lt;p&gt;Silakan diubah sesuai kebutuhan, seperti membuat iklan pop-up yang tampil saat website terbuka,
		atau membuat form login/register user.&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;iklan&quot; class=&quot;modalDialog&quot;&gt;
	&lt;div&gt;
		&lt;a href=&quot;#&quot; title=&quot;Close&quot; class=&quot;close&quot;&gt;X&lt;/a&gt;
		&lt;h3&gt;Dapatkan Buku Proyek PHP &amp; MySQL :&lt;/h3&gt; 
		&lt;h2&gt;&quot;Membuat Helpdesk System Berbasis OOP dan PDO dengan PHP&quot;&lt;/h2&gt;
		&lt;p&gt;di toko buku online Lokomedia&lt;br/&gt;
		Harga: Rp 50.000,-&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;login&quot; class=&quot;modalDialog&quot;&gt;
	&lt;div&gt;
		&lt;a href=&quot;#&quot; title=&quot;Close&quot; class=&quot;close&quot;&gt;X&lt;/a&gt;
		&lt;h3&gt;Please Log in&lt;/h3&gt; 
		&lt;form  action=&quot;action_page.php&quot;&gt;
		&lt;label&gt;&lt;b&gt;Username&lt;/b&gt;&lt;/label&gt;
		&lt;input type=&quot;text&quot; placeholder=&quot;Enter Username&quot; name=&quot;uname&quot; required&gt;
		&lt;label&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/label&gt;
		&lt;input type=&quot;password&quot; placeholder=&quot;Enter Password&quot; name=&quot;psw&quot; required&gt;
		&lt;button type=&quot;submit&quot;&gt;Log in&lt;/button&gt;
		&lt;input type=&quot;checkbox&quot; id=&quot;Remember&quot; checked=&quot;checked&quot;&gt; &lt;label for=&quot;Remember&quot;&gt;Remember me&lt;/label&gt;
		&lt;span class=&quot;psw&quot;&gt;&lt;a href=&quot;#login&quot;&gt;Forgot password?&lt;/a&gt;&lt;/span&gt;
	&lt;/form&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga sukses.

Membuat Script Login yang Aman dengan PHP dan MySQL

Sebuah aplikasi berbasis web umumnya membutuhkan halaman login bagi user/member untuk mengakses halaman tertentu. Halaman itu tentunya harus aman dari resiko pembobolan dan pencurian data.

Kali ini saya akan mencoba memberikan sedikit tips cara membuat script login yang aman dengan PHP dan MySQL.
Script ini hanya memberikan gambaran tentang bagaimana cara mengamankan halaman login dari ancaman dan resiko pembobolan dan pencurian data user/member. Script ini juga menggunakan teknik enkripsi password dengan fungsi hash(sha512) dan salt.
Saya tidak meng-klaim script ini benar-benar dapat membuat halaman login yang aman karena masalah keamanan system web tentu lebih luas dan kompleks.
Semoga tips berikut ini bisa menambah pengetahuan Anda dalam mengamankan aplikasi web Anda.

Script Login berikut ini diharapkan dapat menahan halaman web Anda dari serangan:
SQL Injections
Session Hijacking
Network Sniffing
Cross Site Scripting
Brute Force Attacks

Script ini jalan di PHP minimal versi 5.4 dan MySQL versi 5.0

Pertama kita siapkan databasenya.

1. Create Database login:

CREATE DATABASE `login`;

2. Create user untuk akses database tersebut. Hindari menggunakan user default root MySql.

CREATE USER 'admin_db'@'localhost' IDENTIFIED BY 'eKcGZr59zAa2BEWU';
GRANT SELECT, INSERT, UPDATE ON `login`.* TO 'sec_user'@'localhost';

3. Create tabel login_attempts untuk menyimpan data percobaan login oleh user. Dengan demikian kita bisa menahan serangan brute force attack

CREATE TABLE `login_attempts` (
    `user_id` INT(11) NOT NULL,
    `time` VARCHAR(30) NOT NULL
) ENGINE=InnoDB

4. Create tabel members dengan 5 field: id, username, email, password dan salt.
Khusus pada field password kita gunakan tipe CHAR(128) untuk menyimpan data password yang di encrypt dengan fungsi hash(sha512) dan salt .

CREATE TABLE `secure_login`.`members` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(30) NOT NULL,
    `email` VARCHAR(50) NOT NULL,
    `password` CHAR(128) NOT NULL,
    `salt` CHAR(128) NOT NULL 
) ENGINE = InnoDB;

5. Insert 1 row data user admin ke tabel members untuk test login.

INSERT INTO `login`.`members` VALUES(1, 'admin_user', 'admin@kampushendra.com',
'00807432eae173f652f2064bdca1b61b290b52d40e429a7d295d76a71084aa96c0233b82f1feac45529e0726559645acaed6f3ae58a286b9f075916ebf66cacc',
'f9aab579fc1b41ed0c44fe4ecdbfcdb4cb99b9023abb241a6db833288f4eea3c02f76e0d35204a8695077dcf81932aa59006423976224be0390395bae152d4ef');

Berikutnya kita siapkan script PHP-nya.

1. Create folder “includes” di luar folder root aplikasi web Anda (misal: xampp/apps/includes/)

2. Create file psl-config.php berikut ini lalu simpan di folder includes:

&lt;?php
/** These are the database login details */  
define(&quot;HOST&quot;, &quot;localhost&quot;);    // The host you want to connect to.
define(&quot;USER&quot;, &quot;admin_db&quot;);    // The database username. 
define(&quot;PASSWORD&quot;, &quot;eKcGZr59zAa2BEWU&quot;);  // The database password. 
define(&quot;DATABASE&quot;, &quot;login&quot;);     // The database name.
define(&quot;CAN_REGISTER&quot;, &quot;any&quot;);
define(&quot;DEFAULT_ROLE&quot;, &quot;member&quot;);
define(&quot;SECURE&quot;, FALSE);    // FALSE for Dev, TRUE for Prod using https
?&gt;

3. Create file db_connect.php berikut ini lalu simpan di folder includes:

&lt;?php
include_once 'psl-config.php';   // As functions.php is not included
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

4. Create file functions.php berikut ini lalu simpan di folder includes:

&lt;?php
include_once 'psl-config.php';
function sec_session_start() {
    $session_name = 'sec_session_id';   // Set a custom session name
    $secure = SECURE;
    // This stops JavaScript being able to access the session id.
    $httponly = true;
    // Forces sessions to only use cookies.
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header(&quot;Location: ../error.php?err=Could not initiate a safe session (ini_set)&quot;);
        exit();
    }
    // Gets current cookies params.
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams[&quot;lifetime&quot;],
        $cookieParams[&quot;path&quot;], 
        $cookieParams[&quot;domain&quot;], 
        $secure,
        $httponly);
    // Sets the session name to the one set above.
    session_name($session_name);
    session_start();              // Start the PHP session 
    session_regenerate_id(true);  // regenerated the session, delete the old one. 
}

//This login function will check the email and password against the database. 
//It will return true if there is a match.
function login($email, $password, $mysqli) {
    // Using prepared statements means that SQL injection is not possible. 
    if ($stmt = $mysqli-&gt;prepare(&quot;SELECT id, username, password, salt 
        FROM members  WHERE email = ?  LIMIT 1&quot;)) {
        $stmt-&gt;bind_param('s', $email);  // Bind &quot;$email&quot; to parameter.
        $stmt-&gt;execute();    // Execute the prepared query.
        $stmt-&gt;store_result();
        // get variables from result.
        $stmt-&gt;bind_result($user_id, $username, $db_password, $salt);
        $stmt-&gt;fetch();
 
        // hash the password with the unique salt.
        $password = hash('sha512', $password . $salt);
        if ($stmt-&gt;num_rows == 1) {
            // If the user exists we check if the account is locked
            // from too many login attempts 
 
            if (checkbrute($user_id, $mysqli) == true) {
                // Account is locked 
                // Send an email to user saying their account is locked
                return false;
            } else {
                // Check if the password in the database matches
                // the password the user submitted.
                if ($db_password == $password) {
                    // Password is correct!
                    // Get the user-agent string of the user.
                    $user_browser = $_SERVER['HTTP_USER_AGENT'];
                    // XSS protection as we might print this value
                    $user_id = preg_replace(&quot;/[^0-9]+/&quot;, &quot;&quot;, $user_id);
                    $_SESSION['user_id'] = $user_id;
                    // XSS protection as we might print this value
                    $username = preg_replace(&quot;/[^a-zA-Z0-9_\-]+/&quot;, 
                                                                &quot;&quot;, 
                                                                $username);
                    $_SESSION['username'] = $username;
                    $_SESSION['login_string'] = hash('sha512', 
                              $password . $user_browser);
                    // Login successful.
                    return true;
                } else {
                    // Password is not correct
                    // We record this attempt in the database
                    $now = time();
                    $mysqli-&gt;query(&quot;INSERT INTO login_attempts(user_id, time)
                                    VALUES ('$user_id', '$now')&quot;);
                    return false;
                }
            }
        } else {
            // No user exists.
            return false;
        }
    }
}

//This checkbrute function will hold login tries for 2 hour if 5 logins failed.
function checkbrute($user_id, $mysqli) {
    // Get timestamp of current time 
    $now = time();
     // All login attempts are counted from the past 2 hours. 
    $valid_attempts = $now - (2 * 60 * 60);
     if ($stmt = $mysqli-&gt;prepare(&quot;SELECT time 
                             FROM login_attempts 
                             WHERE user_id = ? 
                            AND time &gt; '$valid_attempts'&quot;)) {
        $stmt-&gt;bind_param('i', $user_id);
         // Execute the prepared query. 
        $stmt-&gt;execute();
        $stmt-&gt;store_result();
         // If there have been more than 5 failed logins 
        if ($stmt-&gt;num_rows &gt; 5) {
            return true;
        } else {
            return false;
        }
    }
}
//This login_check function will Check if all session variables are set
function login_check($mysqli) {
    if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) {
        $user_id = $_SESSION['user_id'];
        $login_string = $_SESSION['login_string'];
        $username = $_SESSION['username'];
         // Get the user-agent string of the user.
        $user_browser = $_SERVER['HTTP_USER_AGENT'];
         if ($stmt = $mysqli-&gt;prepare(&quot;SELECT password FROM members WHERE id = ? LIMIT 1&quot;)) {
            // Bind &quot;$user_id&quot; to parameter. 
            $stmt-&gt;bind_param('i', $user_id);
            $stmt-&gt;execute();   // Execute the prepared query.
            $stmt-&gt;store_result();
             if ($stmt-&gt;num_rows == 1) {
                // If the user exists get variables from result.
                $stmt-&gt;bind_result($password);
                $stmt-&gt;fetch();
                $login_check = hash('sha512', $password . $user_browser);
                if ($login_check == $login_string) {
                    // Logged In!!!! 
                    return true;
                } else {
                    // Not logged in 
                    return false;
                }
            } else {
                // Not logged in 
                return false;
            }
        } else {
            // Not logged in 
            return false;
        }
    } else {
        // Not logged in 
        return false;
    }
}
//This login_check function will sanitizes URL from the PHP_SELF server variable
function esc_url($url) {
     if ('' == $url) {
        return $url;
    }
    $url = preg_replace('|[^a-z0-9-~+_.?#=!&amp;;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
    $strip = array('%0d', '%0a', '%0D', '%0A');
    $url = (string) $url;
     $count = 1;
    while ($count) {
        $url = str_replace($strip, '', $url, $count);
    }
    $url = str_replace(';//', '://', $url);
    $url = htmlentities($url);
    $url = str_replace('&amp;amp;', '&amp;', $url);
    $url = str_replace(&quot;'&quot;, '&#039;', $url);
    if ($url[0] !== '/') {
        // We're only interested in relative links from $_SERVER['PHP_SELF']
        return '';
    } else {
        return $url;
    }
}

5. Create file process_login.php berikut ini lalu simpan di folder aplikasi web Anda (Misal: //xampp/htdocs/myweb/)

&lt;?php
include_once 'db_connect.php';
include_once 'functions.php';
sec_session_start(); // custom secure way of starting a PHP session.
if (isset($_POST['email'], $_POST['p'])) {
    $email = $_POST['email'];
    $password = $_POST['p']; // The hashed password.
    if (login($email, $password, $mysqli) == true) {
        // Login success 
        header('Location: ../protected_page.php');
    } else {
        // Login failed 
        header('Location: ../index.php?error=1');
    }
} else {
    // The correct POST variables were not sent to this page. 
    echo 'Invalid Request';
}

6. Create file logout.php berikut ini lalu simpan di folder aplikasi web Anda (Misal: //xampp/htdocs/myweb/)

&lt;?php
include_once 'functions.php';
sec_session_start();
// Unset all session values 
$_SESSION = array();
// get session parameters 
$params = session_get_cookie_params();
// Delete the actual cookie. 
setcookie(session_name(),'', time() - 42000,
        $params[&quot;path&quot;], 
        $params[&quot;domain&quot;], 
        $params[&quot;secure&quot;], 
        $params[&quot;httponly&quot;]);
// Destroy session 
session_destroy();
header('Location: ../index.php');

7. Create file index.php berikut ini lalu simpan di folder aplikasi web Anda (Misal: //xampp/htdocs/myweb/)
File index.php adalah halaman login Anda.

&lt;?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
sec_session_start();
if (login_check($mysqli) == true) {
    $logged = 'in';
} else {
    $logged = 'out';
}
?&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Secure Login: Log In&lt;/title&gt;
    &lt;script type=&quot;text/JavaScript&quot; src=&quot;js/sha512.js&quot;&gt;&lt;/script&gt; 
    &lt;script type=&quot;text/JavaScript&quot; src=&quot;js/forms.js&quot;&gt;&lt;/script&gt; 
&lt;/head&gt;
&lt;body&gt;
        &lt;?php
        if (isset($_GET['error'])) {
            if(@$_SESSION['error']==2)
		echo '&lt;p class=&quot;error&quot;&gt;Account is locked due to 5 failed logins!&lt;/p&gt;';
	    else 
		echo '&lt;p class=&quot;error&quot;&gt;Error Logging In!&lt;/p&gt;';
        }
        ?&gt; 
        &lt;form action=&quot;includes/process_login.php&quot; method=&quot;post&quot; name=&quot;login_form&quot;&gt;                      
            Email: &lt;input type=&quot;text&quot; name=&quot;email&quot; /&gt;
            Password: &lt;input type=&quot;password&quot; name=&quot;password&quot; id=&quot;password&quot;/&gt;
            &lt;input type=&quot;button&quot; value=&quot;Login&quot; 
                   onclick=&quot;formhash(this.form, this.form.password);&quot; /&gt; 
        &lt;/form&gt;
&lt;?php
        if (login_check($mysqli) == true) {
            echo '&lt;p&gt;Currently logged ' . $logged . ' as ' . htmlentities($_SESSION['username']) . '.&lt;/p&gt;';
 
            echo '&lt;p&gt;Do you want to change user? &lt;a href=&quot;includes/logout.php&quot;&gt;Log out&lt;/a&gt;.&lt;/p&gt;';
        } else {
            echo '&lt;p&gt;Currently logged ' . $logged . '.&lt;/p&gt;';
            echo &quot;&lt;p&gt;If you don't have a login, please &lt;a href='register.php'&gt;register&lt;/a&gt;&lt;/p&gt;&quot;;
                }
?&gt;      
&lt;/body&gt;
&lt;/html&gt;

8. Create file protected_page.php berikut ini lalu simpan di folder aplikasi web Anda
File protected_page.php adalah halaman member yang bisa diakses setelah berhasil login.

&lt;?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
sec_session_start(); 
if(login_check($mysqli) == false) {
    echo 'You are not authorized to access this page, please login.';
    exit();
}

&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;UTF-8&quot;&gt;
        &lt;title&gt;Secure Login: Protected Page&lt;/title&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;styles/main.css&quot; /&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;?php if (login_check($mysqli) == true) : ?&gt;
            &lt;p&gt;Welcome &lt;?php echo htmlentities($_SESSION['username']); ?&gt;!&lt;/p&gt;
            &lt;p&gt;
                This is an example protected page.  To access this page, users
                must be logged in.  At some stage, we'll also check the role of
                the user, so pages will be able to determine the type of user
                authorised to access the page.
            &lt;/p&gt;
            &lt;p&gt;Return to &lt;a href=&quot;index.php&quot;&gt;login page&lt;/a&gt;&lt;/p&gt;
        &lt;?php else : ?&gt;
            &lt;p&gt;
                &lt;span class=&quot;error&quot;&gt;You are not authorized to access this page.&lt;/span&gt; 
Please &lt;a href=&quot;index.php&quot;&gt;login&lt;/a&gt;.
            &lt;/p&gt;
        &lt;?php endif; ?&gt;
    &lt;/body&gt;
&lt;/html&gt;

9. Create folder js di dalam folder aplikasi web Anda (Misal: //xampp/htdocs/myweb/js/)

10. Download file sha512.js dan forms.js lalu simpan di folder js

Setelah semua file siap, Anda dapat mencoba script login ini di web browser Anda.

Untuk script selengkapnya bisa Anda download dari sumber berikut ini:
https://github.com/peredurabefrog/phpSecureLogin

Preview, Resized dan Upload Gambar

Preview dan Upload Resized Image

Preview dan Upload Resized Image

Bagaimana cara upload gambar, dimana gambar yang mau diupload bisa di-preview dulu?
Nah… kali ini saya berikan coding untuk preview gambar yang mau diupload.
Disini juga diberikan cara untuk resized gambar sesuai dengan resolusi yang diinginkan.

Untuk upload file gambar, kita sediakan dulu HTML form dengan input type file berikut ini.
Ketika kita memilih file gambar yang akan di upload, maka gambar tersebut akan tampil di bagian div class preview.
Ini dilakukan oleh coding Javascript dengan nama fungsi readURL().

Dalam fungsi readURL() juga dimasukan coding untuk validasi apakah file yang dipilih itu adalah file gambar (.jpg) atau bukan.

Tombol “Upload Now” juga diberikan validasi checkSize() untuk memeriksa ukuran file yang mau diupload. Pada contoh coding ini diberikan batas ukuran file yang mau diupload adalah 200KB.

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Preview dan Upload Resized Image&lt;/title&gt;
&lt;style&gt;
div.preview {max-width:300px;height:200px;border:10px solid #000000;}
img.preview {width:100%;height:100%;}
&lt;/style&gt;
&lt;script&gt;
function checkSize(max_img_size)
{   var input = document.getElementById(&quot;imgfile&quot;);
    if(input.files.length==0)
	{	alert(&quot;Pilih file lebih dulu!&quot;);
		return false;
	}
	if(input.files &amp;&amp; input.files.length == 1)
    {   if (input.files[0].size &gt; max_img_size) 
        {  alert(&quot;Ukuran file harus di bawah &quot; 
                  + (max_img_size/1024) + &quot; KB&quot;);
            return false;
        }
    }
	return true;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Preview dan Upload Resized Image&lt;/h1&gt;
&lt;div class=&quot;preview&quot;&gt;&lt;img class=&quot;preview&quot; id=&quot;prevImage&quot; src=&quot;noimagepreview.png&quot; alt=&quot;Preview Image&quot; /&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;form id=&quot;Imgfrm&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot; onsubmit=&quot;return checkSize(204800);&quot;&gt;
	Select JPG file: &lt;input name=&quot;uploadedfile&quot; id=&quot;imgfile&quot; type=&quot;file&quot; onchange=&quot;readURL(this)&quot;; /&gt; 
	&lt;input type=&quot;submit&quot; name=&quot;upload&quot; value=&quot;Upload Now&quot; /&gt; 
&lt;/form&gt;
&lt;script&gt;
function readURL(input)
{ 	var ext = input.value.split('.').pop().toLowerCase();
	if (ext!='jpg')
	{	alert(&quot;Pilih file JPG!&quot;);}
	else 
	{	if (input.files &amp;&amp; input.files[0])
		{	var reader = new FileReader();
			reader.onload = function (e)
			{document.getElementById('prevImage').src=e.target.result;}
			reader.readAsDataURL(input.files[0]);
		}
	}
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

Setelah HTML Form dan Validasi Javascript sudah dibuat, berikutnya adalah proses upload gambar dengan resize. Maksudnya adalah upload file dengan cara resize resolusi gambar.
Berikut ini coding PHP untuk proses upload gambar dengan resize.

&lt;?php
function resize($newWidth, $targetFile, $originalFile)
{   $img = imagecreatefromjpeg($originalFile);
    list($width, $height) = getimagesize($originalFile);
    $newHeight = ($height / $width) * $newWidth;
    $tmp = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    if (file_exists($targetFile)) {unlink($targetFile);}
    imagejpeg($tmp, &quot;$targetFile.jpg&quot;);
}
if(isset($_POST['upload']))
{	$uploadedfile = $_FILES['uploadedfile']['name'];
	$ext = strtolower(pathinfo($uploadedfile, PATHINFO_EXTENSION));
	if ($ext!='jpg') die (&quot;Error: Harap Upload file JPG!&quot;);
	$target_path = &quot;img/A01.jpg&quot;;
	resize('300' , $target_path , $uploadedfile);
}
?&gt;

Selamat mencoba. Semoga berhasil.

Upload Download File dengan PHP

Upload Download File

Upload Download File

Pada kesempatan ini saya ingin memberikan coding untuk upload dan download file dengan web browser.
Upload dan download file merupakan fitur yang umum digunakan di sebuah website.

Untuk membuat fitur upload, kita sediakan HTML form dengan atribut-atribut sebagai berikut.

&lt;form enctype=&quot;multipart/form-data&quot; 
      action=&quot;uploader.php&quot; 
      method=&quot;post&quot; 
      onsubmit=&quot;return checkSize(1048576);&quot;&gt;
&lt;input type=&quot;file&quot; id=&quot;fileupload&quot; name=&quot;uploadedfile&quot;  /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Upload File&quot; /&gt;

Kemudian sediakan field dengan tag input bertipe “file” dan sebuah tombol “Upload File” dengan tag input bertipe ‘submit’. Jika tombol tersebut di click maka akan menjalankan file uploader.php yang ditulis pada form atribut action. Sebelum uploader.php dijalankan, form akan melakukan validasi dengan fungsi javascript checksize(1048576), yakni fungsi javascript untuk membatasi ukuran file yang diupload maksimum 1048576 Bytes atau 1 MB.

Berikut ini coding selengkapnya. Coding ini Anda simpan dengan nama file “index.php”.
Coding dibawah ini berisi form upload dan HTML table yang berisi file yang telah di upload.
Juga link untuk download filenya.

&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Upload Download File&lt;/title&gt;
&lt;style&gt;
html, body {font:12px Arial,Helvetica,sans-serif;}
fieldset {border:1px solid #ff0000; width:400px;}
legend {border:1px solid #ff0000;}
table {border-collapse:collapse;width:500px;}
td, th {border:1px solid #c0c0c0;padding:5px;}
th{background:#ff0000;color:#ffffff;}
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function checkSize(max_img_size)
{   var input = document.getElementById(&quot;fileupload&quot;);
    if(input.files &amp;&amp; input.files.length == 1)
    {	if (input.files[0].size &gt; max_img_size) 
        {  alert(&quot;Ukuran file harus di bawah &quot; 
                  + (max_img_size/1024/1024) + &quot; MB&quot;);
            return false;
        }
    }
    return true;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;uploader.php&quot; method=&quot;post&quot; 
      onsubmit=&quot;return checkSize(1048576);&quot;&gt;
&lt;fieldset&gt;
&lt;legend&gt;Upload File Max 1 MB&lt;/legend&gt;
Choose a file to upload: &lt;input name=&quot;uploadedfile&quot; type=&quot;file&quot; id=&quot;fileupload&quot; /&gt;&lt;br /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Upload File&quot; /&gt;
&lt;/fieldset&gt;
&lt;/form&gt;
&lt;br/&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;File Name&lt;/th&gt;
&lt;th&gt;Upload Date&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Delete&lt;/th&gt;
&lt;/tr&gt;
&lt;?php
if ($handle = opendir('./files/'))
{	while (false !== ($file = readdir($handle)))
    {   if($file!==&quot;.&quot; &amp;&amp; $file !==&quot;..&quot;)
	{	echo &quot;&lt;tr&gt;&lt;td&gt;&lt;a href=\&quot;download.php?id=&quot; . urlencode($file). &quot;\&quot;&gt;$file&lt;/a&gt;&lt;/td&gt;&quot;;
		echo &quot;&lt;td&gt;&quot; . date (&quot;m/d/Y H:i&quot;, filemtime(&quot;files/&quot;.$file)) . '&lt;/td&gt;';
		echo &quot;&lt;td&gt;&quot; . pathinfo(&quot;files/&quot;.$file, PATHINFO_EXTENSION) . ' file &lt;/td&gt;';
		echo &quot;&lt;td&gt;&quot; . round(filesize(&quot;files/&quot;.$file)/1024) . ' KB&lt;/td&gt;';
		echo &quot;&lt;td&gt;&lt;a href=\&quot;hapus.php?id=$file\&quot;&gt;Del&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&quot;;
        }
    }
    closedir($handle);
}
?&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;

Berikut ini coding untuk proses upload file. Coding ini Anda simpan dengan nama file “uploader.php”.
Coding ini akan dijalankan ketika tombol “Upload File” di click.

&lt;?php
$target_path = &quot;files/&quot;;
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
{ header(&quot;Location: index.php&quot;);}
else {echo &quot;Error uploading file. Please try again!&quot;;}
?&gt;

Coding berikutnya adalah untuk proses download file. Untuk download file yang telah diupload, kita sediakan link di HTML table yang ada di file index.php diatas.
Coding di bawah ini Anda simpan dengan nama file “download.php”.

&lt;?php
$direktori = &quot;./files/&quot;;
$filename = $_GET['id'];
if(file_exists($direktori.$filename)){
	$file_extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
	switch($file_extension){
	  case &quot;pdf&quot;: $ctype=&quot;application/pdf&quot;; break;
	  case &quot;exe&quot;: $ctype=&quot;application/octet-stream&quot;; break;
	  case &quot;zip&quot;: $ctype=&quot;application/zip&quot;; break;
	  case &quot;rar&quot;: $ctype=&quot;application/rar&quot;; break;
	  case &quot;doc&quot;: $ctype=&quot;application/msword&quot;; break;
	  case &quot;xls&quot;: $ctype=&quot;application/vnd.ms-excel&quot;; break;
	  case &quot;ppt&quot;: $ctype=&quot;application/vnd.ms-powerpoint&quot;; break;
	  case &quot;gif&quot;: $ctype=&quot;image/gif&quot;; break;
	  case &quot;png&quot;: $ctype=&quot;image/png&quot;; break;
	  case &quot;jpeg&quot;:
	  case &quot;jpg&quot;: $ctype=&quot;image/jpg&quot;; break;
	  default: $ctype=&quot;application/octet-stream&quot;;
	}
	if ($file_extension=='php'){
	  echo &quot;&lt;h1&gt;Access forbidden!&lt;/h1&gt;
		&lt;p&gt;Please contact Administrator.&lt;/p&gt;&quot;;
	  exit;
	}
	else{
	  header(&quot;Content-Type: octet/stream&quot;);
	  header(&quot;Pragma: private&quot;); 
	  header(&quot;Expires: 0&quot;);
	  header(&quot;Cache-Control: must-revalidate, post-check=0, pre-check=0&quot;);
	  header(&quot;Cache-Control: private&quot;,false); 
	  header(&quot;Content-Type: $ctype&quot;);
	  header(&quot;Content-Disposition: attachment; filename=\&quot;&quot;.basename($filename).&quot;\&quot;;&quot; );
	  header(&quot;Content-Transfer-Encoding: binary&quot;);
	  header(&quot;Content-Length: &quot;.filesize($direktori.$filename));
	  readfile(&quot;$direktori$filename&quot;);
	  exit();   
	}
}else{  echo &quot;&lt;h1&gt;Access forbidden!&lt;/h1&gt;
	      &lt;p&gt;Please contact Administrator.&lt;/p&gt;&quot;;
	exit;
}
?&gt;

Coding terakhir ini adalah untuk delete file. Link untuk delete file juga ada di HTML table pada file index.php di atas.

&lt;a href=\&quot;hapus.php?id=$file\&quot;&gt;Del&lt;/a&gt;

Simpanlah coding di bawah ini dengan nama file “hapus.php”.

&lt;?php
$id = $_GET[&quot;id&quot;];
unlink(&quot;files/&quot;.$id);
header(&quot;location:index.php&quot;);
?&gt;

Silakan Anda coba. Semoga sukses ya…

Membuat Table dengan CSS dan tag DIV

css table div

css table div

Selain menggunakan HTML tag <table>, Anda juga dapat membuat table dengan menggunakan tag <div> dan CSS.

CSS menyediakan atribut display:table untuk menampilkan element HTML berbentuk table.

Berikut ini coding selengkapnya:

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;CSS Table Div&lt;/title&gt;
&lt;style&gt;
html,body{font:14px arial,verdana,san-serif;}
.container{
    display:table;
    width:400px;
    border-collapse:collapse;
	margin:0 auto;
	line-height:25px;
}
.table-row:hover{background-color:#99ccff;}
.heading{
    font-weight:bold;
    display:table-row;
    background-color:#C91622;
    text-align:center;
    line-height:35px;
    color:#ffffff;
}
.table-row{  
    display:table-row;
    text-align:center;
}
.strip{  
    display:table-row;
    text-align:center;
	background-color:#f0f0f0;
}
.col{ 
	display:table-cell;
 	border:1px solid #CCC;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Membuat Table dengan CSS dan tag DIV&lt;/h1&gt;
&lt;hr/&gt;&lt;br/&gt;
&lt;div class=&quot;container&quot;&gt;
    &lt;div class=&quot;heading&quot;&gt;
		&lt;div class=&quot;col&quot;&gt;No.&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;Browser&lt;/div&gt;
    &lt;/div&gt;
	&lt;div class=&quot;table-row&quot;&gt;
		&lt;div class=&quot;col&quot;&gt;1&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;IE&lt;/div&gt;
    &lt;/div&gt;
	&lt;div class=&quot;table-row strip&quot;&gt;
        &lt;div class=&quot;col&quot;&gt;2&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;Firefox&lt;/div&gt;
    &lt;/div&gt;
	&lt;div class=&quot;table-row&quot;&gt;
        &lt;div class=&quot;col&quot;&gt;3&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;Chrome&lt;/div&gt;
    &lt;/div&gt;
	&lt;div class=&quot;table-row strip&quot;&gt;
        &lt;div class=&quot;col&quot;&gt;4&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;Opera&lt;/div&gt;
    &lt;/div&gt;
	&lt;div class=&quot;table-row&quot;&gt;
        &lt;div class=&quot;col&quot;&gt;5&lt;/div&gt;
		&lt;div class=&quot;col&quot;&gt;Safari&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Silakan mencoba.

 

 

Export Data MySQL ke Excel .csv

Pada Aplikasi Web Database biasanya kita memerlukan fasilitas untuk export atau download data dari database MySQL ke Excel.

Kali ini saya akan berikan contoh coding PHP untuk membuat fasilitas export data MySQL ke dalam file .csv yang dapat dibuka dengan program Excel.

Contoh coding PHP berikut ini untuk mendownload data pada tabel “users di database “students”, berikut ini coding selengkapnya.

&lt;?php
error_reporting(0);
date_default_timezone_set('Asia/Jakarta');
$Timestamp = date('Ymd@His');
// Connect to DB
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'students';
$tbl	= 'users';
$filename = &quot;$tbl&quot;.&quot;_&quot;.&quot;$Timestamp&quot;.&quot;.csv&quot;;
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) or die ('Error connecting to db!');
// Get all fields names in the table.
$result = mysqli_query($conn,&quot;SHOW COLUMNS FROM $tbl&quot;) or die(&quot;Error running query!&quot;);
$numofcol = mysqli_num_rows($result);
$out = '';
if ($numofcol &gt; 0)
{   while ($row = mysqli_fetch_assoc($result))
	{	$out .='&quot;'.$row['Field'].'&quot;,'; }
}
$out .=&quot;\n&quot;;
// Add all records in the table to $out.
$result=mysqli_query($conn,&quot;SELECT * FROM $tbl&quot;) or die(&quot;Error run query&quot;);
while ($l = mysqli_fetch_array($result))
{	for ($i = 0; $i &lt; $numofcol; $i++)
	{	$out .='&quot;'.$l[&quot;$i&quot;].'&quot;,'; }
	$out .=&quot;\n&quot;;
}
//Download $filename.csv
header(&quot;Expires: 0&quot;);
header(&quot;Cache-Control: must-revalidate, post-check=0, pre-check=0&quot;);
header(&quot;Content-Type: application/force-download&quot;);
header(&quot;Content-Type: application/octet-stream&quot;);
header(&quot;Content-Type: application/download&quot;);
header(&quot;Content-Disposition: attachment;filename=$filename&quot;);
header(&quot;Content-Transfer-Encoding: binary &quot;);
echo $out;
//or save $out as $filename.csv on server
//file_put_contents($filename, $out);
?&gt;

Jika Anda ingin menyimpan file csv di server, Anda tinggal membuka comment pada 2 baris terakhir.

Selamat mencoba, semoga sukses.

Selected Table Row dengan CSS

Selected Table Row dengan CSS

Selected Table Row dengan CSS

Table hover sudah pernah kita bahas dan kali ini saya berikan cara supaya kita bisa click baris-baris pada table. Selain warna yang berubah pada baris di tunjuk oleh pointer mouse, kita juga bisa di click beberapa baris untuk memilihnya (selected table row).

Hal ini dapat dilakukan dengan menggunakan fungsi javascript querySelectorAll() dan addEventListener().
Berikut ini coding selengkapnya:

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;CSS Select Table Row&lt;/title&gt;
&lt;style&gt;
.mytable,th,td{border:1px solid #ffffff;border-collapse:collapse;font:12px verdana,arial,sans-serif;}
.mytable th {background:#000099;color:#ffffff;padding:10px;font-weight:bold;}
.mytable td {padding:8px;}
.mytable tr {background:#f0f0f0;}
.mytable tr:hover td {background:#c0c0c0;}
.mytable tr.selected {background: #00aacc;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table class=&quot;mytable&quot;&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;th&gt;No.&lt;/th&gt;&lt;th width=&quot;200&quot;&gt;Table Head 1&lt;/th&gt;&lt;th width=&quot;200&quot;&gt;Table Head 2&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;content&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var trs = document.querySelectorAll(&quot;tr&quot;);
for (var i = 0; i &lt; trs.length; i++) {
    trs[i].addEventListener(&quot;click&quot;, function() 
    {   if(this.className.indexOf(&quot;selected&quot;) == 0)
            this.className = &quot;&quot;;
        else 
            this.className = &quot;selected&quot;;
    });
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga sukses.

Membuat Tombol Push Botton untuk Link href dengan CSS

Link Berbentuk Tombol

Link Berbentuk Tombol

Umumnya kita membuat html link (tag a href) berbentuk text yang bisa di click. nah… disini saya akan berikan cara membuat supaya link (a href) berbentuk tombol seperti html tag input atau tag botton dengan menggunakan CSS3.

Berikut ini coding HTMM dan CSS untuk membuat tombol Push Botton untuk Link href dengan CSS:


&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Tombol Link&lt;/title&gt;
&lt;style&gt;
a.tombol {
   background-color:#b0b0b0;
   font:bold 20px arial,sans-serif;
   text-decoration:none;
   color:#fff;
   margin:5px;
   position:relative;
   padding:10px 20px;
   border-radius: 5px;
   box-shadow: inset 0px 1px 0px #a0a0a0,
                     0px 3px 0px 0px #808080,
                     0px 5px 3px #999;}
a.tombol:active {
   background-color:#ff0000; top:3px;
   box-shadow: inset 0px 1px 0px #a0a0a0,
                     0px 1px 0px 0px #808080,
                     0px 1px 3px #999;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;Membuat Tombol Push Botton&lt;br/&gt;
untuk Link href dengan CSS&lt;/h2&gt;
&lt;hr align=&quot;left&quot; width=&quot;200&quot;/&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=1&quot;&gt;1&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=2&quot;&gt;2&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=3&quot;&gt;3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=4&quot;&gt;4&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=5&quot;&gt;5&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=6&quot;&gt;6&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=7&quot;&gt;7&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=8&quot;&gt;8&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=9&quot;&gt;9&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=*&quot;&gt;*&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=0&quot;&gt;0&lt;/a&gt;
&lt;a class=&quot;tombol&quot; href=&quot;?t=#&quot;&gt;#&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
&lt;hr align=&quot;left&quot; width=&quot;200&quot;/&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga berhasil.

Membaca Email dengan PHP

Email IMAP

Membaca Email dengan PHP

PHP memiliki fungsi untuk mengambil dan membaca email melalui internet protokol POP3 dan IMAP. Port yang kita gunakan untuk itu adalah 993 (IMAP SSL)
Fungsi-fungsi yang digunakan adalah:

imap_open($hostname,$username,$password);
imap_fetch_overview($mbox,”1:$MN”,0);
imap_header($mbox, $msg);

Coding berikut ini menampilkan semua email dari GMail Anda, seperti pada gambar di atas.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Baca Email&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
#mytable {width:800px;border:1px #a9c6c9 solid;font:12px verdana,arial,sans-serif;color:#333333;}
#mytable td {padding:8px;}
#mytable tr:hover td {background:#a0a0a0;color:#ffffff;}
#mytable th {background-color:#000099;color:#ffffff;padding:8px; }
#mytable tr:nth-child(odd) {background-color:#c0c0c0;}
#mytable tr:nth-child(even) {background-color:#f0f0f0;}
&lt;/style&gt;
&lt;script type=&quot;text/javaScript&quot;&gt;
function buka(url)
{newwindow = window.open(url, '_blank', &quot;status=yes, height=300, width=400, resizeable=yes&quot;);}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
$hostname = '{imap.gmail.com:993/ssl/novalidate-cert}[Gmail]/All Mail';
$username = 'your_email@gmail.com';
$password = 'your_gmail_password';
$mbox = imap_open($hostname,$username,$password) or die('Cannot connect to mail server: ' . imap_last_error());
$MC=imap_check($mbox);
$MN=$MC-&gt;Nmsgs;
$overview=imap_fetch_overview($mbox,&quot;1:$MN&quot;,0);
$size=sizeof($overview);
echo &quot;&lt;h1&gt;Baca Email&lt;/h1&gt;
	&lt;table id='mytable'&gt;
	&lt;tr&gt;&lt;th&gt;Msg_Id&lt;/th&gt;&lt;th&gt;From&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Subject&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt;&lt;/tr&gt;&quot;;
for($i=$size-1;$i&gt;=0;$i--)
{	$val=$overview[$i];
	$msg=$val-&gt;msgno;
	$date=date('Y-m-d H:i:s', strtotime($val-&gt;date));
	$subj=isset($val-&gt;subject)?$val-&gt;subject:&quot;(no subject)&quot;;
	$header = imap_header($mbox, $msg);
	$from = $header-&gt;from;
	$email_size = $val-&gt;size;
	foreach ($from as $id =&gt; $object) 
	{	$fromname = isset($object-&gt;personal)?$object-&gt;personal:$object-&gt;mailbox;
		$fromaddress = $object-&gt;mailbox . &quot;@&quot; . $object-&gt;host;
	}
	echo &quot;&lt;tr onclick=\&quot;buka('read_email.php?msgno=$msg&amp;msgdate=$date&amp;msgfrom=$fromname&amp;msgemail=$fromaddress&amp;msgsubj=$subj');\&quot;&gt;
		&lt;td&gt;$msg&lt;/td&gt; &lt;td&gt;$fromname&lt;/td&gt; &lt;td&gt;$fromaddress&lt;/td&gt; &lt;td&gt;$date&lt;/td&gt; &lt;td&gt;$subj&lt;/td&gt;&lt;td&gt;$email_size&lt;/td&gt;&lt;/tr&gt;&quot;;
}
echo &quot;&lt;/table&gt;&quot;;
imap_close($mbox);
?&gt;
&lt;/body&gt;
&lt;/html&gt;

Anda dapat click baris pada table-nya untuk membaca isi email Anda pada window browser baru.

Berikut ini coding untuk membaca isi email Anda

&lt;?php
function get_mime_type(&amp;$structure)
{   $primary_mime_type = array(&quot;TEXT&quot;, &quot;MULTIPART&quot;, &quot;MESSAGE&quot;, &quot;APPLICATION&quot;, &quot;AUDIO&quot;, &quot;IMAGE&quot;, &quot;VIDEO&quot;, &quot;OTHER&quot;);
    if($structure-&gt;subtype) {return $primary_mime_type[(int) $structure-&gt;type] . '/' . $structure-&gt;subtype;}
    return &quot;TEXT/PLAIN&quot;;
}
function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false)
{   if (!$structure) {$structure = imap_fetchstructure($stream, $msg_number);}
    if($structure)
    {   if($mime_type == get_mime_type($structure))
        {   if(!$part_number) {$part_number = &quot;1&quot;;}
            $text = imap_fetchbody($stream, $msg_number, $part_number);
            if($structure-&gt;encoding == 3) {return imap_base64($text);}
			else if ($structure-&gt;encoding == 4) {return imap_qprint($text);}
			else {return $text;}
        }
        if ($structure-&gt;type == 1) /* multipart */
        {   while (list($index, $sub_structure) = each($structure-&gt;parts))
            {   if ($part_number) {$prefix = $part_number . '.';}
                $data = get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));
                if ($data) {return $data;}
            }
        }
    }
    return false;
}
$msg_number = $_GET['msgno'];
$msg_from = $_GET['msgfrom'];
$msg_email = $_GET['msgemail'];
$msg_date = $_GET['msgdate'];
$msg_subject = $_GET['msgsubj'];
$hostname = '{imap.gmail.com:993/ssl/novalidate-cert}[Gmail]/All Mail';
$username = 'your_email@gmail.com';
$password = 'your_gmail_password';
$stream = imap_open($hostname,$username,$password) or die('Cannot connect to mail server: ' . imap_last_error());
$isiemail = get_part($stream, $msg_number, &quot;TEXT/HTML&quot;);
echo &quot;&lt;h2&gt;$msg_subject&lt;/h2&gt;
	  From: $msg_from ($msg_email) &lt;br /&gt;
	  Date: $msg_date&lt;br/&gt;
	  &lt;hr /&gt;
	  $isiemail&quot;;
?&gt; 

Selamat mencoba, semoga sukses.

Send Email dengan PHP

SendEmail1

PHP memiliki fungsi mail() untuk mengirim email, dengan format:

$sent = @mail($to, $subject, $message, $headers);

Dimana $to adalah alamat email penerima, $subject adalah subyek emailm $message adalah isi/pesan emailnya dan $headers berisi email header yang formatnya harus sesuai dengan standard email yang dikirim.

Dibawah ini diberikan coding HTML berupa form email yang dapat diisi dengan parameter yang diperlukan oleh fungsi PHP tersebut. Email yang dikirim dapat berisi 1 file attachment.

Berikut ini coding PHP selengkapnya.

&lt;?php
if(isset ($_POST[&quot;send&quot;]))
{   $from = $_POST[&quot;from&quot;];
    $to	= $_POST[&quot;to&quot;];
    $subject = $_POST[&quot;subject&quot;];
    $message = nl2br($_POST[&quot;msg&quot;]);
    $upload_name = $_FILES[&quot;upload&quot;][&quot;name&quot;];
    $upload_type = $_FILES[&quot;upload&quot;][&quot;type&quot;];
    $upload_size = $_FILES[&quot;upload&quot;][&quot;size&quot;];
    $upload_temp = $_FILES[&quot;upload&quot;][&quot;tmp_name&quot;]; 

    $num = md5(time());
    //Normal headers
    $headers  = &quot;From:&quot;.$from.&quot;\r\n&quot;;
    $headers  .= &quot;MIME-Version: 1.0\r\n&quot;;
    $headers  .= &quot;Content-Type: multipart/mixed; &quot;;
    $headers  .= &quot;boundary=&quot;.$num.&quot;\r\n&quot;;
    $headers  .= &quot;--$num\r\n&quot;;
    // This two item help avoid spam
    $headers .= &quot;Message-ID: &lt;&quot;.gettimeofday(true).&quot;-TheSystem@&quot;.$_SERVER['SERVER_NAME'].&quot;&gt;\r\n&quot;;
    $headers .= &quot;X-Mailer: PHP v&quot;.phpversion().&quot;\r\n&quot;;
    // With html message
    $headers .= &quot;Content-Type: text/html; charset=iso-8859-1\r\n&quot;; 
    $headers .= &quot;Content-Transfer-Encoding: 8bit\r\n&quot;;
    $headers .= &quot;&quot;.$message.&quot;\n&quot;;
    $headers .= &quot;--$num&quot;;
    // With Attachment
    if ($upload_name!=&quot;&quot;)
    {	$fp = fopen($upload_temp, &quot;rb&quot;);
	$file = fread($fp, $upload_size);
	$file = chunk_split(base64_encode($file));
	$headers  .= &quot;\nContent-Type:&quot;.$upload_type.&quot; &quot;;
	$headers  .= &quot;name=\&quot;&quot;.$upload_name.&quot;\&quot;r\n&quot;;
	$headers  .= &quot;Content-Transfer-Encoding: base64\r\n&quot;;
	$headers  .= &quot;Content-Disposition: attachment; &quot;;
	$headers  .= &quot;filename=\&quot;&quot;.$upload_name.&quot;\&quot;\r\n\n&quot;;
	$headers  .= &quot;&quot;.$file.&quot;\r\n&quot;;
	$headers  .= &quot;--&quot;.$num.&quot;--\n&quot;;
	fclose($fp);
    }
    else 
    { $headers .= &quot;--\n&quot;; } //close boundary
    // SEND MAIL
    $sent = @mail($to, $subject, $message, $headers);
    if($sent)
    {	echo 'Mail has been sent! &lt;br /&gt;
           Please check both inbox and spam folder! &lt;br /&gt;&lt;br /&gt;';
    }
    else
    {	echo 'Mail can not be sent! Please try again later! &lt;br /&gt;&lt;br /&gt;';
    }
    unset ($_POST[&quot;send&quot;]);
}
?&gt;
&lt;html&gt;
&lt;body&gt;
&lt;head&gt;
&lt;title&gt;Send Email&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function clearMe()
{	document.getElementById(&quot;fl&quot;).value='';
	document.getElementById(&quot;upload&quot;).innerHTML=&quot;&lt;input type=\&quot;file\&quot; id=\&quot;fl\&quot;&gt;&quot;;
}
function cekData()
{	if (formemail.from.value == &quot;&quot;)
	{	alert(&quot;Please fill in from field!&quot;);
		formemail.from.focus();
		return false;
	}
	if (formemail.to.value == &quot;&quot;)
	{	alert(&quot;Please fill in to field!&quot;);
		formemail.to.focus();
		return false;
	}
	if (formemail.subject.value == &quot;&quot;)
	{	alert(&quot;Please type the subject!&quot;);
		formemail.subject.focus();
		return false;
	}
	if (formemail.msg.value == &quot;&quot;)
	{	alert(&quot;Please type the message!&quot;);
		formemail.msg.focus();
		return false;
	}
	if (formemail.problemdetail.value == &quot;&quot;)
	{	alert(&quot;Problem detail must be filled!&quot;);
		formemail.problemdetail.focus();
		return false;
	}
	var filter = new RegExp(
		&quot;^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@&quot; +
		&quot;[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$&quot;);
	if (!filter.test(formemail.to.value) &amp;&amp; formemail.to.value != &quot;&quot;)
	{	alert(&quot;Please enter to with valid email address!&quot;);
		formemail.to.focus();
		return false;
	}	   
	else
		return true;   
}
&lt;/script&gt;
&lt;/head&gt;
&lt;form id=&quot;idformemail&quot; name=&quot;formemail&quot; method=&quot;post&quot; action=&quot;&lt;?php echo $_SERVER[&quot;PHP_SELF&quot;]; ?&gt;&quot; enctype=&quot;multipart/form-data&quot; onsubmit=&quot;return cekData();&quot;&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;From&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;from&quot; id=&quot;from&quot; size=&quot;54&quot; value=&quot;Helpdesk Team &lt;helpdesk@kampushendra.com&gt;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;To&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;to&quot; id=&quot;to&quot; size=&quot;54&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Subject&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;subject&quot; id=&quot;subject&quot; size=&quot;54&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Message&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;&lt;textarea name=&quot;msg&quot; rows=&quot;4&quot; cols=&quot;40&quot;&gt;&lt;/textarea&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Attachment&lt;/td&gt;&lt;td&gt;:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;file&quot; name=&quot;upload&quot; id=&quot;fl&quot;&gt;
&lt;input type=&quot;button&quot; value=&quot;Clear&quot; onClick=&quot;clearMe()&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;span id=&quot;attach&quot;&gt;&lt;input type=&quot;submit&quot; value=&quot;Submit&quot; id=&quot;send&quot; name=&quot;send&quot;&gt; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga sukses.

Membuat File Log Visitor Website dengan PHP

Log Visitor

Log Visitor

PHP memiliki build-in function untuk membaca dan menulis file. Kita akan gunakan function ini untuk membuat catatan/log pengunjung/visitor website kita dengan coding PHP.

Berikut ini Coding PHP selengkapnya.

&lt;?php
error_reporting(0);
date_default_timezone_set(&quot;Asia/Jakarta&quot;);
main();
function outDir()
{	$outPath = $outPath.'visitorlog\\';
	if (!file_exists($outPath))
	{ mkdir($outPath,0777) or die(&quot;can't make subfolder&quot;); }
	return $outPath;
}

function openfile($path,$createDate)
{	$outFile = $path.$createDate.'.html';
	if (!file_exists($outFile))
	{ $fh = fopen($outFile, 'w') or die(&quot;can't open file&quot;);
	  initiateoutput($fh,$createDate);
	}
	else
	{ $fh = fopen($outFile, 'a') or die(&quot;can't open file&quot;);	}
	return $fh;
}
function createoutput($file,$execTime,$url,$ipAddress,$browser)
{	fwrite($file,&quot;&lt;tr&gt;&lt;td align='center'&gt;$execTime&lt;/td&gt;&lt;td&gt;&quot;.
        strtoupper($url).
        &quot;&lt;/td&gt;&lt;td&gt;$ipAddress&lt;/td&gt;&lt;td&gt;$browser&lt;/td&gt;&lt;/tr&gt;&quot;);
	fclose($file);
}

function initiateoutput($fh,$createDate)
{	fwrite($fh,&quot;&lt;html&gt;\n&quot;);
	fwrite($fh,&quot;&lt;head&gt;&lt;title&gt;Laporan&lt;/title&gt;&lt;/head&gt;\n&quot;);
	fwrite($fh,&quot;&lt;body&gt;\n&quot;);
	fwrite($fh,&quot;&lt;/h1&gt;&quot;);
	fwrite($fh,&quot;&lt;table border='1' align='center' valign='center'&gt;\n
                    &lt;caption&gt;&lt;h1&gt;Data Pengunjung Website per $createDate&lt;/h1&gt;
                    &lt;/caption&gt;\n&quot;);
	fwrite($fh,&quot;&lt;tr&gt;&lt;th width='200' align='center'&gt;Waktu&lt;/th&gt;
                    &lt;th width='200' align='center'&gt;Halaman&lt;/th&gt;
                    &lt;th width='100' align='center'&gt;IP Address&lt;/th&gt;
                    &lt;th width='250' align='center'&gt;Browser&lt;/th&gt;\n&quot;);
}
function main()
{	$execTime = date('Y-m-d H:i:s');
	$createDate = date('d-M-Y');
	$url = &quot;http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&quot;;
	$ipAddress   = gethostbyname( $hostname);
	$browser = $_SERVER['HTTP_USER_AGENT'];
	$path = outDir();
	$file = openfile($path,$createDate);
	createoutput($file,$execTime,$url,$ipAddress,$browser);
	$file = openfile($path,$createDate);
	include &quot;$path&quot;.&quot;$createDate&quot;.&quot;.html&quot;;
}
?&gt;

Silakan Anda pelajari setiap baris dari coding tersebut.

Selamat mencoba, semoga berhasil.

Drop Down List Dinamis dengan JavaScript

drop down list 1

drop down list 1

Drop Down List 2

Drop Down List 2

Yang dimaksud dengan “Drop Down List Dinamis” disini adalah ketika Anda memilih satu item dalam drop down list box maka drop down list box berikutnya akan berisi list item yang sesuai dengan pilihan Anda.

Drop down list bisa Anda buat dengan tag <select> <option> seperti coding dibawah ini.

&lt;body&gt;
&lt;h3&gt;Dynamic Drop Down List dengan JavaScript&lt;/h3&gt;
&lt;form name=&quot;form1&quot;&gt;	
	&lt;select  name=&quot;Category&quot; onChange=&quot;SelectCat2();&quot; &gt;
	&lt;option value=&quot;&quot;&gt;Pilih Jenis Produk&lt;/option&gt;
	&lt;option value=&quot;Desktop&quot;&gt;Desktop&lt;/option&gt;
	&lt;option value=&quot;Laptop&quot;&gt;Laptop&lt;/option&gt;
	&lt;option value=&quot;Smartphone&quot;&gt;Smartphone&lt;/option&gt;
	&lt;/select&gt;
	&lt;select id=&quot;SubCat&quot; name=&quot;SubCat&quot;&gt;
	&lt;option value=&quot;&quot;&gt;Pilih Merk&lt;/option&gt;
	&lt;/select&gt;
&lt;/form&gt;
&lt;/body&gt;

Pada contoh di atas kita buat 2 field drop down list, yakni: field “Category” dan field “SubCat”.
Pada field “Category” diberikan atribut onChange=”SelectCat2();” supaya ketika field itu berubah isinya maka akan menjalankan fungsi javascript “SelectCat2()”.

Berikut ini coding JavaScript selengkapnya.

function SelectCat2(){
	removeAllOptions(document.form1.SubCat);
	addOption(document.form1.SubCat, &quot;&quot;, &quot;Pilih Merk&quot;, &quot;&quot;);
	if(document.form1.Category.value == 'Desktop')
	{	addOption(document.form1.SubCat,&quot;Acer&quot;, &quot;Acer&quot;);
		addOption(document.form1.SubCat,&quot;Dell&quot;, &quot;Dell&quot;);
		addOption(document.form1.SubCat,&quot;Lenovo&quot;, &quot;Lenovo&quot;);
	}
	if(document.form1.Category.value == 'Laptop')
	{	addOption(document.form1.SubCat,&quot;Asus&quot;, &quot;Asus&quot;);
		addOption(document.form1.SubCat,&quot;Acer&quot;, &quot;Acer&quot;);
		addOption(document.form1.SubCat,&quot;Sony Vaio&quot;, &quot;Sony Vaio&quot;);
	}
	if(document.form1.Category.value == 'Smartphone')
	{	addOption(document.form1.SubCat,&quot;Samsung&quot;, &quot;Samsung&quot;);
		addOption(document.form1.SubCat,&quot;LG&quot;, &quot;LG&quot;);
		addOption(document.form1.SubCat,&quot;Sony Xperia&quot;, &quot;Sony Xperia&quot;);
	}
}
function removeAllOptions(selectbox)
{	var i;
	for(i=selectbox.options.length-1;i&gt;=0;i--)
	{	selectbox.remove(i); }
}
function addOption(selectbox, value, text )
{	var optn = document.createElement(&quot;OPTION&quot;);
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

Anda bisa meletakan coding javascript ini di dalam tag head HTML.

Selamat mencoba, semoga bermanfaat.

 

 

Membuat Efek Fade-in/Fade-out dengan CSS3

css3 transition

css3 transition

Hallo, ketemu lagi di coding website… Kali ini saya mencoba membuat efek fade-in dan fade-out elemen div dengan menggunakan fungsi transition yang ada di CSS3.

Coding ini biasa saya gunakan untuk menampilkan pesan error dalam box yang dapat hilang dalam beberapa detik (auto close box).

Baiklah, langsung saja saya berikan coding selengkapnya dibawah ini.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;CSS3 Transition&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
#box
{   position:fixed;top:50%;left:50%;
    margin-top:-100px;margin-left:-200px;
    width:350px;height:80px;
    font-size:20px;color:#FFFFFF;
    padding:15px;text-align:center;
    -webkit-border-radius:5px;
    -moz-border-radius:5px;
    border-radius:5px;
    background-color:#00b953;
    transition:opacity 1s ease-in-out;
    -webkit-transition:opacity 1s ease-in-out;
    -moz-transition:opacity 1s ease-in-out;
    -o-transition:opacity 1s ease-in-out;
}
#box.fade-out{opacity:0;transition-delay: 2s;}
#box.fade-in{opacity:1;transition-delay: 2s;}
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function fade(btnElement)
{   if (btnElement.value === &quot;Fade Out&quot;) {
        document.getElementById(&quot;box&quot;).className = &quot;fade-out&quot;;
        btnElement.value = &quot;Fade In&quot;;
    }
    else {
        document.getElementById(&quot;box&quot;).className = &quot;fade-in&quot;;
        btnElement.value = &quot;Fade Out&quot;;
    }
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h3&gt;Membuat Efek Fade-in/Fade-out dengan CSS&lt;/h3&gt;
    &lt;input id=&quot;mybutton&quot; type=&quot;button&quot; value=&quot;Fade Out&quot; onclick=&quot;fade(this);&quot; /&gt;
    &lt;div id=&quot;box&quot; &gt;
        Perhatian&lt;hr&gt;
	Informasi ini akan hilang dalam 3 detik!
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. semoga berhasil.

Mengambil Parameter URL dengan Javascript

Form-HTML

Form-HTML

Metode pengiriman data lewat form HTML bisa dilakukan dengan 2 cara, yakni Method Get dan Method Post.

Perbedaannya adalah dengan method=post maka data dikirim tidak melalui URL, tapi melalui HTTP Request. Method=post memang lebih aman dan sangat direkomendasikan. Namun ada kalanya kita cukup memerlukan method=get untuk mengambil data yang dikirim lewat URL.

Sebagai contoh kita coba buat sebuah form dengan coding HTML sebagai berikut.

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Form Pendaftaran&lt;/title&gt;
&lt;style&gt;
fieldset{width:400px;border-color:#ff0000;border-style: solid;}
label,textarea{display:inline-block;vertical-align:middle;}
label {display:inline-block;width:100px;height:25px;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id=&quot;formTes&quot; name=&quot;formTes&quot; action=&quot;tesform.html&quot; method=&quot;get&quot;&gt;
&lt;fieldset&gt;&lt;legend&gt;Formulir Pendaftaran&lt;/legend&gt;
&lt;label&gt;Nama:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;nama&quot; maxlength=&quot;40&quot; size=&quot;40&quot; /&gt;&lt;br/&gt;
&lt;label&gt;Alamat:&lt;/label&gt;
&lt;textarea rows=&quot;3&quot; cols=&quot;30&quot; name=&quot;alamat&quot;/&gt;&lt;/textarea&gt;&lt;br/&gt;
&lt;label&gt;Kota:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;kota&quot; maxlength=&quot;20&quot; size=&quot;20&quot; /&gt;&lt;br/&gt;
&lt;label&gt;Kode Pos:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;kodepos&quot; maxlength=&quot;5&quot; size=&quot;6&quot; /&gt;&lt;br/&gt;
&lt;label&gt;e-mail:&lt;/label&gt;
&lt;input type=&quot;text&quot; name=&quot;email&quot; size=&quot;40&quot;/&gt;
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Kirim&quot; /&gt;&lt;/p&gt;
&lt;/fieldset&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

Simpan coding itu dengan nama file form.html lalu buat file baru dengan nama tesform.html.

Copy paste coding berikut ini ke dalam file tesform.html.

&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;
&lt;script type='text/JavaScript'&gt;
//ambil URL
var url = window.location.toString();
//ambil bagian parameternya
url.match(/\?(.+)$/);
var params = RegExp.$1;
// pisahkan parameter URL ke associative array
var params = params.split(&quot;&amp;&quot;);
var queryStringList = {};
for(var i=0;i&lt;params.length;i++)
{	var tmp = params[i].split(&quot;=&quot;);
	queryStringList[tmp[0]] = unescape(tmp[1]);
}
// tampilkan isi associative array
for(var i in queryStringList)
{	var res = queryStringList[i].replace(/[+]/g, &quot; &quot;);
	document.write(i+&quot; = &quot;+res+&quot;&lt;br/&gt;&quot;);
}
&lt;/script&gt;
&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;

Coba jalankan file form.html dam isilah form HTML tersebut lalu submit. Maka akan tampil hasil isian form tersebut.

Hasil Submit Form

Hasil Submit Form

Selamat mencoba. semoga berhasil.

Membuat Captcha dengan JavaScript

Captcha

Captcha

reCaptcha merupakan satu cara untuk melindungi website dari ancaman spam. Misalkan kita memiliki website dimana terdapat form yang dapat diisi dan disubmit oleh user. Nah, Spam dapat men-submit form tersebut berkali-kali.

Untuk mencegah ancaman spam, biasanya ditambahkan reCaptcha pada form website.

Kita dapat membuat captcha dengan menggunakan JavaScript dibawah ini:

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Captcha dengan Javascript&lt;/title&gt;
&lt;style&gt;
.captcha
{ font: italic bold 16px &quot;Comic Sans MS&quot;, cursive, sans-serif; 
color:#a0a0a0;background-color:#c0c0c0;
width:100px;border-radius: 5px;
text-align:center;
text-decoration:line-through;
}
.errmsg
{color:#ff0000;}
&lt;/style&gt;
&lt;script&gt;
var captcha= new Array ();
function validateRecaptcha(){
	var recaptcha= document.getElementById(&quot;recaptcha&quot;).value;;
	var validRecaptcha=0;
	for(var z=0; z&lt;6; z++){
		if(recaptcha.charAt(z)!= captcha[z]){
			validRecaptcha++;
		}
	}
	if (recaptcha == &quot;&quot;){
		document.getElementById('errCaptcha').innerHTML = 'Re-Captcha must be filled';
	} else if (validRecaptcha&gt;0 || recaptcha.length&gt;6){
		document.getElementById('errCaptcha').innerHTML = 'Sorry, Wrong Re-Captcha';
	} else{
		document.getElementById('errCaptcha').innerHTML = 'OK';
	}
}
function createCaptcha(){
	for(q=0; q&lt;6 ; q++){
		if(q %2 ==0){
			captcha[q] = String.fromCharCode(Math.floor((Math.random()*26)+65));
		}else{		
			captcha[q] = Math.floor((Math.random()*10)+0);
		}
	}
	thecaptcha=captcha.join(&quot;&quot;);
	document.getElementById('captcha').innerHTML=
	 &quot;&lt;span class='captcha'&gt; &quot; + thecaptcha+ &quot; &lt;/span&gt;&quot; + &quot;&amp;nbsp; &lt;a onclick='createCaptcha()' href='#'&gt;recaptcha&lt;/a&gt;&quot;;	
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Captcha : &lt;/td&gt;
	&lt;td id=&quot;captcha&quot;&gt;
	&lt;script&gt; createCaptcha(); &lt;/script&gt;
    &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td&gt;Type Captcha : &lt;/td&gt;
	&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;recaptcha&quot; id=&quot;recaptcha&quot; placeholder=&quot;Type the captcha&quot;/&gt;&lt;/td&gt;
    &lt;td id=&quot;errCaptcha&quot; class=&quot;errmsg&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td colspan=&quot;2&quot; style=&quot;text-align:right;&quot;&gt;
		&lt;input type=&quot;button&quot; value=&quot;Submit&quot; onClick=&quot;validateRecaptcha()&quot;/&gt;
	&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;

Anda dapat mengembangkan coding tersebut sesuai kebutuhan. Selamat mencoba, semoga sukses.

Membuat Efek Text Berkedip dengan CSS3

Blinking Background dan Text

Blinking Background dan Text

Pada artikel sebelumnya saya pernah memberikan cara membuat blinking text dengan javascript. Kali ini saya memberikan cara lain dengan menggunakan kemampuan animasi pada CSS3.

Ada 2 efek berkedip yang akan dibuat disini, yang pertama adalah warna background merah yang berkedip dan yang kedua adalah text putih yang berkedip.

Untuk itu coding HTML dan CSS-nya adalah sebagai berikut.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;/title&gt;
&lt;style&gt;
@keyframes bg-blink {  
    0% { background-color:#ff0000; }
    100% { background-color:#ffffff; }
}
@-webkit-keyframes bg-blink {
    0% { background-color:#ff0000; }
    100% { background-color:#ffffff; }
}
.bg-blink {
    -webkit-animation: bg-blink 1s linear infinite;
    -moz-animation: bg-blink 1s linear infinite;
    animation: bg-blink 1s linear infinite;
} 
.blink {
  animation: blink 1s steps(5, start) infinite;
  -webkit-animation: blink 1s steps(5, start) infinite;
  color:#ffffff;
}
@keyframes blink {
  to { visibility: hidden; }
}
@-webkit-keyframes blink {
  to { visibility: hidden; }
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;div class=&quot;bg-blink&quot;&gt; Blinking Background &lt;/div&gt;
 &lt;br/&gt;
 &lt;div style=&quot;background-color:#ff0000;&quot;&gt;
 &lt;span class=&quot;blink&quot;&gt; Blinking Text &lt;/span&gt; 
 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba. Semoga sukses.

Bar Chart dengan CSS3

CSS3 Chart dengan Animasi

CSS3 Chart dengan Animasi

CSS3 memungkinkan kita membuat chart dengan animasi di mana bar chart tersebut dapat bergerak dari 0% sampai panjang nilai barnya, misalnya 58%.

CSS3 juga memungkinkan kita memberikan warna gradasi tanpa menggunakan file gambar, sehingga lebih efektif dan efisien.

Begitu juga properti border-radius yang membuat tiap sudut kanan dari bar tersebut dapat melengkung (rounded corder).

Untuk membuat chat tersebut, pertama Anda buat coding HTML sebagai berikut.

&lt;body&gt;
&lt;h2&gt;Web Browser Statistic Jan 2014&lt;/h2&gt;
&lt;div class=&quot;record&quot;&gt;
	&lt;span class=&quot;bar_value&quot;&gt;58%&lt;/span&gt;
	&lt;div style=&quot;width:58%&quot;&gt;
		&lt;div class=&quot;anim&quot;&gt;
			&lt;span class=&quot;bar_name&quot;&gt;Chrome&lt;/span&gt;		
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;record&quot;&gt;
	&lt;span class=&quot;bar_value&quot;&gt;27%&lt;/span&gt;
	&lt;div style=&quot;width:27%&quot;&gt;
		&lt;div class=&quot;anim&quot;&gt;
			&lt;span class=&quot;bar_name&quot;&gt;Firefox&lt;/span&gt;		
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;record&quot;&gt;
	&lt;span class=&quot;bar_value&quot;&gt;9%&lt;/span&gt;
	&lt;div style=&quot;width:9%&quot;&gt;
		&lt;div class=&quot;anim&quot;&gt;
			&lt;span class=&quot;bar_name&quot;&gt;IE&lt;/span&gt;		
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;record&quot;&gt;
	&lt;span class=&quot;bar_value&quot;&gt;4%&lt;/span&gt;
	&lt;div style=&quot;width:4%&quot;&gt;
		&lt;div class=&quot;anim&quot;&gt;
			&lt;span class=&quot;bar_name&quot;&gt;Safari&lt;/span&gt;		
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;record&quot;&gt;
	&lt;span class=&quot;bar_value&quot;&gt;2%&lt;/span&gt;
	&lt;div style=&quot;width:2%&quot;&gt;
		&lt;div class=&quot;anim&quot;&gt;
			&lt;span class=&quot;bar_name&quot;&gt;Opera&lt;/span&gt;		
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;

Kemudian Anda tambahkan coding CSS sebagai berikut.

div.record{font: bold 12px Arial;
 float: left; width: 100%;
 border: 1px solid #ccc;
 background-color: #e0e0e0;
 margin-bottom: 2px;
 }
div.anim { width:100%; height:30px;
border-radius: 0px 5px 5px 0px;
position:relative;
background: linear-gradient(to top, #ff9999 0%,#E03D3D 24%,#ff0000 50%,#E03D3D 79%,#ff9999 100%);
animation:myfirst 1s linear 0.1s ;
}
@keyframes myfirst
{from {width:0px;} to {width:100%;}}
span.bar_name
{ color: #ffffff; float: left;
 margin: 7px 0 0 5px;
}
span.bar_value
{ color: #6D8591; float: right;
margin: 7px 0 0 5px;
}

Selamat mencoba. Semoga sukses.

Membuat Tabel Body Scroll dengan CSS

Table Body Scroll

Table Body Scroll

Membuat Table dengan HTML itu sangat mudah. Anda dapat membuatnya dengan tag <table>, <thead>, <tbody>, <tr>, <th> dan <td> seperti pada coding HTML dibawah ini.

&lt;html&gt;
&lt;body&gt;
&lt;table class=&quot;scroll&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Header 1&lt;/th&gt;&lt;th&gt;Header 2&lt;/th&gt;&lt;th&gt;Header 3&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2 Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2 Content 2 Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2 Content 2 Content 2 Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2 Content 2 Content 2 Content 2 Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Content 1&lt;/td&gt;&lt;td&gt;Content 2&lt;/td&gt;&lt;td&gt;Content 3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;

Untuk membuat tampilan table tersebut lebih menarik, kita gunakan CSS.
Dengan CSS kita juga bisa membuat body table tersebut memiliki vertical scroll bar seperti pada gambar diatas.

Body table dapat kita scroll dengan setting CSS property height dan property display:block.

Berikut ini coding CSS selengkapnya.

&lt;style type=&quot;text/css&quot;&gt;
table.scroll {width:700px;border:1px #a9c6c9 solid;font:12px verdana,arial,sans-serif;color:#333333;}
table.scroll thead {display:table;width:100%;}
table.scroll tbody {display:block;height:300px;overflow:auto;float:left;width:100%;}
table.scroll tbody tr {display:table;width:100%;}
table.scroll th, td {width:33%;padding:8px;}
table.scroll th {background-color:#000099;color:#ffffff;}
table.scroll tr:hover td {background:#a0a0a0;color:#ffffff;}
table.scroll tr:nth-child(odd) {background-color:#c0c0c0;}
table.scroll tr:nth-child(even) {background-color:#f0f0f0;}
&lt;/style&gt;

Pada coding CSS tersebut juga disertakan table hover dan table strip (zebra color).

Selamat mencoba. semoga berhasil.

Menu Tabs Dengan CSS

CSS Tabs Menu

CSS Tabs Menu

Banyak cara untuk membuat menu Tabs seperti gambar di atas baik dengan JavaScript / JQuery maupun CSS.
Di sini saya akan berikan cara membuat Tabs Menu hanya dengan CSS. Menu Tabs ini berjalan di semua browser termasuk MS-IE.

Pada coding CSS terdapat operator > (child combinatory Selector) yang digunakan untuk memilih hanya direct childrennya.
Misal:
.tabs > div {display:inline;}
berarti selector div yang berada langsung di bawah elemen dengan class tabs akan ditampilkan secara inline (seperti tag <span>).
Berikut ini coding selengkapnya.



Menu Tabs Dengan CSS&lt;/pre&gt;
&lt;style&gt;&lt;!--
.tabs {min-height:300px;position:relative;width:100%;}
.tabs &gt; div {display:inline;}
.tabs &gt; div &gt; a {margin-left:-1px;position:relative;left:1px;text-decoration:none;color:#000000;background:#c0c0c0;display:block;float:left;padding:10px 10px;border:1px solid #ccc;border-bottom: 1px solid #ffffff; }
.tabs &gt; div:not(:target) &gt; a { border-bottom: 0; background: linear-gradient(#ffffff, #c0c0c0); }
.tabs &gt; div:target &gt; a { background:#ffffff; }
.tabs &gt; div &gt; div { background:#ffffff; z-index:-2; left: 0; top:39px; bottom:0; right:0; padding:20px; border:1px solid #ccc; }
.tabs &gt; div:not(:target) &gt; div { position: absolute }
.tabs &gt; div:target &gt; div { position: absolute; z-index: -1; }
--&gt;&lt;/style&gt;
&lt;pre&gt;

&lt;/pre&gt;
&lt;h1&gt;Membuat Menu Tabs dengan CSS&lt;/h1&gt;
&lt;div class=&quot;tabs&quot;&gt;
&lt;div id=&quot;tab1&quot;&gt;&lt;a href=&quot;#tab1&quot;&gt;Tab Pertama&lt;/a&gt;
&lt;div&gt;... Di Sini Konten Dari Tab Pertama ...&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;tab2&quot;&gt;&lt;a href=&quot;#tab2&quot;&gt;Tab Ke-Dua&lt;/a&gt;
&lt;div&gt;... Di Sini Konten Dari Tab Ke-Dua ...&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;tab3&quot;&gt;&lt;a href=&quot;#tab3&quot;&gt;Tab Ke-Tiga&lt;/a&gt;
&lt;div&gt;... Di Sini Konten Dari Tab Ke-Tiga ...&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;

Anda dapat mengembangkan coding ini sesuai kebutuhan Anda.
Selamat mencoba. semoga berhasil.

Membuat Footer Tetap di Bawah

Footer tetap di bawah

Footer tetap di bawah

Kadang kala kita ingin membuat halaman web dimana footer selalu tampil di paling bawah walaupun isi halaman web kurang dari 1 halaman atau juga isinya lebih dari 1 halaman sehingga muncul scrollbar.

Untuk membuat footer tetap berada di bawah, kita bisa buat dengan coding HTML dan CSS sebagai berikut:

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Membuat footer tetap di bawah&lt;/title&gt;
&lt;style&gt;
html,body{margin:0;padding:0;height:100%;font:13px Arial;}
#wrapper{min-height:100%;position:relative;}
#header{background:#f0f0f0;padding:5px;height:50px;color:#0000ff;}
#body{padding-bottom:40px;padding-left:10px;}
#footer{background:#f0f0f0;position:absolute;bottom:0;width:100%;
   text-align:center;color:#808080;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;wrapper&quot;&gt;
   &lt;div id=&quot;header&quot;&gt;&lt;h1&gt;Membuat footer tetap di bawah&lt;/h1&gt;&lt;/div&gt;
   &lt;div id=&quot;body&quot;&gt;
	&lt;p&gt;Content&lt;/p&gt;&lt;p&gt;Content&lt;/p&gt;&lt;p&gt;Content&lt;/p&gt;&lt;p&gt;Content&lt;/p&gt;&lt;p&gt;Content&lt;/p&gt;
   &lt;/div&gt;
   &lt;div id=&quot;footer&quot;&gt;&lt;p&gt;Copyright &amp;copy; 2014 - All Rights Reserved&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Anda bisa kembangkan coding tersebut untuk membuat layout web 2 kolom dan seterusnya.
Selamat mencoba, semoga berhasil.

Validasi Form dengan JQuery

Validasi Form dengan JQuery

Validasi Form dengan JQuery

Pada posting sebelumnya saya telah memberikan cara melakukan validasi form dengan javascript. Kali ini saya akan memberikan cara validasi form dengan JQuery seperti pada tampilan di atas.

Pertama download file script JQuery di di website JQuery: http://jquery.com/download/. Dan file plugin JQuery Validation di http://jqueryvalidation.org/

Kemudian copy HTML coding berikut ini dalam file validasi.html.

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;JQuery Form Validation&lt;/title&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;val.css&quot; type=&quot;text/css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.validate.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function() {
$(&quot;#form1&quot;).validate({
	rules:{	nama:&quot;required&quot;,
			umur:{required:true,number: true},		
			username:&quot;required&quot;,
			password:{required: true,minlength:5},		
		    cpassword:{required: true,equalTo: &quot;#password&quot;},
			email:{required:true,email:true},
			website:{required:true,url:true}
		  },
	messages:{ 
		    nama:{required:'Nama harus di isi'},
			umur:{
			    required:'Umur harus di isi',
			    number  :'Hanya boleh di isi Angka'},
			username: {
			    required:'Username harus di isi'},
		    password: {
			    required :'Password harus di isi',
			    minlength:'Password minimal 5 karakter'},
		    cpassword: {
			    required:'Ulangi Password harus di isi',
			    equalTo :'Isinya harus sama dengan Password'},
		    email: {
			    required:'Email harus di isi',
			    email   :'Email harus valid'},
		    website: {
			    required:'Website harus di isi',
			    url     :'Alamat website harus valid'}
			},
     success: function(label) {
        label.text('OK!').addClass('valid');}
	});
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;form-div&quot;&gt;
&lt;form id=&quot;form1&quot; method=&quot;post&quot; action=&quot;&quot;&gt;
	&lt;div class=&quot;form-row&quot;&gt;
    &lt;span class=&quot;label&quot;&gt;Nama *&lt;/span&gt;
    &lt;input name=&quot;nama&quot; type=&quot;text&quot;&gt;
  	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;Umur *&lt;/span&gt;
	&lt;input name=&quot;umur&quot; id=&quot;umur&quot; type=&quot;text&quot;&gt;
	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;Username *&lt;/span&gt;
	&lt;input name=&quot;username&quot; id=&quot;username&quot; type=&quot;text&quot;&gt;
	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;Password *&lt;/span&gt;
	&lt;input name=&quot;password&quot; id=&quot;password&quot; type=&quot;password&quot;&gt;
	&lt;/div&gt; 		
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;Ulangi Password *&lt;/span&gt;
	&lt;input name=&quot;cpassword&quot; id=&quot;cpassword&quot; type=&quot;password&quot;&gt;
	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;E-Mail *&lt;/span&gt;
	&lt;input name=&quot;email&quot; id=&quot;email&quot; type=&quot;text&quot;&gt;
	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;span class=&quot;label&quot;&gt;Website *&lt;/span&gt;
	&lt;input name=&quot;website&quot; id=&quot;website&quot; type=&quot;text&quot;&gt;
	&lt;/div&gt;
	&lt;div class=&quot;form-row&quot;&gt;
	&lt;input class=&quot;submit&quot; value=&quot;Proses&quot; type=&quot;submit&quot;&gt;
	&lt;/div&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Berikut Coding CSS-nya (val.css)

.form-div {
font-family:Arial, Helvetica, sans-serif;
font-size:11px;
border:1px #ccc solid;
padding:10px;
width:500px;
height:220px;
background-color:#def;
}
.form-div .submit {
margin-left:105px;
margin-top:10px;
}
.form-div .label {
display:block;
float:left;
width:100px;
text-align:right;
margin-right:5px;
}
.form-div input {
width: 180px;
float: left;
font-family:Arial, Helvetica, sans-serif;
font-size:11px;
}
.form-div .form-row {
padding:5px 0;
clear:both;
width:700px;
}
.form-div label.error {
margin-left:10px;
width:250px;
display:block;
float:left;
color:red;
padding-left:20px;
background: url(unvalid.gif) no-repeat;
}
.form-div label.valid {
width:0px;
display: inline-block;
text-indent:0px;
color:#0000ff;
background: url(valid.gif) center no-repeat;
}

Untuk file icon valid.gif dan unvalid.gif bisa anda cari di google… 🙂
Selamat mencoba.

Cara Akses Database MySQL dengan PHP

Pada tulisan saya sebelumnya saya telah memberikan cara membuat database web dengan mysql. Jadi saya asumsikan Anda sudah memiliki database “login_student” dan “table_login_student”. Kali ini saya akan berikan coding PHP untuk mengakses database MySQL tersebut.

1. Membuat Koneksi PHP ke MySQL
Ketiklah coding PHP di bawah ini dengan notepad (atau notepad++) lalu simpan dengan nama file “config.php”

&lt;?php
$dbhost = &quot;localhost&quot;;
$dbuser = &quot;root&quot;;
$dbpass = &quot;&quot;;
$dbname = &quot;login_student&quot;;
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname) 
        or die ('Error connecting to mysql');
?&gt;

2. Membuat Form Insert Data
Ketiklah coding PHP di bawah ini dengan notepad (atau notepad++) lalu simpan dengan nama file “insert.php”

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Tambah Data&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
if(isset($_POST['save']))
{  include 'config.php';
   extract($_REQUEST);
   $query=mysqli_query($conn,&quot;insert into tabel_login_student
          SET username='$username', password='$password', level='$level',
          fullname='$fullname', email='$email', Telp='$Telp'&quot;)
          or die(mysqli_error($conn));
   if($query)
   {  echo &quot;Data telah tersimpan.&quot;;
   }
}
?&gt;
&lt;form action='#' method='post' border='0'&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Username&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='username' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Password&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='password' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Level&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='level' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fullname&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='fullname' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Email&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='email' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Telp&lt;/td&gt;&lt;td&gt;&lt;input type='text' name='Telp' /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type='submit' value='Save' name=&quot;save&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

3. Menampilkan Data
Ketiklah coding PHP di bawah ini dengan notepad (atau notepad++) lalu simpan dengan nama file “show_data.php”

&lt;?php
   include 'config.php';
   $sql=&quot;select * from tabel_login_student&quot;;
   $rs=mysqli_query($conn,$sql) or die($sql.&quot;&gt;&gt;&quot;.mysqli_error($conn));
   $num=mysqli_num_rows($rs);
   if($num&gt;0){ //check if more than 0 record found
?&gt;
&lt;table border='1'&gt;
&lt;tr&gt;
  &lt;th&gt;Username&lt;/th&gt;&lt;th&gt;Password&lt;/th&gt;&lt;th&gt;Level&lt;/th&gt;&lt;th&gt;Fullname&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;th&gt;Telp&lt;/th&gt;
&lt;/tr&gt;
&lt;?php
  while($row=mysqli_fetch_array($rs))
  {  extract($row);
?&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;?php echo $username; ?&gt;&lt;/td&gt;
  &lt;td&gt;&lt;?php echo $password; ?&gt;&lt;/td&gt;
  &lt;td&gt;&lt;?php echo $level; ?&gt;&lt;/td&gt; 
  &lt;td&gt;&lt;?php echo $fullname; ?&gt;&lt;/td&gt;
  &lt;td&gt;&lt;?php echo $email; ?&gt;&lt;/td&gt;
  &lt;td&gt;&lt;?php echo $Telp; ?&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;?php
}
?&gt;
&lt;/table&gt;
&lt;?php
} else { echo &quot;Data tidak tersedia.&quot;; }
?&gt;

Selanjutnya kita bisa kembangkan coding tersebut dengan membuat aplikasi CRUD (Create, Read, Update, Delete) yang banyak digunakan di aplikasi web.
Selamat mencoba dan semoga sukses.

Alert Box Auto Close

Alert Box Auto Closed

Alert Box Auto Closed

Umumnya kita membuat alert box dengan menggunakan fungsi javascript alert(). Fungsi alert() ini akan menampilkan dialog box dari browser.

Nah, disini saya akan berikan coding untuk membuat dialog box dengan JavaScript dan CSS tapi tanpa fungsi alert().
Alert Dialog Box akan auto close dalam waktu 3 detik. Disini juga terdapat fungsi countdown() untuk menampilkan hitungan mundur 3 sampai 0.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Alert Box&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
body {height:100%;margin:0;padding:0;}
#overlay {
    visibility: hidden;
    position: absolute;
    left: 0px;
    top: 0px;
    width:100%;
    height:100%;
    text-align:center;
    z-index: 10;
    background-color:rgba(0,0,0,0.5);
}
#overlay div {
    width:300px;
    margin: 100px auto;
    background-color: yellow;
    border:3px solid #a0a0a0;
    border-radius:10px;
    box-shadow:3px 3px 5px 6px #606060;
    padding:15px;
    text-align:left;
}
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function overlay() {
el = document.getElementById(&quot;overlay&quot;);
el.style.visibility = &quot;visible&quot;
myVar=setInterval(function(){el.style.visibility = &quot;hidden&quot;; clearTimeout(myVar);},3000);
countdown();
}
function countdown()
{ var i=&quot;2&quot;; 	
  myVar1=setInterval(
  function()
  {  document.getElementById(&quot;counter&quot;).innerHTML=i; 
     if (i==0) {	clearTimeout(myVar1);}
     i--;
  },1000);
}
	
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Alert Box Auto Close dengan CSS &amp; Javascript&lt;/h1&gt;
&lt;h2&gt;The alert box will be closed in &lt;span id=&quot;counter&quot;&gt;3&lt;/span&gt; second.&lt;/h2&gt;
&lt;div id=&quot;overlay&quot;&gt;
    &lt;div&gt;
        &lt;img src=&quot;alert_icon.png&quot; style=&quot;width:30px;height:30px;vertical-align:middle&quot;&gt; 
	&lt;b&gt;Alert!&lt;/b&gt;
	&lt;hr/&gt;
	&lt;p&gt;This message will hide in 3 second.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;input type=&quot;button&quot; onclick=&quot;overlay()&quot; value=&quot;Click here to open dialog box&quot; /&gt;
&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba, semoga berhasil.

Membuat Database Web dengan MySQL

MySQL merupakan database yang umum digunakan dalam sebuah website atau aplikasi web. MySQL adalah RDMBS yang bersifat open source, free untuk Anda gunakan dan dapat juga berjalan di Windows maupun Linux.

Untuk menggunakan database MySQL Anda dapat mendownloadnya di website resminya www.mysql.com atau Anda dapat mendownload paket MySQL dalam XAMPP di www.apachefriends.org/en/xampp.html. Untuk belajar menggunakan databse MySQL saya rekomendasikan Anda mendownload XAMPP Portable Lite dalam bentuk 7zip yang lebih kecil sehingga nanti Anda dapat langsung menjalankannya tanpa perlu menginstall.

Setelah Anda donwload paket XAMPP Portable Lite, jalankan file xampp-control.exe untuk membuka XAMPP Control Panel lalu click tombol Start Apache dan MySQL untuk menjalankan service Web Server Apache dan Database Server MySQL.

XAMPP Control Panel

XAMPP Control Panel

Setelah itu buka Web browser Anda lalu ketik alamat: http://localhost/phpmyadmin/
maka akan terbuka PHPMyAdmin,  yakni tools yang sudah dipaket dalam XAMPP dan biasa digunakan untuk mengakses database MySQL.

Dengan PHPMyAdmin kita bisa membuat/create, melihat/read, mengubah/update, dan menghapus/delete, CRUD, database MySQL dengan mudah.

Nah… kita akan coba membuat sebuah database bernama “login_student” dengan struktur data sebagai berikut:

Struktur Data Tabel Login

Struktur Data Tabel Login

Berikut langkah-langkah untuk membuat database “login_student” di MySQL:

1. Pada halaman home PHPMyAdmin, click tab Databases lalu masukan nama database login_student lalu click tombol Create maka akan terbentuk database login_student.

Create DB MySQL

Create DB MySQL

2. Buka database login_student dengan meng-click daftar database di sebelah kiri lalu buatlah tabel “tabel_login_student” dengan jumlah kolom 11 seperti pada struktur data di atas.

Create Tabel Login Student

Create Tabel Login Student

3. Isilah nama kolom dan tipe datanya. Jika null di centang artinya kolom ini boleh kosong/tidak ada data, jika tidak dicentang atau not null artinya kolom ini harus ada data, jika tidak maka akan error pada saat insert record. Kolom id diberikan centang pada A_I (auto increament) artinya kolom id akan secara otomatis berisi angka berurutan pada saat insert record, tanpa perlu insert data id. Kolom id akan menjadi primary key dimana datanya unik atau tidak ada id yang sama.

Update Table MySQL

Update Table MySQL

Itulah cara singkat membuat database web dengan MySQL. Pemakaian database MySQL dalam web akan dibahas pada tuliasan berikutnya.

Selamat mencoba, semoga sukses.

Validasi Radio Button dan Checkbox dengan Javascript

Validasi Radio Button dan Checkbox

Validasi Radio Button dan Checkbox

Pada artikel sebelumnya saya telah berikan cara validasi textbox dan tanggal. Kali ini saya akan berikan contoh cara validasi data pada radio button dan checkbox.

Seperti kita tahu bahwa radio botton adalah field yang di-input oleh user dengan cara memilih satu dari beberapa pilihan, misalnya data gender pilihannya laki-laki atau perempuan.
Sedangkan checkbox mirip dengan radio button tapi user bias memilih lebih dari satu pilihan.

Bagaimana cara mengambil data dari field radio button dan checkbox dan bagaimana pula cara validasi supaya field itu harus diisi oleh user? Berikut coding HTML dan Javascriptnya.

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Javascript - Mengambil nilai dari Checkbox dan Radio Button&lt;/title&gt;
&lt;script&gt;
function displayResult(browser)
{ document.getElementById(&quot;result&quot;).value=browser; }
function displayAlert()
{	var x=document.getElementById(&quot;result&quot;).value;
	if (x==&quot;&quot;)
	{	alert(&quot;Please select your favorite browser!&quot;);
		form.browser[0].focus();
		return false;
	}
	else
		alert(x + &quot; is your favorite browser&quot;);
}
function displayResult2(frm)
{	var selectedbrowser=&quot;&quot;;
	for (i = 0; i &lt; frm.browser2.length; i++)
    {  	if (frm.browser2[i].checked)
		{	selectedbrowser += frm.browser2[i].value +&quot;, &quot;;}
	}
	document.getElementById(&quot;result2&quot;).value=selectedbrowser;
}
function displayAlert2(frm)
{	var selectedbrowser=&quot;&quot;;
	for (i = 0; i &lt; frm.browser2.length; i++)
    {  	if (frm.browser2[i].checked)
		{	selectedbrowser += frm.browser2[i].value +&quot;, &quot;;}
	}
	if (selectedbrowser==&quot;&quot;)
	{	alert(&quot;Please select your favorite browser!&quot;);
		form.browser2[0].focus();
		return false;
	}
	else
	alert(&quot;Your favorite browser : &quot; + selectedbrowser);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;Select your favorite browser:&lt;/p&gt;
&lt;form&gt;
&lt;input type=&quot;radio&quot; name=&quot;browser&quot; onclick=&quot;displayResult(this.value)&quot; value=&quot;Internet Explorer&quot;&gt;Internet Explorer&lt;br&gt;
&lt;input type=&quot;radio&quot; name=&quot;browser&quot; onclick=&quot;displayResult(this.value)&quot; value=&quot;Firefox&quot;&gt;Firefox&lt;br&gt;
&lt;input type=&quot;radio&quot; name=&quot;browser&quot; onclick=&quot;displayResult(this.value)&quot; value=&quot;Opera&quot;&gt;Opera&lt;br&gt;
&lt;input type=&quot;radio&quot; name=&quot;browser&quot; onclick=&quot;displayResult(this.value)&quot; value=&quot;Google Chrome&quot;&gt;Google Chrome&lt;br&gt;
&lt;input type=&quot;radio&quot; name=&quot;browser&quot; onclick=&quot;displayResult(this.value)&quot; value=&quot;Safari&quot;&gt;Safari&lt;br&gt;&lt;br&gt;
Your favorite browser is: &lt;input type=&quot;text&quot; id=&quot;result&quot;&gt;&lt;br&gt;
&lt;button type=&quot;button&quot; onclick=&quot;displayAlert()&quot;&gt;Display value of radio button in alert&lt;/button&gt;
&lt;br&gt;&lt;hr&gt;
&lt;p&gt;Select your favorite browser:&lt;/p&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;browser2&quot; onclick=&quot;displayResult2(this.form)&quot; value=&quot;Internet Explorer&quot;&gt;Internet Explorer&lt;br&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;browser2&quot; onclick=&quot;displayResult2(this.form)&quot; value=&quot;Firefox&quot;&gt;Firefox&lt;br&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;browser2&quot; onclick=&quot;displayResult2(this.form)&quot; value=&quot;Opera&quot;&gt;Opera&lt;br&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;browser2&quot; onclick=&quot;displayResult2(this.form)&quot; value=&quot;Google Chrome&quot;&gt;Google Chrome&lt;br&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;browser2&quot; onclick=&quot;displayResult2(this.form)&quot; value=&quot;Safari&quot;&gt;Safari&lt;br&gt;&lt;br&gt;
Your favorite browser: &lt;input type=&quot;text&quot; id=&quot;result2&quot; size=&quot;60&quot;&gt;&lt;br&gt;
&lt;button type=&quot;button&quot; onclick=&quot;displayAlert2(this.form)&quot;&gt;Display value of radio button in alert&lt;/button&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba.

Fungsi Javascript untuk membuat huruf besar tiap kata

Ada kalanya kita membutuhkan fungsi dalam javascript untuk menampilkan huruf besar di setiap kata. Berikut ini fungsi javascript dan cara pemakaiannya:

&lt;script type=&quot;text/javascript&quot;&gt;

var matakuliah=&quot;Web based ProGramming&quot;;
document.write(Capitalize(matakuliah));

function Capitalize(str)
{  return str.replace (/\w\S*/g, 
      function(txt)
      {  return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); } );
}
&lt;/script&gt;

String yang ingin di ubah menjadi huruf besar di setiap katanya adalah:
“Web based ProGramming”
Dengan fungsi Capitalize tersebut maka string menjadi:
“Web Based Programming”

Hal ini dapat terjadi karena penggunaan fungsi string replace.
Parameter /\w\S*/g adalah regular expression (diawali dengan garis miring /).
Regular expression \w berarti semua alphanumeric.
Regular expression \S berarti ambil 1 kata (1 string)
dan karakter g berarti global (semua string)
Jadi parameter /\w\S*/g mengandung arti semua kata dalam string dimana untuk setiap katanya diganti (replace) dengan huruf pertama adalah huruf besar dan sisanya huruf kecil.

Silakan mencoba.

Membuat Menu Vertikal Dengan CSS

Vertical-Menu

Vertical-Menu

Pada posting saya sebelumnya telah di berikan contoh cara membuat menu horizontal dengan CSS. Di sini akan saya berikan cara membuat menu vertical dengan CSS yang cukup mudah dan singkat.

Pertama siapkan strutur menu HTML-nya dengan tag list (ul dan li). Menu bisa hover untuk menampilkan submenu seperti pada gambar di atas.
Berikut ini contoh coding HTML-nya:

&lt;body&gt;
&lt;div id=&quot;leftmenu&quot;&gt;
	&lt;p&gt;Menu Navigator&lt;/p&gt;
	&lt;ul&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Category&lt;/a&gt;
		&lt;ul&gt;
		  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;HTML&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;CSS&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;JavaScript&lt;/a&gt;&lt;/li&gt;
		  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;PHP&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	  &lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Forum Discussion&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;About&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Contact&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;
&lt;/body&gt;

Kemudian untuk presentasinya kita buat CSS dengan coding sebagai berikut:

&lt;style&gt;
#leftmenu {width:130px;font:bold 12px arial,verdana,sans-serif;}
#leftmenu li a {text-decoration:none;border-top:1px solid #ffffff;
color:#000000;display:block;background-color:#e0e0e0;padding:10px;}
#leftmenu li a:hover {background-color:#f0f0f0;}
#leftmenu ul {list-style:none;padding:0px;}
#leftmenu ul ul{position:absolute;top:75px;left:135px;visibility:hidden;} 
#leftmenu ul li:hover ul{visibility:visible;}
&lt;/style&gt;

Silahkan di modifikasi sesuai selera Anda. Selamat mencoba.

Watermark Login Page Dengan JQuery

Watermark Login Page

Watermark Login Page

Pernah login di windows 7? Pada field passwordnya terdapat tulisan watermark “Password” yang jika kita ketik pada field tersebut maka tulisan watermark “Password” akan hilang (hide) lalu jika kita hapus ketikan kita maka tulisan watermark “Password” akan muncul lagi (show).

Untuk membuat login page seperti itu kita bisa lakukan dengan method hide/show di JQuery. Sebenarnya di HTML 5 fitur watermark bisa dilakukan dengan attribute “placeholder” pada input tag, tapi itu hanya bekerja dengan baik di IE 10+ saja. Dengan JQuery maka operasi watermark login seperti windows 7 bisa bekerja di semua web browser populer (IE, Firefox, Chrome, Safari, Opera).

Berikut ini coding HTML-nya.

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Log In&lt;/title&gt;
&lt;link href=&quot;login-style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function() {
	$('#password1').show();
	$('#password2').hide();
	$('#password1').focus(function() {
		$('#password1').hide();
		$('#password2').show();
		$('#password2').focus();
	});
	$('#password2').blur(function() {
		if($('#password2').val() == '') {
			$('#password1').show();
			$('#password2').hide();
		}
	});
	$('.username').each(function() {
		var default_value = this.value;
		$(this).css('color', '#a0a0a0');
		$(this).focus(function() {
			if(this.value == default_value) {
				this.value = '';
				$(this).css('color', '#000000');
			}
		});
		$(this).blur(function() {
			if(this.value == '') {
				$(this).css('color', '#a0a0a0');
				this.value = default_value;
			}
		});
	});
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;container&quot;&gt;
    &lt;div id=&quot;top&quot;&gt;
    &lt;h1&gt;Login to Application System&lt;/h1&gt;
    &lt;/div&gt; 
    &lt;div id=&quot;loginbox&quot;&gt;
	&lt;fieldset&gt;
		&lt;legend&gt;Please Log In&lt;/legend&gt;
		&lt;form name=&quot;login_form&quot; class=&quot;form&quot;&gt;
		&lt;label for=&quot;username&quot;&gt;User Name&lt;/label&gt;
		&lt;div class=&quot;div_texbox&quot;&gt;
		&lt;input name=&quot;username&quot; type=&quot;text&quot; class=&quot;username&quot; id=&quot;username&quot; value=&quot;Username&quot; /&gt;
		&lt;/div&gt;
		&lt;label for=&quot;password&quot;&gt;Password&lt;/label&gt;
		&lt;div class=&quot;div_texbox&quot;&gt;
		&lt;input class=&quot;password&quot; id=&quot;password1&quot; type=&quot;text&quot; value=&quot;Password&quot; autocomplete=&quot;off&quot;/&gt;
		&lt;input class=&quot;password&quot; id=&quot;password2&quot; type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot; autocomplete=&quot;off&quot; /&gt;
		&lt;/div&gt;
		&lt;div class=&quot;button_div&quot;&gt;
		&lt;input name=&quot;Submit&quot; type=&quot;button&quot; value=&quot;Submit&quot; class=&quot;buttons&quot; /&gt;
		&lt;/div&gt;
		&lt;/form&gt;
		&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
	&lt;/fieldset&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Berikut coding / script CSS untuk login page tersebut.

/* login-style.css */
@charset &quot;utf-8&quot;;
body {
	margin:0;padding:0;
	background-color:#ffffff;
	font-family:Arial, Helvetica, sans-serif;
}
fieldset {
	width:460px;
	border:2px dashed #CCC;
	padding:10px;
	margin-top:20px;
	margin-bottom:20px;
}
legend {
	font-size:90%;
	font-weight:normal;
	line-height:1.1;
	color:#fff;
	background: #666;
	border: 1px solid #333;
	padding: 2px 6px;
}
h1 {
	font-size: 175%;
	letter-spacing: -1px;
	font-weight: normal;
	line-height: 1.1;
	color:#808080;
}
label {
	width:140px;
	height:32px;
	margin-top:3px;
	margin-right:2px;
	padding-top:11px;
	padding-left:6px;
	background-color:#CCCCCC;
	float:left;
	display: block;
	font-size: 115%;
	letter-spacing: -1px;
	font-weight: normal;
	line-height: 1.1;
	color:#666;
}
#container {
	width:550px;
	margin:auto;
	padding:10px;
}
#top {
	height:50px;
}
#loginbox {
	width:530px;
	padding-top:30px;
	float:left;
}
.clear {	clear:both;}
.div_texbox {
	width:300px;
	float:left;
	background-color:#E6E6E6;
	height:35px;
	margin-top:3px;
	padding-top:5px;
	padding-bottom:3px;
	padding-left:5px;
}
.textbox {
	background-image: url(images/user.png);
	background-color:#FFFFFF;
	background-repeat: no-repeat;
	background-position:left;
	width:250px;
	font:normal 18px Arial;
	color: #999999;
	padding:3px 5px 3px 19px;
}
.textbox:focus, .textbox:hover {	background-color:#F0FFE6;}
.username {
    	background-image: url(images/user.png);
    	background-repeat: no-repeat;
    	background-position:left;
    	background-color:#FFFFFF;
		width:265px;
    	font:normal 18px Arial;
    	color: #999999;
    	padding:3px 5px 3px 19px;
}
.username:focus, .username:hover {background-color:#F0FFE6;}
.password {
    	background-image: url(images/pass.png);
    	background-repeat: no-repeat;
   		background-position:left;
   		background-color:#FFFFFF;
		width:265px;
    	font:normal 18px Arial;
    	color: #999999;
    	padding:3px 5px 3px 19px;
}
.password:focus, .password:hover{background-color:#F0FFE6;}
#password-clear{display:none;color:#a0a0a0;}
.button_div {
	width:388px;
	float:left;
	background-color:#fff;
	border:1px solid #ccc;
	text-align:center;
	height:35px;
	margin-top:3px;
	padding:5px 32px 3px;
}
.buttons {
	background: #e3e3db;
	font-size:12px; 
	color: #989070; 
	padding: 6px 14px;
	border-width: 2px;
	border-style: solid;
	border-color: #fff #d8d8d0 #d8d8d0 #fff;
	text-decoration: none;
	text-transform:uppercase;
	font-weight:bold;
}

Untuk script JQuery bisa download di website JQuery: http://jquery.com/download/

Disana ada 2 gambar icon yakni, user.png dan pass.png, masing masing bisa anda buat dengan screen capture gambar di atas.

Selamat mencoba.

Membuat ToolTips Dengan CSS

CSS ToolTips

CSS ToolTips

ToolTip adalah informasi yang tampil ketika Anda berada di atas (hover) sebuah text atau gambar di halaman web.
Misalnya ketika mouse Anda arahkan pada text “Information” pada gambar di atas maka akan muncul kotak informasi yang isinya bisa Anda tentukan sendiri.

Pada HTML Anda dapat membuat ToolTip dengan menggunakan atribut “title”, seperti:

&lt;p&gt;&lt;abbr title=&quot;Cascading Style Sheet&quot;&gt;CSS&lt;/abbr&gt; mengendalikan tampilan halaman web.&lt;/p&gt;

Untuk membuat tooltip terlihat lebih menarik, Anda bisa menggunakan CSS pada elemen div HTML.

Berikut ini coding HTML dan CSSnya:

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;title&gt;ToolTips Example&lt;/title&gt;
		&lt;style type=&quot;text/css&quot;&gt;
		.tooltip {
			border-bottom: 1px dotted #000000; color: #000000; outline: none;
			cursor: help; text-decoration: none;
			position: relative;
		}
		.tooltip span {
			margin-left: -999em;
			position: absolute;
		}
		.tooltip:hover span {
			border-radius: 5px 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; 
			box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 5px 5px rgba(0, 0, 0, 0.1); -moz-box-shadow: 5px 5px rgba(0, 0, 0, 0.1);
			font-family: Calibri, Tahoma, Geneva, sans-serif;
			position: absolute; left: 1em; top: 2em; z-index: 99;
			margin-left: 0; width: 250px;
		}
		.tooltip:hover img {
			border: 0; margin: -10px 0 0 -55px;
			float: left; position: absolute;
		}
		.tooltip:hover em {
			font-family: Candara, Tahoma, Geneva, sans-serif; font-size: 1.2em; font-weight: bold;
			display: block; padding: 0.2em 0 0.6em 0;
		}
		.classic { padding: 0.8em 1em; }
		.custom { padding: 0.5em 0.8em 0.8em 2em; }
		* html a:hover { background: transparent; }
		.classic {background: #f0f0f0; border: 1px solid #e0e0e0; }
		.critical { background: #FFCCAA; border: 1px solid #FF3334;	}
		.help { background: #00ff00; border: 1px solid #2BB0D7;	}
		.info { background: #9FDAEE; border: 1px solid #2BB0D7;	}
		.warning { background: #FFFFAA; border: 1px solid #FFAD33; }
		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Membuat ToolTips dengan CSS&lt;/h1&gt;
		&lt;p&gt;	Contoh tooltips jenis &lt;a class=&quot;tooltip&quot; href=&quot;#&quot;&gt;Classic
			&lt;span class=&quot;custom classic&quot;&gt;
			&lt;em&gt;Classic&lt;/em&gt;
			Ini adalah contoh CSS tooltip jenis Classic,&lt;br/&gt; Silakah Anda coba buat sendiri!&lt;/span&gt;
			&lt;/a&gt;
		&lt;/p&gt; 
		&lt;p&gt;	Contoh tooltips jenis &lt;a class=&quot;tooltip&quot; href=&quot;#&quot;&gt;Warning
			&lt;span class=&quot;custom warning&quot;&gt;
			&lt;img src=&quot;Warning.png&quot; alt=&quot;Information&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
			&lt;em&gt;Warning&lt;/em&gt;
			Ini adalah contoh CSS tooltip jenis Warning,&lt;br/&gt; Silakah Anda coba buat sendiri!&lt;/span&gt;
			&lt;/a&gt;
		&lt;/p&gt; 
		&lt;p&gt;	Contoh tooltips jenis &lt;a class=&quot;tooltip&quot; href=&quot;#&quot;&gt;Critical
			&lt;span class=&quot;custom critical&quot;&gt;
			&lt;img src=&quot;Critical.png&quot; alt=&quot;Help&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
			&lt;em&gt;Critical&lt;/em&gt;
			Ini adalah contoh CSS tooltip jenis Critical,&lt;br/&gt; Silakah Anda coba buat sendiri!&lt;/span&gt;
			&lt;/a&gt;
		&lt;/p&gt; 
		&lt;p&gt;	Contoh tooltips jenis &lt;a class=&quot;tooltip&quot; href=&quot;#&quot;&gt;Help
			&lt;span class=&quot;custom help&quot;&gt;
			&lt;img src=&quot;Help.png&quot; alt=&quot;Help&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
			&lt;em&gt;Help&lt;/em&gt;
			Ini adalah contoh CSS tooltip jenis Help,&lt;br/&gt; Silakah Anda coba buat sendiri!&lt;/span&gt;
			&lt;/a&gt;
		&lt;/p&gt; 
		&lt;p&gt;	Contoh tooltips jenis &lt;a class=&quot;tooltip&quot; href=&quot;#&quot;&gt;Information
			&lt;span class=&quot;custom info&quot;&gt;
			&lt;img src=&quot;Info.png&quot; alt=&quot;Information&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt;
			&lt;em&gt;Information&lt;/em&gt;
			Ini adalah contoh CSS tooltip jenis Information,&lt;br/&gt; Silakah Anda coba buat sendiri!&lt;/span&gt;
			&lt;/a&gt;
		&lt;/p&gt; 
	&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba.

Nb. Gambar icon untuk tooltips Anda siapkan terlebih dahulu.

Membuat Menu Akordion Dengan CSS

Menu Accordion

Menu Accordion

Menu akordion dapat dibuat dengan javascript library jquery, namun disini kita hanya menggunakan CSS untuk membuat menu akordion yang cukup responsive.

Berikut ini coding HTML dan CSS-nya.

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Menu Akordion Dengan CSS&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
*{font-family:Helvetica,Arial,sans-serif;}
#container
{	margin:left;
	background-color:#f0f0f0;
	width:300px;
	padding:10px;
	border-radius:15px;
}
.akordion h3 + div
{	height:0;
	overflow:hidden;
	-webkit-transition:height 0.3s ease-in;
	background-color:#ffffff;
	border-radius:10px;
}
.akordion :target h3 + div 
{	height:100px;
	padding-left:10px;
}
.akordion .section.large:target h3 + div 
{	overflow: auto;}
div.section 
{	background-color:#c0c0c0;
	padding:5px;
	border:0px solid;
}
a:link {text-decoration:none;}
.akordion a:hover 
{text-decoration:underline; color:#ff0000;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Menu Akordion Dengan CSS&lt;/h1&gt;
&lt;hr&gt;
&lt;br&gt;
&lt;div id=&quot;container&quot;&gt;
	&lt;div class=&quot;akordion&quot;&gt;
	&lt;h2&gt;List Menu&lt;/h2&gt;
        &lt;div id=&quot;satu&quot; class=&quot;section&quot;&gt;
			&lt;h3&gt;&lt;a href=&quot;#satu&quot;&gt;Menu Satu&lt;/a&gt;&lt;/h3&gt;
			&lt;div&gt;&lt;ul&gt;
				&lt;li&gt;Sub Menu Satu&lt;/li&gt;
				&lt;li&gt;Sub Menu Dua&lt;/li&gt;
				&lt;li&gt;Sub Menu Tiga&lt;/li&gt;
			&lt;/ul&gt;&lt;/div&gt;
		&lt;/div&gt;
        &lt;div id=&quot;dua&quot; class=&quot;section&quot;&gt;
            &lt;h3&gt;&lt;a href=&quot;#dua&quot;&gt;Menu Dua&lt;/a&gt;&lt;/h3&gt;
			&lt;div&gt;&lt;ul&gt;
				&lt;li&gt;Sub Menu Satu&lt;/li&gt;
				&lt;li&gt;Sub Menu Dua&lt;/li&gt;
				&lt;li&gt;Sub Menu Tiga&lt;/li&gt;
			&lt;/ul&gt;&lt;/div&gt;
        &lt;/div&gt;
		&lt;div id=&quot;tiga&quot; class=&quot;section&quot;&gt;
			&lt;h3&gt;&lt;a href=&quot;#tiga&quot;&gt;Menu Tiga&lt;/a&gt;&lt;/h3&gt;
			&lt;div&gt;&lt;ul&gt;
				&lt;li&gt;Sub Menu Satu&lt;/li&gt;
				&lt;li&gt;Sub Menu Dua&lt;/li&gt;
				&lt;li&gt;Sub Menu Tiga&lt;/li&gt;
			&lt;/ul&gt;&lt;/div&gt;
        &lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Kuncinya adalah pada pseudo class selector :target di CSS.

pada class akordion diberikan pseudo class target ke elemen h3 dan div
.akordion :target h3 + div
Ketika link “satu” pada tag h3 di click maka URL akan menuju ke fragment identifier #satu dengan demikian div id=satu akan bekerja membuka section class=satu. Begitu juga ketika link dua atau tiga di click.

Selamat mencoba.

Membuat Efek Text Berkedip dengan JavaScript

blinking tag

blinking tag

Tahukah anda bahwa blink adalah element html (html tag) non-standard yang biasa dipakai untuk mempresentasikan text berkedip pada web browser (efek alternate antara visible dan invisible). Element blink ini awalnya (1990-an) diperkenalkan pada Netscape Navigator lalu beberapa web browser men-support-nya, namun kemudian dihilangkan dari Internet Explorer. Saat ini (2013) hanya browser Opera saja yang mensupport-nya.

Nah, buat Anda yang masih membutuhkan efek blinking text maupun background, bisa menggunakan JavaScript dan CSS pada contoh coding berikut ini.

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Blinking&lt;/title&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var x=1;
function blink(id) {
	document.getElementById(id).style.width=&quot;300px&quot;;
	if(x==1){
		document.getElementById(id).style.backgroundColor = &quot;red&quot;;
		x=2;
	} else {
		document.getElementById(id).style.backgroundColor = &quot;&quot;;
		x=1;
	}
}
window.onload=function(){
setInterval(&quot;blink('alert')&quot;, 500);}

var blink_speed = 500; // every 1000 == 1 second, adjust to suit
var t = setInterval(function () {
    var ele = document.getElementById('blinkingtext');
    ele.style.visibility = (ele.style.visibility == 'hidden' ? '' : 'hidden');
}, blink_speed);
&lt;/script&gt;

&lt;style type=&quot;text/css&quot;&gt;
div#blinkingtextarea
{	width:200px; padding: 8px;
	text-align:center;background-Color:#ff0000;
}
&lt;/style&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;blinkingtextarea&quot;&gt;
&lt;div id=&quot;blinkingtext&quot;&gt;Blinking Text&lt;/div&gt;
&lt;/div&gt;

	

&lt;div id=&quot;alert&quot;&gt;Blinking Background&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

Selamat mencoba.

 

Update (April 2016)

Saya teringat 2 prinsip:

  1. Dahulukan menggunakan CSS daripada JavasScript
  2. Coding KISS – keep it simple and short for coding

Maka dengan googlng saya dapatkan cara membuat blinking text dengan 2 cara :

Cara pertama pakai CSS3:

&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Blinking CSS3&lt;/title&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
.blinktext{
   animation:blinker 1s linear infinite;
}
@keyframes blinker {
   50% { opacity:0.0; }
}
&lt;/style&gt;

&lt;/head&gt;
&lt;body&gt;
   &lt;div class=&quot;blinktext&quot;&gt; Blinking Text dengan CSS &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Cara kedua pakai Simple JavaScript dengan JQuery

&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Blinking CSS3&lt;/title&gt;
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;blinktext2&quot;&gt; Blinking Text dengan JS&lt;/div&gt;
&lt;/body&gt;
&lt;script src=&quot;jquery-2.1.3.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(function blink() {
    $('.blink_me').fadeOut(500).fadeIn(500, blink); 
});
&lt;/script&gt;
&lt;/html&gt;

Selamat mencoba.

Membuat Expand-Collapse Toggle Element Div

Kali ini saya akan menunjukan cara membuat Expand-Collapse Toggle Element Div.
Berikut ini tampilannya pada saat kondisi expand div, content div akan show.

ShowDivExpand

Jika kita click icon collapse maka content div akan hide seperti tampilan berikut ini.

ShowDivCollapsed

Pertama kita siapkan coding HTML sebagai berikut:

&lt;body&gt;
Click collapse/expand image to toggle the content below.
&lt;div id=&quot;headerDiv&quot;&gt;
	&lt;a id=&quot;imgHeader&quot; href=&quot;javascript:toggle('myContent','imgHeader');&quot;&gt;
	&lt;img title=&quot;Collapse&quot; alt=&quot;&quot; src=&quot;collapse.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;div id=&quot;titleText&quot;&gt;Demo Toggle Element Div&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;contentDiv&quot;&gt;
&lt;div id=&quot;myContent&quot; style=&quot;display: block;&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;This is line one of the content.&lt;/li&gt;
	&lt;li&gt;This is line two of the content.&lt;/li&gt;
	&lt;li&gt;This is line three of the content.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;&lt;/div&gt;
This is the demo of collapse/expand element.
&lt;/body&gt;

Kemudian kita berikan sentuhan presentasi dengan CSS berikut:

&lt;style type=&quot;text/css&quot;&gt;
#headerDiv, #contentDiv {float:left;width:510px;}
#headerDiv a {float:right;margin:10px 10px 5px 5px;}
#myHeader {font-size:1.1em;font-weight:bold;margin:5px;float:left;}
#titleText {font-size:1.3em;font-weight:bold;margin:8px;}
#headerDiv {background-color:#a0a0a0;color:#ffffff;}
#contentDiv {background-color:#f0f0f0;}
#myContent {margin:1px;}
&lt;/style&gt;

Icon berupa image expand.png dan collapse.png bisa Anda buat sendiri dengan dengan print screen di MS Paint.
Ketika user click icon collapse maka #contentDiv akan dibuat hidden oleh Javascript.
Begitu juga ketika user click icon expand maka #contentDiv akan dibuat show oleh Javascript.
Berikut ini coding javascriptnya:

&lt;script type=&quot;text/javascript&quot;&gt;
function toggle(showHideDiv, switchImgTag) {
	var ele = document.getElementById(showHideDiv);
	var imageEle = document.getElementById(switchImgTag);
	if(ele.style.display == &quot;block&quot;) {
		ele.style.display = &quot;none&quot;;
		imageEle.innerHTML = '&lt;img src=&quot;expand.png&quot; title=&quot;Expand&quot; border=0&gt;';
	}
	else {
		ele.style.display = &quot;block&quot;;
		imageEle.innerHTML = '&lt;img src=&quot;collapse.png&quot; title=&quot;Collapse&quot; border=0&gt;';
	}	
} 
&lt;/script&gt;

Saya sudah mencobanya dan berhasil dengan baik. Selamat mencoba.

Menampilkan Jam dan Tanggal dengan JavaScript

Show Date Time for Real

Show Date Time for Real

Menampilkan tanggal dan jam secara real time dapat dilakukan dengan JavaScript.

Berikut ini coding JavaScript untuk tampilan seperti diatas:

function startTime()
{ 	var today=new Date();
	var weekday=new Array(7);
	var weekday=[&quot;Sunday&quot;,&quot;Monday&quot;,&quot;Tuesday&quot;,&quot;Wednesday&quot;,&quot;Thursday&quot;,&quot;Friday&quot;,&quot;Saturday&quot;];
	var monthname=new Array(12);
	var monthname=[&quot;Jan&quot;,&quot;Feb&quot;,&quot;Mar&quot;,&quot;Apr&quot;,&quot;May&quot;,&quot;Jun&quot;,&quot;Jul&quot;,&quot;Aug&quot;,&quot;Sep&quot;,&quot;Oct&quot;,&quot;Nov&quot;,&quot;Dec&quot;];
	var dayname=weekday[today.getDay()];
	var day=today.getDate();
	var month=monthname[today.getMonth()]; 
	var year=today.getFullYear();
	var h=today.getHours();
	var m=today.getMinutes();
	var s=today.getSeconds();
	h=checkTime(h);
	m=checkTime(m);
	s=checkTime(s);
	document.getElementById('clocktime').innerHTML=dayname+&quot;, &quot;+day+&quot;-&quot;+month+&quot;-&quot;+year+&quot;, &quot;+h+&quot;:&quot;+m+&quot;:&quot;+s;
	t=setTimeout(function(){startTime()},500);
}
// function checkTime to add a zero in front of numbers &lt; 10
function checkTime(i)
{	if(i&lt;10){i=&quot;0&quot;+i;}
	return i;
}

Berikut ini coding HTML yang memanggil fungsi javascript tersebut:

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;My Application&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/time.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;startTime()&quot;&gt;
&lt;table bgcolor=&quot;#0000ff&quot; width=&quot;100%&quot; cellpadding=&quot;5&quot;&gt; 
&lt;tr&gt;&lt;td width=&quot;33%&quot;&gt;My Application&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;
&lt;span id=&quot;clocktime&quot;&gt;&lt;/span&gt; :: Welcome, Super Administrator | Logout&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;

 
Anda Juga bisa menggunakan method javascript toLocaleDateString() dengan parameter format dibawah ini.

&lt;div id=&quot;date&quot; style=&quot;font:bold 12pt Arial;background:#00ffff;width:100%;&quot;&gt;&lt;/div&gt; 
&lt;script&gt;
function displayTime() {  
const now = new Date(); // Get current time
const formattedDate = now.toLocaleDateString('en-GB',
  {day: 'numeric', month: 'short', year: 'numeric'})
  .replace(/ /g, '-');
document.getElementById(&quot;date&quot;).innerHTML = formattedDate + 
  &quot; &quot; + now.toLocaleTimeString('it-IT');
setTimeout(displayTime, 1000); 
}
window.onload = displayTime; 
&lt;/script&gt;

 
Selamat mencoba.

Membuat Object Koneksi AJAX Ke Server

Logo AJAX

Logo AJAX

AJAX (Asynchronous JavaScript and XML) adalah teknik pemrograman web dengan memberdayakan JavaScript untuk membuat aplikasi web dimana pertukaran data antara web browser dan server terjadi secara asynchronous. AJAX memungkinkan kita untuk meng-update bagian tertentu dari halaman web tanpa perlu me-reload seluruh halaman.

Latar belakang munculnya AJAX:

  • Terjadi perbedaan mencolok antara aplikasi desktop dan aplikasi website dimana aplikasi desktop lebih responsif dan interaktif.
  • Aplikasi website lebih mudah dalam hal implementasi, cukup sekali pasang di server (install once run anywhere), semua user dapat menggunakannya tanpa perlu instalasi/update pada desktop mereka.
  • Javasript memungkinkan aplikasi web lebih dinamis dan interaktif. Proses request-respond dengan javascript awalnya masih tinggi dan data yang dikirim oleh server cukup besar (satu webpage), sehingga aplikasi web menjadi lambat.
  • Jesse James Garrett dari Adaptive Paths (Feb 2005) memperkenalkan istilah AJAX dalam teknik pemrograman web , dan kemudian menjadi web standard secara official oleh W3C (Apr 2006)
  • AJAX memungkinkan JavaScript membuat website lebih responsif dan interaktif seperti aplikasi desktop (client-server) dimana proses request-respond dapat dilakukan secara asinkron, hanya sebagian dari halaman web yang reload dibandingkan seluruh halaman web.

AJAX bukanlah bahasa pemrograman web baru ataupun teknologi web baru melainkan merupakan gabungan dari teknik pemrograman web standard yang telah ada, yakni:

  • XHTML (Extensible HyperText Markup Language)
  • CSS (Cascading Style Sheets)
  • DOM (Document Object Model)
  • XML (Extensible Markup Language)
  • JavaScript dengan object XMLHttpRequest

Berikut ini fungsi umum AJAX untuk membuat object koneksi ke web server.

var xmlHttp = buatObjekXmlHttp();
function buatObjekXmlHttp()
{  var obj = null;
if (window.ActiveXObject)
obj = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
else
if (window.XMLHttpRequest)
obj = new XMLHttpRequest();
if (obj == null)
document.write(&quot;Browser tidak mendukung XMLHttpRequest&quot;);
return obj;
}

Perbandingan Model Aplikasi Web Klasik dan AJAX

Perbandingan Model Aplikasi Web Klasik dan AJAX

Dalam coding JavaScript tradisional, jika kita ingin mendapatkan informasi dari database atau file di server, atau mengirim informasi ke server, kita menggunakan method GET atau POST data ke server. User mengklik tombol “Submit” untuk mengirim / mendapatkan informasi, menunggu respon dari server, dan kemudian halaman baru akan loading hasilnya.

Karena server mengembalikan sebuah halaman baru setiap kali user melakukan request, aplikasi web tradisional menjadi lebih lambat dan cenderung kurang user-friendly. Dengan AJAX, JavaScript berkomunikasi langsung dengan server, melalui objek XMLHttpRequest.

Dengan HTTP request, web browser akan mendapatkan respon dari server web tanpa reload seluruh halaman. User akan tetap pada halaman yang sama, dan ia tidak akan melihat bahwa permintaan script, atau mengirim data ke server secara background.

Berikut ini beberapa kemampuan AJAX secara umum:

  • Real time validation
  • Partial web page update, contoh: Pengecekan username, password atau data field lainnya
  • Auto Complete / Auto Suggest, contoh: google search
  • Load on demand, dimana proses pengiriman dan pengambilan data ke dan dari server secara background
  • Refresh data dan server push, contoh: web menampilkan nilai tukar mata uang atau stock exchange, ramalan cuaca dll
  • Mashup (pencampuran aplikasi data dalam satu halaman)
  • Online Chat / shutbox
  • RSS Feed untuk subscribe website.

Keuntungan penggunaan AJAX :

  • Mengurangi penggunaan bandwidth yang berlebihan
  • Meningkatkan produktivitas dengan mempercepat proses interaksi website & user
  • Mengurangi development time sehingga menghemat biaya pengembangan website

Kekurangan/dampak penggunaan AJAX:

  • Karena alamat halaman tidak berubah ketika proses request-respond, maka tidak mudah untuk membuat bookmark suatu halaman web yang berbasis ajax
  • Search engine kemungkinan tidak dapat meng-index seluruh bagian halaman web
  • Tombol back pada browser menjadi tidak berfungsi karena seluruh aksi terjadi di halaman web yang sama
  • Tidak semua browser support AJAX
  • Aplikasi AJAX menjadi tidak berfungsi jika user men-disable JavaScript pada browser clientnya.

Read Write File Dengan JavaScript

Read Write File dengan JavaScript

Read Write File dengan JavaScript

JavaScript bekerja di client web browser. Program berikut ini adalah contoh operasi read & write file dengan menggunakan ActiveXObject yang ada di JavaScript. ActiveXObject ini hanya bekerja di browser Microsoft Internet Explorer (IE).

Pertama kita sediakan form berisi field textarea1 dan input textbox1 serta sebuah input button. Field textarea1 digunakan untuk menampilkan content dari file dan field input textbox1 digunakan untuk memasukan text ke dalam file bernama chat.txt.
Ketika input text dimasukan lalu tekan tombol enter atau tombol Post maka text akan JavaScript akan menulis ke dalam file chat.txt lalu membacanya dan ditampilkan ke textarea.

&lt;body&gt;
&lt;h2&gt;Chat History&lt;/h2&gt;
&lt;form name=&quot;form1&quot;&gt;
&lt;textarea name=&quot;textarea1&quot; id=&quot;textarea1&quot; rows=&quot;10&quot; cols=&quot;50&quot;&gt; &lt;/textarea&gt; &lt;br&gt;&lt;br&gt;
Say: &lt;input type=&quot;text&quot; name=&quot;textbox1&quot; onKeyPress=&quot;return handleKeyPress(this,event)&quot;&gt;
&lt;input type=&quot;Button&quot; value=&quot;Post&quot; onClick='SayIt()'&gt;
&lt;/form&gt;
&lt;/body&gt;

Berikut ini coding JavaScriptnya. Ada 2 fucnction yaitu SayIt() dan handleKeyPress(myfield,e). Function SayIt() akan melakukan proses read write file dan function handleKeyPress(myfield,e) untuk menangani input tombol enter pada field textbox1.

function SayIt()
{	var SayDateTime = new Date();
	var fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
	var flp = fso.OpenTextFile(&quot;D:\\chat.txt&quot;, 8,false);
	var valtextbox1 = document.form1.textbox1.value;
	flp.WriteLine(SayDateTime);
	flp.WriteLine(valtextbox1);
	flp.Close();
	var flp = fso.OpenTextFile(&quot;D:\\chat.txt&quot;, 1, true);
	FileContents = flp.ReadAll();
	document.form1.textarea1.value=FileContents;
	var textarea = document.getElementById('textarea1');
	textarea.scrollTop = textarea.scrollHeight;
	document.form1.textbox1.value = &quot;&quot;;
	flp.Close();
}
function handleKeyPress(myfield,e)
{	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	if (keycode == 13)
	{	SayIt();
		return false;
	}
	else return true;
}

Coding ini hanya memberikan gambaran cara kerja ActivexObject dalam JavaScript yang berlaku di Microsoft Internet Explorer.
Jika Anda ingin menggunakannya di server sebagai aplikasi chating atau shutbox, tentu harus menggunakan script yang bekerja di server, seperti ASP atau PHP.

Membaca Informasi Browser Dengan JavaScript

Browser Info

Ada kalanya kita ingin mendapatkan informasi web browser apa yang digunakan oleh user, apakah IE, Mozilla Firefox, Chrome, atau Opara. Dengan object navigator yang disediakan oleh JavaScript, kita dapat membuat coding untuk men-deteksi web browser apa yang digunakan oleh user.

Berikut ini coding HTML dan Javascript selengkapnya.

&lt;html&gt;
&lt;body&gt;
&lt;div id=&quot;example&quot;&gt;&lt;/div&gt;
&lt;script&gt;
txt = &quot;&lt;p&gt;Browser CodeName: &quot; + navigator.appCodeName + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;Browser Name: &quot; + navigator.appName + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;Browser Version: &quot; + navigator.appVersion + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;Cookies Enabled: &quot; + navigator.cookieEnabled + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;Platform: &quot; + navigator.platform + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;User-agent header: &quot; + navigator.userAgent + &quot;&lt;/p&gt;&quot;;
txt+= &quot;&lt;p&gt;User-agent language: &quot; + navigator.systemLanguage + &quot;&lt;/p&gt;&quot;;
document.getElementById(&quot;example&quot;).innerHTML=txt;
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ 
	var ffversion=new Number(RegExp.$1) 
	document.write(&quot;You're using Firefox &quot; + ffversion) 
}
else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ 
	var ieversion=new Number(RegExp.$1) 
	document.write(&quot;You're using IE &quot; + ieversion)
}
else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ 
	var oprversion=new Number(RegExp.$1) 
	document.write(&quot;You're using Opera &quot; + oprversion)
}
else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ 
	var chromeversion=new Number(RegExp.$1) 
	document.write(&quot;You're using Chrome &quot; + chromeversion)
}
else
	document.write(&quot;Browser name is unknown.&quot;)
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

Kita dapat mengembangkan coding ini untuk mendeteksi browser lainnya, seperti Safari. Kita juga dapat memodifikasi coding ini untuk berjalan di server dan menyimpan informasi browser yang digunakan oleh user di database.

Membuat Table Zebra Hover

Table Zebra Hover

Table Zebra Hover

Table Zebra Hover adalah table dengan 2 warna barisnya selang seling yang ketika disorot / highlight dengan mouse pointer akan berubah warna barisnya.

Sebenarnya kita dapat membuat table zebra hover ini baik dengan CSS maupun javascript. Namun di sini kita akan gunakan CSS, karena secara performance lebi baik.

Berikut ini struktur HTML untuk membuat tablenya.

&lt;body&gt;
&lt;table id=&quot;table-a&quot;&gt;
	&lt;thead&gt;
	&lt;tr&gt;&lt;th&gt;Header 1&lt;/th&gt;&lt;th&gt;Header 2&lt;/th&gt;	&lt;th&gt;Header 3&lt;/th&gt;&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
	&lt;tr&gt;&lt;td&gt;Item 1A&lt;/td&gt;&lt;td&gt;Item 1B&lt;/td&gt;&lt;td&gt;Item 1C&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Item 2A&lt;/td&gt;&lt;td&gt;Item 2B&lt;/td&gt;&lt;td&gt;Item 2C&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Item 3A&lt;/td&gt;&lt;td&gt;Item 3B&lt;/td&gt;&lt;td&gt;Item 3C&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Item 4A&lt;/td&gt;&lt;td&gt;Item 4B&lt;/td&gt;&lt;td&gt;Item 4C&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Item 5A&lt;/td&gt;&lt;td&gt;Item 5B&lt;/td&gt;&lt;td&gt;Item 5C&lt;/td&gt;&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/body&gt;

Untuk presentasinya kita buat dengan coding CSS sehingga table akan berbentuk zebra (2 warna) dan ketika barisnya di highlight / hover akan berubah warna.

#table-a
{	font-family: &quot;Lucida Sans Unicode&quot;, &quot;Lucida Grande&quot;, Sans-Serif;
	font-size: 12px;
	width: 500px;
	text-align: center;
	border-collapse: collapse;
}
#table-a th
{	font-size: 13px;
	font-weight: normal;
	padding: 8px;
	background: #b9c9fe;
	border-top: 4px solid #aabcfe;
	border-bottom: 1px solid #fff;
	color: #039;
}
#table-a td
{	padding: 8px;
	background: #e8edff;
	border-bottom: 1px solid #fff;
	color: #669;
	border-top: 1px solid transparent;
}
#table-a tr:hover td
{	background: #d0dafd;
	color: #339;
}

Kita dapat memodifikasi tabel zebra hover ini dengan mengembangkan struktur dan presentasinya.

Membuat Menu Horisontal Dengan CSS

menu horisontal

Menu horisontal

Mengapa dengan CSS? mengapa tidak dengan JavaScript?

Pada prinsipnya loading CSS lebih cepat dari pada JavaScript. Inilah alasannya mengapa kita lebih mengutamakan menggunakan CSS ketimbang JavaScript. JavaScript memang bisa melakukan operasi apa saja dalam website, tapi performance CSS masih lebih baik. Jika bisa dilakukan dengan CSS kenapa harus JavaScript.

Menu horisontal atau dropdown menu umumnya terdapat pada setiap website. Menu digunakan untuk memudahkan kita melakukan navigasi content dalam sebuah website.

Untuk membuat menu horisontal, pertama kita tulis struktur HTML-nya berikut ini.

&lt;ul id=&quot;menu&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;About&lt;/a&gt;
  	&lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;The Team&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;History&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Vision&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;Products&lt;/a&gt;
  	&lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Cozy Couch&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Great Table&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Small Chair&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Shiny Shelf&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Invisible Nothing&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;Contact&lt;/a&gt;
  	&lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Online&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Right Here&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;&quot;&gt;Somewhere Else&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/body&gt;

Setelah itu kita buat presentasinya dengan CSS berikut ini.

ul {
	font-family: Arial, Verdana;
	font-size: 16px;
	margin: 0;
	padding: 0;
	list-style: none;
}
ul li {
	display: block;
	position: relative;
	float: left;
}
li ul {
	display: none;
}
ul li a {
	display: block;
	text-decoration: none;
	color: #ffffff;
	border-top: 1px solid #ffffff;
	padding: 5px 15px 5px 15px;
	background: #2C5463;
	margin-left: 1px;
	white-space: nowrap;
}
ul li a:hover {
	background: #617F8A;
}
li:hover ul {
	display: block;
	position: absolute;
}
li:hover li {
	float: none;
	font-size: 14px;
}
li:hover a {
	background: #617F8A;
}
li:hover li a:hover {
	background: #95A9B1;
}

Menu dropdown horisontal ini juga dapat bekerja dengan baik di browser MSIE.

Membuat Validasi Tanggal Dengan JavaScript

Jika kita ingin mendapatkan informasi tanggal dari user kita dapat membuat sebuah field untuk diisi oleh user dengan format tanggal tertentu, seperti pada gambar berikut ini:

Form dengan field tanggal

Kita berikan petunjuk format pengisiannya: dd/mm/yyyy, misalnya: input 17/8/1945 untuk 17 Agustus 1945. Jika user memasukan tanggal yang salah, misalnya 8/17/1945, maka ketika form disubmit kita dapat menampilkan alert “Invalid Date Format. Please correct and submit again.”

Berikut ini coding HTML-nya.

&lt;body&gt;
&lt;form name=&quot;formTes&quot; action=&quot;tesform.html&quot; method=&quot;get&quot;  onsubmit=&quot;return cekData();&quot;&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Nama:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;nama&quot;
maxlength=&quot;35&quot; size=&quot;35&quot; /&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;Alamat:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;alamat&quot;
maxlength=&quot;60&quot; size=&quot;60&quot; /&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;Kota:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;kota&quot; value=&quot;&quot;
maxlength=&quot;20&quot; size=&quot;20&quot; /&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;Kode Pos:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;kodepos&quot;
maxlength=&quot;5&quot; size=&quot;6&quot; /&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;Tgl Lahir:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;lahir&quot; /&gt; &lt;b&gt;Valid date format:&lt;/b&gt; dd/mm/yyyy&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;e-mail:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot;
name=&quot;email&quot; /&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;input name=&quot;kirim&quot; type=&quot;submit&quot; value=&quot;Kirim&quot; /&gt;
&lt;button type=&quot;submit&quot; name=&quot;button1&quot; onclick=&quot;confirm_clear();&quot;&gt;Clear&lt;/button&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;

Validasi dapat diberikan pada saat tombol submit dengan event onclick pada formTes akan di-check apakah field tanggal lahir telah diisi dengan benar.

Berikut ini coding JavaScript untuk validasi field tanggal lahir:

function checkdate()
{    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
var returnval=false
if (!validformat.test(formTes.lahir.value))
alert(&quot;Invalid Date Format. Please correct and submit again.&quot;)
else
{     //Detailed check for valid date ranges
var dayfield=formTes.lahir.value.split(&quot;/&quot;)[0]
var monthfield=formTes.lahir.value.split(&quot;/&quot;)[1]
var yearfield=formTes.lahir.value.split(&quot;/&quot;)[2]
var dayobj = new Date(yearfield, monthfield-1, dayfield)
if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
alert(&quot;Invalid Day, Month, or Year range detected. Please correct and submit again.&quot;)
else
returnval=true
}
if (returnval==false) formTes.lahir.select()
return returnval
}

Untuk mencobanya silakan download full script in PDF, select all (Ctrl+A) copy paste ke notepad save as html.

Membuat Layout Website

layout2kolom

Layout 2 kolom

Hal pertama dalam pembuatan sebuah website adalah membuat layout website. Ada 2 cara pembuatan layout website, yakni: dengan struktur table dan dengan struktur div.

Contoh coding layout website dengan struktur table:

&lt;table width=&quot;80%&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; align=&quot;center&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;HEADER GOES HERE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot; width=&quot;24%&quot; height=&quot;245&quot;&gt;
LEFT CONTENT GOES HERE&lt;/td&gt;
&lt;td align=&quot;center&quot; width=&quot;76%&quot;&gt;
RIGHT CONTENT GOES HERE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;FOOTER GOES HERE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

Contoh coding layout website dengan struktur div:

&lt;div id=&quot;page&quot;&gt;
&lt;div id=&quot;header&quot;&gt;
&lt;h1&gt;HEADER GOES HERE&lt;/h1&gt;
&lt;/div&gt;
&lt;div id=&quot;leftcontent&quot;&gt;
&lt;h3&gt;LEFT CONTENT GOES HERE&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;rightcontent&quot;&gt;
&lt;h2&gt;RIGHT CONTENT GOES HERE&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;footer&quot;&gt;
&lt;h4&gt;FOOTER GOES HERE&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;

Coding layout website dengan struktur table terlihat lebih banyak dibandingkan dengan struktur div, dengan kata lain struktur table lebih kompleks daripada struktur div. Tabel jauh dari clean code dan mengandung semantik. Semantik dari table adalah menampilkan data (data table). Struktur table yang lebih kompleks akan mempengaruhi development time dan maintenance website nantinya . Coding yang lebih banyak tentu akan mempengaruhi kinerja website pada saat loading.

Dengan struktur div kita akan dapat lebih banyak mengatur presentasinya dengan CSS. Dengan memisahkan struktur dan presentasi akan memudahkan coding dan maintenance website.

@charset &quot;utf-8&quot;;
/* CSS Document */
body {
	margin: 0;
	padding: 0;
	text-align: center;
}
#page {
	border: 3px solid #c0c0c0;
	margin: 0 auto;
	width: 960px;
	height:1000px
	text-align: left;
}
#header {
	border: 3px solid #c0c0c0;
	height: 192px;
}
#leftcontent {
	border: 3px solid #c0c0c0;
	float: left;
	width: 192px;
	height: 700px;
}
#rightcontent {
	border: 3px solid #c0c0c0;
	float: left;
	width: 756px; /*kurang 12px*/
	height: 700px;
}
#footer {
	border: 3px solid #c0c0c0;
	clear: left;
	height: 100px;
}

Kita dapat mengembangkan website ini dengan mudah dengan modifikasi html maupun CSS-nya.