Month: February 2012

  • Troubleshooting “Unexpected T_ECHO” pada Operator Ternary

    Satu kesalahan yang kerap dijumpai pada penggunaan operator ternary adalah

    Unexpected T_ECHO

    Pesan kesalahan di atas akan muncul jika pada pernyataan kedua dan ketiga berisi perintah/eksekusi suatu pernyataan. Perhatikan contoh berikut:

    <?php
    $angka = 10;
    $angka % 2 === 0 ? echo "genap" : echo "ganjil";
    

    Pernyataan 2 dan 3 berisi perintah echo yang berfungsi mencetak tulisan “genap”/”ganjil” pada browser. Operator ternary tidak sepenuhnya identik dengan pernyataan if/else. Pada if/else kita dapat mengeksekusi suatu perintah, seperti yang ditunjukkan pada kode berikut:

    <?php
    $angka = 10;
    if ($angka % 2 === 0)
      echo "genap"
    
    else echo "ganjil";
    

    Berbeda dengan if/else, setelah kondisi dievaluasi, operator ternary harus mengembalikan suatu nilai dari pernyataan 2 atau 3. Nilai di sini bisa berupa string, number, atau boolean. Jika masih ingin menggunakan operator ternary, kode di atas harus diubah menjadi sebagai berikut:

    <?php
    $angka = 10;
    echo $angka % 2 === 0 ? "genap" : "ganjil";
    
  • Menyingkat Kode PHP menggunakan Operator Ternary (?:)

    Salah satu konsep dasar pemrograman yang penting adalah pernyataan bersyarat, atau lebih dikenal dengan istilah percabangan. Percabangan adalah suatu kondisi yang dipakai oleh bahasa pemrograman untuk mengatur alur logika program. Dalam bahasa pemrograman PHP setidaknya dikenal 2 macam percabangan, yaitu if/else dan switch/case.

    Percabangan dengan if/else dapat disederhanakan menggunakan operator ternary. Contoh operator ternary bisa dijumpai pada artikel ini, ini, dan ini. Operator ternary memiliki bentuk dasar sebagai berikut:

    (pernyataan1) ? (pernyataan2) : (pernyataan3)

    Bentuk di atas memiliki arti: jika “pernyataan1” adalah benar, nilai kembalian adalah “pernyataan2”, dan jika sebaliknya, nilai kembalian adalah “pernyataan3”. Untuk lebih jelasnya, perhatikan contoh berikut.

    <?php
    $var = 7;
    $cek_var = $var > 5 ? true : false;
    

    Pada contoh di atas nilai variable $cek_var adalah true, karena pernyataan nilai $var lebih besar dari 5 adalah benar. Berikut ini adalah padanannya dalam bentuk if/else.

    <?php
    $var = 7;
    if ($var > 5)
      $cek_var = true;
    
    else
      $cek_var = false;
    

    Contoh aplikasi di dunia nyata adalah seperti yang biasa digunakan untuk memberikan nilai default pada sebuah variable.

    <?php
    $action = !isset($_POST['action']) ? 'default' : $_POST['action'];
    

    Kode di atas identik dengan:

    <?php
    if (!isset($_POST['action'])) {
        $action = 'default';
    } else {
        $action = $_POST['action'];
    }
    

    Bonus:
    Operasi menghitung jumlah hari (termasuk memeriksa tahun kabisat) dalam satu bulan menggunakan operator ternary bertingkat.

    <?php
    $bulan = 2; // bulan Februari
    $tahun = 2012; // ini tahun kabisat
    
    $jumlah_hari = ($bulan == 2 ? ($tahun % 4 ? 28 : ($tahun % 100 ? 29 : ($tahun %400 ? 28 : 29))) : (($bulan - 1) % 7 % 2 ? 30 : 31));
    echo $jumlah_hari;
    
  • Membuat Tombol “Back”

    Pada umumnya browser sudah memiliki tombol “back” yang berfungsi untuk kembali ke halaman sebelumnya. Seorang web developer harus mempunyai alasan yang bagus untuk memasangnya pada website, misal karena adanya permintaan khusus dari klien. Namun, artikel ini ditulis bukan demi klien, melainkan demi ilmu pengetahuan 🙂

    Ada 2 cara yang bisa dipakai, yaitu dengan JavaScript dan PHP. Untuk mencoba kode-kode di bawah ini, dibutuhkan sebuah halaman lain yang berisi link menuju ke halaman yang berisi tombol “back” ini.

    <input type="button" value="Go Back" onclick="history.back(-1)" />
    

    Tentunya implementasi menggunakan JavaScript masih kurang, karena ada kemungkinan user mematikan JavaScript di browser-nya. Berikut ini adalah implementasi dengan PHP.

    <?php
      $url = htmlspecialchars($_SERVER['HTTP_REFERER']);
    ?>
      <a href="<?=$url?>">Go Back</a>
    

    Pada snippet di atas digunakan fungsi PHP htmlspecialchars untuk mensanitasi input dari client. Meskipun secara fisik tidak ada input yang bisa disusupi oleh user, namun harus tetap berpegang pada prinsip dasar pengembangan website, yaitu jangan pernah percaya apa yang dikirimkan oleh client.

    Jika kode PHP di atas langsung dieksekusi tanpa melalui halaman lain, maka akan muncul pesan peringatan:

    Notice: Undefined index: HTTP_REFERER in /var/www/index.php on line 2

    Itu adalah pesan peringatan karena ada yang salah pada kode PHP. Untuk memperbaiki kesalahan itu bisa dipelajari di sini.

    <?php
      $url = isset($_SERVER['HTTP_REFERER']) ? htmlspecialchars($_SERVER['HTTP_REFERER']) : '';
    ?>
      <a href="<?=$url?>">Go Back PHP</a>
    

    Dalam artikel singkat ini selain dipelajari cara membuat tombol “back” namun juga pentingnya menulis kode yang baik dan berkualitas. Kode yang baik dan berkualitas akan membuat website yang dibuat menjadi lebih aman. Mulailah menulis kode yang berkualitas dari kasus yang paling sederhana.