Tag: HTML5

  • 5 Teknik Dasar HTML5 yang Wajib Anda Ketahui

    Dalam berbagai artikel dan contoh kode pada blog ini sudah diterapkan beberapa fitur baru yang ada di HTML5. Saat ini sebagian besar browser terbaru sudah mendukung fitur-fitur tersebut. Berikut ini adalah 5 teknik dasar HTML5 untuk membuat dokumen HTML Anda menjadi lebih singkat dan bersih.

    1. Penulisan doctype pada awal sebuah dokumen HTML yang lebih singkat dan sederhana.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    

    Dulu, hampir tidak mungkin ada seorang web developer yang hafal di luar kepala kode untuk menuliskan doctype di atas. Sekarang Anda dapat menggantinya dengan doctype berikut ini.

    <!doctype html>
    

    Sederhana sekali dan tidak perlu menuliskannya dengan huruf besar seperti orang sedang marah.

    2. Penggunaan XML namespace dan atribut-atribut XML lain pada elemen html tidak diperlukan.

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    

    Pada HTML5 cukup ditulis:

    <html lang="en">
    

    3. Pada HTML5 diperkenalkan cara baru untuk menyebutkan charset dokumen.

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    

    Pada HTML5 menjadi:

    <meta charset="utf-8">
    

    4. Pada HTML5 kita bisa menulis tag script, style, dan link tanpa atribut type="text/javascript" dan type="text/css".

    <script type="text/javascript">
      // kode javascript Anda di sini
    </script>
    

    Pada HTML5 cukup dituliskan seperti berikut:

    <script>
      // kode javascript Anda di sini
    </script>
    

    5. Dokumen HTML5 tetap valid tanpa adanya slash ‘/’ pada self closing tag.

    <img src="" alt="" />
    <br />
    

    Pada HTML5, tanda slash bisa dihilangkan.

    <img src="" alt="">
    <br>
    

    Itulah 5 teknik dasar untuk membuat sebuah dokumen HTML5 yang valid dan memiliki syntax yang kompatibel dengan HTML4 dan XHTML1. Jadi tidak ada salahnya untuk menggunakannya dalam setiap website yang kita buat. Seperti yang Anda lihat, HTML5 membuat kode menjadi lebih singkat dan bersih, sehingga menghasilkan ukuran file yang lebih kecil. Ukuran file yang lebih kecil akan membuat website menjadi lebih ringan untuk diakses.

  • Validasi dan Sanitasi Form dengan PHP

    Salah satu fitur PHP yang paling penting adalah kemampuannya untuk mengolah form HTML. Form adalah halaman yang hampir dapat dijumpai pada setiap website, contohnya adalah form untuk login, form pendaftaran, form kontak, dll. Mengolah form HTML dengan PHP sangat mudah, dan karena kemudahannya inilah banyak programer yang membuat form secara sembarangan.

    Validasi dan sanitasi data adalah 2 hal yang tidak bisa dilepaskan ketika bekerja dengan form. Data yang tidak valid dan tidak bersih, tidak hanya akan menghasilkan informasi yang salah tetapi juga akan menimbulkan masalah keamanan. Artikel ini akan membahas proses pembuatan form dari yang sederhana sampai yang cukup kompleks dengan validasi dan sanitasi data. Hasil akhir diharapkan mampu meminimalkan kesalahan dan masalah kemananan pada form.

    Contoh 1. Pengolahan form paling sederhana dengan PHP
    nama file: test.html

    <form name="form_test" method="post" action="test.php">
      <p><label for="email">Email </label><input name="email" type="text"/></p>
      <p><label for="website">Website </label><input name="website" type="text" /></p>
      <p><input type="submit" name="submit" value="kirim"></p>
    </form>
    

    nama file: test.php

    <?php
    echo 'Email: ' . $_POST['email'] . '<br />';
    echo 'Website: ' . $_POST['website'];
    

    Pada contoh di atas, tidak ada kode yang memvalidasi dan menyanitasi masukan dari pengguna. Akibatnya apapun data yang dimasukan oleh pengguna akan langsung diproses oleh PHP. Hal ini tidak boleh terjadi. Salah satu masalah yang mungkin terjadi adalah ketika pengguna tidak memasukan data sesuai format dengan benar (baik email maupun website). Sebenarnya HTML5 dapat sedikit membantu tugas para programer, yaitu dengan mengganti nilai type menjadi “email” dan “url“.

    Contoh 2. HTML5 form
    nama file: test.html

    <form name="form_test" method="post" action="test.php">
      <p><label for="email">Email </label><input name="email" type="email"/></p>
      <p><label for="website">Website </label><input name="website" type="url" /></p>
      <p><input type="submit" name="submit" value="kirim"></p>
    </form>
    

    Dengan kode di atas, sekarang akan muncul tooltips ketika pengguna salah memasukan email atau website. Sebagai catatan, belum semua browser mendukung fitur ini, jadi validasi dan sanitasi pada server side (kode PHP) mutlak diperlukan.

    Memeriksa validitas dan membersihkan data dari karakter-karakter yang tidak diinginkan adalah pekerjaan yang tidak mudah. Untungnya, mulai versi 5.2, PHP mempunyai function yang disebut filter_var yang akan membuat pekerjaan programer menjadi jauh lebih mudah. Function filter_var dapat melakukan kedua hal tersebut, baik validasi maupun sanitasi data. Sebenarnya apakah perbedaan di antara keduanya?

    1. Validasi: menentukan apakah sebuah data memiliki format yang valid.
    2. Sanitasi: menghilangkan karakter-karakter yang tidak diinginkan pada sebuah data.

    Mengapa harus keduanya? Karena ada kemungkinan pengguna, baik sengaja maupun tidak sengaja memasukan karakter yang bisa berakibat buruk pada aplikasi. Berikut ini adalah contoh penggunaan filter_var.

    <?php
    $string = "<h1>Hello, World!</h1>";
    $string = filter_var($string, FILTER_SANITIZE_STRING);
    echo 'variabel $string bernilai "' . $string . '"';
    

    Tampak pada contoh kode di atas, filter_var akan menghilangkan semua tag HTML pada suatu string. Sekarang ubah file “test.php” di atas untuk memvalidasi dan menyanitasi masukan email dan website.

    Contoh 3. PHP filter_var
    nama file: test.php

    <?php
    if (!empty($_POST['email'])) {  
      $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);  
      if (filter_var($email, FILTER_VALIDATE_EMAIL)) {  
        echo "Email $email valid.<br/>";  
      } else {  
        echo "Email $email tidak valid.<br/>";  
      }  
    } else {
      echo "Email harus diisi.<br/>";
    }
    
    if (!empty($_POST['website'])) {  
      $website = filter_var($_POST['website'], FILTER_SANITIZE_URL);  
      if (filter_var($website, FILTER_VALIDATE_URL)) {  
        echo "Website $website valid.";  
      } else {  
        echo "Website $website tidak valid.";  
      }  
    } else {
      echo "Website harus diisi";
    }
    

    Sebagai catatan, alamat website yang valid itu harus mengandung “http://“. Kode !empty($_POST['email']) adalah untuk memeriksa apakah pengguna memasukan data atau tidak.

    Selain dengan filter_var, masih ada cara lain yang bisa digunakan, terutama jika server belum mendukung function ini, yaitu dengan htmlspecialchars. Function htmlspecialchars akan mengkonversi 5 karakter khusus menjadi representasinya dalam bentuk kode. Kelima karakter tersebut beserta representasinya adalah sebagai berikut.

    • &‘ (ampersand) dikonversi menjadi ‘&amp;‘.
    • "‘ (double quote) dikonversi menjadi ‘&quot;‘.
    • '‘ (single quote) dikonversi menjadi ‘&#039;‘.
    • <' (less than) dikonversi menjadi '&lt;'
    • '>' (greater than) dikonversi menjadi '&gt;'

    Contoh penggunaannya adalah sebagai berikut.

    <?php
    $string = htmlspecialchars("<a href='test'>Test string</a>", ENT_QUOTES);
    echo $string; // &lt;a href=&#039;test&#039;&gt;Test string&lt;/a&gt;
    

    Jalankan kode di atas, lalu view source hasilnya. Hasil view source akan sama seperti yang ada pada baris komentar di atas. Pada function htmlspecialchars di atas, terdapat argumen ENT_QUOTES yang berarti akan mengkonversi ''' (single quote) dan '"' (double quote). Jika argumennya ENT_NOQUOTES, kedua quote tidak akan dikonversi.

    sql injection

    Akhirnya, jika bekerja dengan database, dibutuhkan suatu function yang akan melindungi database dari serangan SQL Injection. Function mysql_real_escape_string akan membersihkan semua data yang akan dimasukan ke dalam database.

    <?php
    $email = mysql_real_escape_string($email);
    $website = mysql_real_escape_string($website);
    $query = 'UPDATE nama_tabel SET website = ' . $website . ' WHERE email = ' . $email;  
    mysql_query($query);  
    
  • Jangan Gunakan Autofocus pada Form Login

    Autofocus adalah salah satu atribut baru yang dikenal pada HTML 5. Autofocus adalah sebuah atribut boolean (true/false). Atribut autofocus akan secara otomatis mengatur fokus ke kotak input yang telah ditentukan. Jadi bisa dibilang autofocus menghemat 1 kali mouse klik.

    Contoh website yang menggunakan autofocus pada kotak input adalah mesin pencari Google. Ketika ingin mencari sesuatu melalui Google, kita tidak perlu mengeklik pada kotak input untuk bisa mengetik kata kuncinya. Secara otomatis kursor berkedip di kotak input, pertanda bisa langsung mengetik di situ.

    Di bawah ini adalah potongan kode untuk menunjukan penggunaan autofocus.

    <label for="nama">Nama </label><input id="nama" name="nama" type="text" autofocus="autofocus"/>
    

    Pada atribut boolean seperti autofocus, pengisian nilai tidak mutlak diperlukan, jadi penulisan seperti di bawah ini juga benar.

    <label for="nama">Nama </label><input id="nama" name="nama" type="text" autofocus/>
    

    Semua browser moderen mendukung fitur ini, kecuali Internet Explorer. Untuk mengimplementasikan fitur ini pada browser yang tidak mendukung autofocus, maka bisa digunakan JavaScript. Namun bukan itu yang menjadi masalah di sini. Perhatikan potongan kode di bawah ini.

    <label for="nama">Nama </label><input id="nama" name="nama" type="text" <strong>autofocus="autofocus"</strong>/> <br />
    <label for="password">Password </label><input id="password" name="password" type="password" />
    

    Ada sebuah halaman yang berisi sebuah form login. Salah satu kotak input-nya memiliki atribut autofocus. Jadi kursor akan secara otomatis berkedip di kotak “nama” setelah halaman selesai dimuat seutuhnya. Namun beberapa pengguna tidak sabar atau tidak mengetahui fitur ini, sehingga mereka mengeklik pada kotak input “nama” tanpa menunggu halaman dimuat seutuhnya. Akibatnya, ketika pengguna sampai pada kotak input “password”, lalu halaman selesai dimuat seutuhnya, maka kursor akan berpindah lagi ke kotak input “nama”.

    Bayangkan jika seseorang sedang mengetik di kotak password lalu tiba-tiba kursor berpindah ke kotak input “nama” yang notabene bertipe text. Password-nya akan tercetak di kotak input “nama” tanpa samaran. Hal ini fatal karena password bisa dilihat oleh orang lain yang kebetulan lewat di dekat kita.

    autofocus text input

    Website yang menerapkan fitur ini pada form login contohnya adalah Facebook, sedangkan yang tidak adalah Twitter.

  • Multiple File Upload dengan PHP dan HTML5

    Multiple upload HTML5
    Jika kita ingin melakukan upload lebih dari satu file, biasanya akan menggunakan kode HTML sebagai berikut:

    <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="berkas&#91;&#93;" />
      <input type="file" name="berkas&#91;&#93;" />
      <input type="submit" value="Upload" />
    </form>
    

    Kelemahannya adalah kita harus menekan tombol browse sebanyak jumlah file yang ingin di-upload. Selain itu membutuhkan bantuan Javascript jika diinginkan fasilitas untuk penambahan field upload.

    Melanjutkan catatan file upload yang lalu, kali ini adalah tentang mengunggah (upload) banyak berkas (file) dengan PHP dan HTML5. Ternyata HTML5 sudah mampu mengunggah banyak file sekaligus tanpa bantuan Javascript, hanya dengan sebuah form <input type=’file’>. Namun ada 2 hal yang membedakan dengan file upload biasa, pertama pada attribute name, yaitu di belakangnya ditambahkan tanda kurung kotak “[ ]” yang akan menyebabkan PHP memperlakukannya sebagai sebuah array. Perbedaan yang kedua yaitu adanya attribute multiple, yang baru diperkenalkan pada HTML5.

    <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="berkas2&#91;&#93;" />
      <input type="submit" value="Upload" />
    </form>
    

    Jika kita coba tampilkan di layar menggunakan perintah print_r($_FILES) (baca catatan file upload yang lalu) maka hasilnya adalah kurang lebih sebagai berikut:

    Array
    (
        [berkas2] => Array
            (
                [name] => Array
                    (
                        [0] => 125586922.jpg
                        [1] => afpheh5e.jpg
                        [2] => baby nirvana.jpg
                    )
    
                [type] => Array
                    (
                        [0] => image/jpeg
                        [1] => image/jpeg
                        [2] => image/jpeg
                    )
    
                [tmp_name] => Array
                    (
                        [0] => /tmp/phpuBSQsq
                        [1] => /tmp/phpOJajKX
                        [2] => /tmp/phpW93N1u
                    )
    
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                        [2] => 0
                    )
    
                [size] => Array
                    (
                        [0] => 91835
                        [1] => 41895
                        [2] => 36404
                    )
    
            )
    
    )

    Sekarang kita punya array multidimensi yang bentuknya sedikit aneh karena alih-alih dikelompokkan berdasarkan indeks 0, 1, 2, dst melainkan indeks name, type, tmp_name, dst. Menggunakan operator foreach kita bisa membagi file menurut indeks numeriknya tanpa harus melakukan transformasi array yang rumit.

    foreach($_FILES['berkas2']['tmp_name'] as $key => $tmp_name) {
      move_uploaded_file($tmp_name, "uploads/{$_FILES['berkas2']['name'][$key]}");
    }

    Kini mengunggah banyak file sekaligus jadi lebih mudah, tekan tombol ctrl pada keyboard atau cukup drag mouse untuk memilih file-file yang ingin di-upload. Berikut ini adalah kode sumber lengkapnya:

    <!DOCTYPE html>
    <html>
      <head>
        <title>upload 1 file</title>
        <meta charset="utf-8">
      </head>
      <body>
        <div>
          <form action="" method="post" enctype="multipart/form-data">
            <p>
              <input type="file" name="berkas2&#91;&#93;" multiple="multiple" />
              <input type="submit" value="Upload" />
            </p>
          </form>
        </div>
      </body>
    </html>
     
    <pre>
    <?php
      if(isset($_FILES&#91;'berkas2'&#93;)) {
        foreach($_FILES&#91;'berkas2'&#93;&#91;'tmp_name'&#93; as $key => $tmp_name) {
          move_uploaded_file($tmp_name, "uploads/{$_FILES['berkas2']['name'][$key]}");
        }
      }
    ?>