Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

10 kesalahan yang sering dilakukan dalam coding PHP

Langsung aja baca

http://www.sourcerally.net/regin/8-The-PHP-coder's-top-10-mistakes-and-problems

Tanggapan

  • ...masih kurang...

    masalah yg paling sering muncul di dweb :

    * tidak pernah memeriksa register globals sebelum melakukan coding php,
    hasilnya seringkali melakukan coding dengan model register globals ON, padahal seting server OFF

    * lupa mengganti permission utk folder atau file sesuai hak akses yg dibutuhkan saat bekerja dengan folder atau file

    * penggunaan double quotes yg tidak pada tempatnya, error-nya sih tidak, tapi kasian parser php-nya,
    misal : echo "$suatu_variabel";
    kenapa tidak langsung : echo $suatu_variabel;

    * ... hayo apa lagi ... :D
  • kalou melakukan kesalahan seperti yg di bilang om boo... apa yg bakal terjadi dengan code pehape kita ya om??

    pengeruhnya apa tu double quete??
  • Emang nggk disebutin tapi dalam contohnya sudah pakai $_GET/$_POST jadi dianggap off :D :)
  • untuk lupa mengganti permission biasanya sering terjadi pada programmer yang develop under windows atau awam di linux/unix.

    saya sering melihat penulisan sql yang tidak profesional seperti .. where nama = '$input'... seharusnya kan seperti ini .. where nama = '".$input."'...

    demikian juga dengan penulisan asosional array main hajar aja seperti ini $nama[satpam], harusnya kan ada double/single quote nya $nama['satpam'] kalau memang string, karena php memulai dengan memeriksa apakah satpam sudah di deklarasikan sebagai konstanta lewat define

    untuk point 8. Not knowing about existing functionality kan sudah ada tuh fungsi function_exists

    untuk point 5. Syntax errors, php sendiri tidak tergantung pada server, html or whatsoever untuk memparser dan memvalidasi syntax, php.exe sendiri sudah built-in validator/lint yang bisa di jangkau lewat console lokasi/php.exe -l lokasi/test.php
  • @aris1234,

    error-nya sih enggak, warning keluar aja enggak ... script tetep bisa jalan,

    cuma karena yg dibahas adalah kesalahan "programmer php"
    (kesalahan bisa macem2, mulai konsep, logika, pemilihan fungsi, dll, ...baca sendiri lah...)

    ya buntutnya sedikit banyak pasti lari ke optimasi script php

    yg : echo "$suatu_variabel"
    jadi : echo $suatu_variabel
    itu juga sebagian dr langkah optimasi, meringankan beban parser php

    logikanya gini :
    php punya dua delimiter untuk string,
    satu single-quote, satu lagi double-quote, tapi perlakuannya beda,

    kalo yg single-quote, parser php langsung menganggap seluruh isi string yg dibatasi oleh delimiter single-quote tsb adalah fixed-string, yg tidak perlu memeriksa apakah ada variabel / escape-char di dalamnya

    $suatu_variabel = 'entah';
    echo 'ini isi $suatu_variabel';
    //yg tercetak : ini isi $suatu_variabel

    kalo yg double quote, parser php akan memeriksa seluruh isi string, mulai dari karakter pertama sampai habis, utk mencari kemungkinan adanya variabel / escape-char yg mesti disesuaikan isinya, di dalam string tsb ...

    $suatu_variabel = 'entah';
    echo "ini isi $suatu_variabel";
    //yg tercetak : ini isi entah

    lha yg jadi masalah parser php bukan manusia yg langsung bisa melihat bahwa variabel yg harus diganti ada di posisi ke 9,
    jadi php harus memeriksa dari awal string,
    soalnya ada kemungkinan string tsb berbentuk semacam ini :

    echo "$suatu_variabel ini isi";
    echo "i$suatu_variabel ni isi";
    echo "in$suatu_variabel i isi";
    echo "ini$suatu_variabel isi";
    ...dst...

    jadi beban kan buat parser php-nya?

    jadi utk fixed-string (string yg tidak mengandung variabel) gunakan single-quote,
    kalo ada variabel, gunakan operand DOT,
    kecuali utk escape karakter seperti "\n" , "\r" , "\t" ... ya itu tetep pake double-quote

    balik ke awal,
    yg : echo "$suatu_variabel"
    jadi : echo $suatu_variabel
    itu malah jadi useless ... masalahnya satu string isinya cuma satu variabel saja,
    jadi gak perlu diapit delimeter double-quote

    btw, ...doh... jadi komen deh... :D
    saya sering melihat penulisan sql yang tidak profesional seperti .. where nama = '$input'... seharusnya kan seperti ini .. where nama = '".$input."'...
    ya kalo delimiter-nya double-quote kan gak masalah pak...

    "select * from table where nama = '$input'"

    malah kalo pake double-quote trus dikombinasi pake DOT rasanya malah jadi aneh :D

    mendingan, sekalian optimasi :
    'select * from table where nama =\'' . $input . '\''
  • Oh ya jangan menulis file php dengan ekstensi inc. terutama misalkan koneksi.inc, config.inc

    Bisa berbahaya.

    Contoh.
    Buka google lalu ketik di form searchnya

    filetype:inc intext:"mysql_connect" site:id
  • Sumpah yakin bener-bener ngeri! Ga bakalan deh ndevel pake model kaya gini. Hiiiiiiiii, pokoke ngeri men!
    Oh, ya, koq aku belum dung ya tentang MVC Framework yang point 7 itu. Ada yang bisa ngasih pencerahan kah? Apa yang dimaksud itu Model View Controller? Sorry, yang di wikipedia itu ga paham2 juga, agak dudul seh:D
  • Originally posted by Goku
    Oh ya jangan menulis file php dengan ekstensi inc. terutama misalkan koneksi.inc, config.inc

    Bisa berbahaya.

    Contoh.
    Buka google lalu ketik di form searchnya

    filetype:inc intext:"mysql_connect" site:id

    kesalahan itu terjadi gara-gara si developer ngga memblokir folder tempat nyimpen file-file tersebut dari crawler-nya google -- yg akibatnya file-file di dalemnya terindeks sama google.

    gampangnya sih tinggal blokir aja pake robots.txt. caranya tinggal bikin file dgn nama robots.txt di root folder web elo, trus isi pake ini:
    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /includes/
    

    edit sesuai selera.
  • Originally posted by RisK
    Originally posted by Goku
    Oh ya jangan menulis file php dengan ekstensi inc. terutama misalkan koneksi.inc, config.inc

    Bisa berbahaya.

    Contoh.
    Buka google lalu ketik di form searchnya

    filetype:inc intext:"mysql_connect" site:id

    kesalahan itu terjadi gara-gara si developer ngga memblokir folder tempat nyimpen file-file tersebut dari crawler-nya google -- yg akibatnya file-file di dalemnya terindeks sama google.

    gampangnya sih tinggal blokir aja pake robots.txt. caranya tinggal bikin file dgn nama robots.txt di root folder web elo, trus isi pake ini:
    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /includes/
    

    edit sesuai selera.
    Masalahnya bukan karena itu bung. File-file PHP yang ekstensinya .inc, bisa diakses langsung lewat webbrowser, dan tampil isi file PHPnya mentah-mentah. Karena kode-kode di file .inc tidak akan dieksekusi oleh engine PHP sebagai file PHP. Terutama misalnya config.inc, file ini bisa dibaca mentah-mentah. Kalau ekstensinya PHP kan, ketika file tersebut diambil dari server, akan dieksekusi terlebih dahulu, jadi never show the plain code. :)

    Dilihat dari reply-reply diatas, itu kebanyakan masalah kompabilitas versi PHP. Ketika sekarang masih banyak server yang menggunakan PHP4. Tapi ke depan, pasti akan beralih ke PHP5. Jadi saatnya koding lagi.;)
  • @atas,

    lha? anda sendiri gak memahami konteks tulisannya kang risk :D

    yg dimaksud kang risk tuh, dr mana pengunjung bisa tau ada file *.inc tersebut?
    dari mana google bisa tau ada file tersebut dan meng-index-nya ke database search engine-nya?

    ...jawabannya ya yg ditulis kang risk di atas...

    nah karena dr google bisa dapet nama file beserta direktori-nya, maka pengunjung langsung bisa akses ke *.inc-nya,
    lalu tau isi file *.inc tersebut
  • tull....

    klo udah di blokir pake robots.txt brati google ga bakal nyimpen link file-nya di indeks mereka. dan kalo google ngga nyimpen informasi itu, brarti masalah yg di angkat sama mas Goku ngga akan pernah terjadi, kan?

    d'ya get the point, chump?
  • Salah satu kesalahan yg menyebalkan:

    terdapat spasi sebelum dan sesudah tag php saat menggunakan fungsi header().

    Sialnya lagi, kita mematikan error reporting shg tdk tahu di mana spasi itu berada.
  • he eh saya juga sering tuh, jadi headernya ga mau di jalanin karena header already sent gara2 spasi tadi, makanya kalo nutup tag php di ujung file jgn da spasi lagi or neken enter.
    saya sering melihat penulisan sql yang tidak profesional seperti .. where nama = '$input'... seharusnya kan seperti ini .. where nama = '".$input."'...

    wah kalo yg ini bodo ah, soalnya kalo diturutin kalo dah banyak entar kodenya jadi ruwet banget bentuknya banyak putik2nya wuih.. ribet nganuinnya. hehe
  • Originally posted by badrun
    .. ribet nganuinnya. hehe

    Makanya optimasi kode dilakukan dari awal ketikan pertama, biar kedepannya gak ribet ^^,
  • Originally posted by klenix
    Sumpah yakin bener-bener ngeri! Ga bakalan deh ndevel pake model kaya gini. Hiiiiiiiii, pokoke ngeri men!
    Oh, ya, koq aku belum dung ya tentang MVC Framework yang point 7 itu. Ada yang bisa ngasih pencerahan kah? Apa yang dimaksud itu Model View Controller? Sorry, yang di wikipedia itu ga paham2 juga, agak dudul seh:D

    http://codeigniter.com/wiki/MVC
  • Boleh nambahin, kayanya udah pada tau sih,
    buat ngindarin sql injection
    kita cek dulu magic quotesnya pake get_magic_quotes_gpc() sebelum dieksekusi mysql contohnya:
    <?php
    if($_POST['submit'])
    {
    $data = $_POST['data'];
    if(get_magic_quotes_gpc())
    {
    $data = addslashes($data);
    }
    $data = mysql_real_escape_string($data);

    // baru setelah itu data dimasukin ke database
    }
    ?>
  • tambahan, nulis sintaks sql pake huruf kecil semua dan minus tanda `` untuk nama table / kolom mysql nya

    jadi, yang harusnya :
    $db->query("SELECT `col_a`, `col_b` FROM `table` WHERE `id` = '". $id ."' ORDER BY `id` DESC");

    malah ditulis:
    $db->query("select col_a, col_b from table where id = ' $id' order by id desc");
  • mungkin menurut saya masih ada yang kurang, yaitu : Dokumentasi di code-nya. Misalkan anda membuat program penjualan di perusahaan anda, dan kebetulan program anda ga ada dokumentasinya. Apa yang terjadi jika suatu saat program anda di kembangkan oleh orang lain ? Ada kemungkinan bikin pusing orang yang mengembangkan program anda, lebih pusing lagi jika program anda murni menggunakan design patern anda, maksud saya anda tidak menggunakan framework yang di kenal masyarakat php, misal cakePhp, CodeIgniter, Zend atau Prado.

    Sebelumnya sorry kalau ada kata2 yang salah ;). maklum masih newbie hahahaha :D:D
  • (of course there are exceptions and you can have good explanation on why you don't use a framework).

    for sure... i hate framework... i've make my own :)
  • Yaaa dibalikin sama masing-masing aja, ada yang frameworks minded ada juga yang tidak.

    Dua duanya sah koq, tidak melanggar peraturan. Tapi kebanyakan yang sudah merasakan enaknya pake framework biasanya keterusan, pake frameworks. Jadi perlahan-lahan sebetulnya pengguna frameworks sudah membiarkan dirinya menjadi konsumen bukan lagi produsen.

    Guwe sendiri, termasuknya bukan pengguna frameworks, dan kesalahan2 standar yang dilakukan oleh seorang programmer yang disampaikan diatas mungkin harusnya dikurangi jadi 9 point aja. MAsalah frameworks itu kembali pada diri masing-masing...
  • bagaimana dapat software php gratis??
  • kalo menurut saya seh karena tiap orang mempunya gaya ber-coding yg berbeda2 kalopun salah itu mah biasa namnya juga manuasia. mana ada yg sempurna
  • Originally posted by Goku
    Oh ya jangan menulis file php dengan ekstensi inc. terutama misalkan koneksi.inc, config.inc

    Bisa berbahaya.

    Contoh.
    Buka google lalu ketik di form searchnya

    filetype:inc intext:"mysql_connect" site:id

    yap bener..kebanyakan tutorial PHP jaman dulu yg masi pake *.inc utk nyimpen koneksi ke databaase... :D
  • tidak baca bismillah... aduh aku juga kadang lupa...:(
  • Aq pernah nyoba masukin script ini:cool::

    <?php
    //coba_fopen.php

    $file = fopen("http://localhost:8080/test1/aman1/Default.aspx","r";);

    while(!feof($file))
    {
    echo fgets($file);
    }
    fclose($file);
    ?>

    lalu saya coba buka "http://localhost/coba_fopen.php"; dari port: 80

    pas dicoba bisa buka .aspx di server lokal melalui apache (yg satu IIS dan yg lain apache), dan setelah saya ganti url utk fopen dengan "http://www.google.co.id"; juga tetap bisa (melalui localhost port 80) .;)

    tapi koq jadi tdk bisa membuka halaman google secara langsung (tanpa melalui localhost port 80) sampai harus di-restart (padahal sebelum dicoba bisa) dan browser yg saya coba firefox 3 dan IE 4.:(

    Sptnya ini termasuk kesalahan dalam coding PHP yg cukup parah dan sampai sekarang belum mengerti kenapa.:D
Sign In or Register to comment.