10/28/12

AJax PHP : Cara Praktis Mendeteksi Event Keystroke pada Textbox dengan Menggunakan Ajax PHP

Pada saat anda mendaftarkan sebuah email atau facebook, ketika anda memasukkan alamat email anda saat pendaftaran lalu tiba-tiba ada pesan yang mengatakan bahwa email tersebut telah terdaftar ?? saya yakin anda pernah menemukan hal semacam itu ataupun yang merip dengan kasus di atas. Jadi jika anda memiliki form pendaftaran pada suatu website dan terdapat field username atau email yang tentu saja isinya tidak boleh sama dengan yang sudah terdaftar. Nah kita melakukan pengecekan username secara langsung pada saat form masih diisi dengan menggunakan Ajax.
Oke tanpa terlalu banyak basa-basi langsung saja kita berangkat Ke TKP ... !!!

Form Pendaftaran

Pertama-tama kita buat form pendaftarannya terlebih dahulu. Dan didalam tersebut kita pasang fungsi Ajaxnya. Oke sekarang cobalah kode berikut dan simpan dengan nama formajax.html:

<html>
<head>
<script language="javascript">
var XMLHTTPRequestObject = false;
if (window.XMLHttpRequest)
{   
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {     XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHttp");
} function getusername(dataSource) {   
if (XMLHttpRequestObject) {        
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function()    
{       
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
{
if (XMLHttpRequestObject.responseText == "terdaftar")
{                
var target = document.getElementById("target");
target.innerHTML = "<div>Maaf, username <b>"+input.value+"</b> sudah dipakai,silahkan pilih yang lain.</div>";
} else {                
var target = document.getElementById("target");
target.innerHTML = "<div>OK</div>";
}}}
XMLHttpRequestObject.send(null);
} }
function cekusername(keyEvent) { keyEvent = (keyEvent) ? keyEvent: window.event;
input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement;
if (keyEvent.type == "keyup") {
var target = document.getElementById("target");
target.innerHTML = "<div></div>";
if (input.value) {
getusername("cekusername.php?qu=" + input.value);
} }}
</script>
</head>
<body>
<h4>Silahkan isi Username "Ivan" dan cobalah isi dengan username lainnya</h4>
<form>
Username: <input type="text" name="username" onkeyup ="cekusername(event)" />
<Br />
<div id="target">
</div>
</form>
</body>
</html>

Penjelasan mengenai formajax.html. Pertama-tama pada awal script kita memiliki:

var XMLHTTPRequestObject = false;
if (window.XMLHttpRequest)
{
XMLHttpRequestObject = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{ XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHttp");
}

Script diatas merupakan fungsi dasar Ajax untuk membuat XMLHttpRequest. kita sudah pernah membahas hal ini pada artikel saya sebelumnya mengenai dasar-dasar Ajax. Jadi anda baca lagi, saya tidak akan menerangkannya lagi. Setelah itu terdapat fungsi function getusername(dataSource) Nah fungsi ini untuk mengambil hasil dari file PHP kita dan menampilkannya di dalam div yang kita inginkan. Fungsi ini dipanggil belakangan karena itu nanti saja akan saya terangkan. Kemudian kita memiliki fungsi function cekusername(keyEvent), nah ini merupakan fungsi untuk mengecek event kita pada form tersebut.
Pada form dibagian bawah kita memanggil fungsi tersebut melalui atribut onkeyup ="cekusername(event)". Ini berarti ketika kita menulis sesuatu di field Username, ketika tombol terangkat maka fungsi cekusername(event) dijalankan.

Lalu pada fungsi cekusername(event) terdapat kode input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement;, ini berarti kita membuat variabel input yang isinya adalah text yang sudah kita masukkan. Setelah itu kita cek jika tombol terangkat (dengan kode if (keyEvent.type == "keyup") {) maka kita panggil fungsi get username("cekusername.php?qu=" + input.value);. Yang berarti kita memanggil fungsi getusername dengan mengirimkan file php yang akan kita panggil untuk melakukan pengecekan.

Sekarang mari kita buat file php nya. Buatlah file php dengan nama cekusername.php dan isilah dengan kode berikut ini:

<?
$username=$_GET["qu"];
if ($username=="ivan")
{
echo "terdaftar";
}
else
{
echo "ok";
}
?>

Pada fungsi getusername kita menyimpan file PHP kita kedalam variabel datasource dan kita memanggil file PHP kita dengan kode XMLHttpRequestObject.open("GET", dataSource);. Didalam file PHP kita melakukan pengecekan sederhana apakah variabel qu isinya dhimas. Jika ya kita tampilkan text "terdaftar" jika tidak kita tampilkan text "ok".

Misal kita akan menulis "ivan". Maka ketika kita baru mengetik huruf "i", maka semua fungsi dijalankan dan XMLHttpRequestObject.open("GET", dataSource); memanggil file cekusername.php dengan isi cekusername.php?qu=i, kemudian di cek di PHP dan karena "i" tidak sama dengan "ivan" maka hasilnya adalah teks "ok". Kemudian baru kita cek if (XMLHttpRequestObject.responseText == "terdaftar") yang berarti jika teks yang ditampilkan "terdaftar" maka kita akan tampilkan pesan bahwa username ivan sudah terdaftar didalam div yang memiliki id target.

Karena teks yang ditampilkan adalah "ok" maka yang dijalankan adalah kode berikutnya yaitu menampilkan teks "OK" didalam div yang memiliki id target. Kemudian kita meneruskan mengetik "v", proses tersebut kemudian diulangi kembali, hingga kita mengetik "ivan" yang didalam kode PHP menghasilkan teks "terdaftar"

Anda bisa bayangkan betapa berat proses yang dijalankan. Pada praktek sesungguhnya, didalam file PHP nya anda melakukan pengecekan ke database mysql apakah username yang diketikkan sudah ada di database atau belum. Bagaimana pusing? tentu saja, karena Ajax memang rumit.

NB :
Jika anda membuat aplikasi pendaftaran registrasi yang sesungguhnya, anda tetap harus melakukan pengecekan username menggunakan pemrograman server seperti PHP, ASP dll. Baru jika anda sudah membuatnya anda bisa tambahkan pemanis dengan membuat pengecekan tambahan menggunakan Ajax. Gunakan Ajax hanya sebagai pelengkap.

Silahkan dicoba dan alangkah baiknya sebelum mencoba anda mengerti dasar-dasarnya dulu, karena 90% kode diatas merupakan dasar dari Ajax. Selamat mencoba karena orang yang tekun berusahalah yang akan mendapatkan hasil yang baik.

   Sedikit motivasi buat anda dan ini merupakan kata motivasi yang selalu saya ingat BAHWA TIDAK ADA HAL YANG SULIT JIKA KITA MAU BELAJAR.
Read more

Ajax PHP : Dasar Pemahaman Ajax yang Harus Diketahui Para Pemula

Istilah AJAX technology belakangan ini sering terdengar dalam pengembangan aplikasi web, dan sudah banyak digunakan oleh para Web Developer. Salah satu situs yang paling terkenal yang telah menggunakan ajax adalah Facebook, terutama pada fasilitas chatingnya. berikut sedikit gambaran tentang AJAX dan cara memanfaatkannya dalam pengembangan web.

AJAX
 pertama kali di perkenalkan oleh Jesse James Garrett pada tulisannya yang berjudul AJAX: A New Approach To Web Applications.

AJAX
 bukan merupakan bahasa pemrograman baru, namun hanya sebuah tehnik pemanfaatan Javascript dalam mengontrol class object XMLHttpRequest untuk me-Refresh / mengupdate content dalam halaman web tanpa melakuan Reload keseluruhan halaman web seperti pada Metoede Tradisional, AJAX sendiri merupakan singkatan dari “Asynchronous JavaScript And XML”.

Kelebihan utama AJAX sendiri terletak pada pemanfaatan class object XMLHttpRequest untuk berkomunikasi dengan Web Server dalam melakukan request content, berikut pengunaan Javascript dalam membuat class object XMLHttpRequest :

Untuk membuat class object pada browser Firefox, Safari, IE7, Mozila, dsb.

oAJAX = new XMLHttpRequest();

Untuk membuat class object pada browser IE versi terbaru.


oAJAX= new ActiveXObject('MSXML2.XMLHTTP');


Untuk membuat class object pada browser IE versi lama.

oAJAX = new ActiveXObject('Microsoft.XMLHTTP');

Untuk dapat berjalan pada semua browser (Cross Browser), kita dapat mengabungkan kesemua script tersebut kedalam sebuah function pembuat class object XMLHttpRequest seperti berikut :

function createRequest()
{var oAJAX = false;
/*@cc_on @*/ /*@if (@_jscript_version >= 5) try { oAJAX = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) { try { oAJAX = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) { oAJAX = false;
} } @end @*/
if (!oAJAX && typeof XMLHttpRequest != 'undefined') { oAJAX = new XMLHttpRequest();
} if (!oAJAX){ alert("Error saat membuat XMLHttpRequest!");
}else{ alert("XMLHttpRequest sukses dibuat!");
} return oAJAX;
}

Mula-mula function diatas akan mencoba membuat class object XMLHttpRequest dengan sintaks IE versi terbaru, jika gagal maka akan di coba mengunakan sintaks pada IE versi sebelumnya jika masih gagal maka akan di coba mengunakan sintaks pembuatan pada browser Mozila, Firefox dsb.

Dengan pengabungan diatas di pastikan class object XMLHttpRequest akan terbentuk dan function akan mengembalikan class object yang telah berhasil dibuat (kecuali ada ada browser baru.

Setelah object XMLHttpRequest terbentuk selanjutnya kita dapa menanfaatkan object tersebut untuk berkomunikasi dengan server, berikut contoh pemanfaatan class object XMLHttpRequest untuk meminta content data dari server.

Untuk merequest data dari server pada contoh berikut di gunakan function requestContent yang akan di panggil saat sebuah link di click, detail script function yang digunakan seperti berikut :

function requestContent()
{ oRequest = createRequest();
var url = "dataLoad.html";// Buka komunikasi dengan server
oRequest.open("GET", url, true);// menunggu respon dari server
ID="divContent" oRequest.onreadystatechange = function ()
{ document.getElementById("divContent").innerHTML="
Menunggu Respon server";
if (oRequest.readyState == 4)
{
var response = oRequest.responseText;
document.getElementById("divContent").innerHTML = response;
} }
oRequest.send(null); }

Function diatas pertama kali akan membuat class object XMLHttpRequest dengan memanfaatkan function createRequest() yang ada sebelumnya, hasil pembuatan object akan di tampung kedalam variabel object oRequest.
setelah object XMLHttpRequest terbentuk, berikut akan dilakukan komunikasi dengan request dengan server untuk meminta data dari file dataLoad.html dengan GET method.
Sintaks open request sebagai berikut :

oXML.open(, , );
  • methode : POST atau GET
  • url_file : lokasi URL file yang akan di request
  • async_status : TRUE atau FALSE
catatan Asynchronous status:
  • Status TRUE :
    Javascript akan melanjutkan proses secara normal sementara menunggu respon dari server diterima
  • Status FALSE:
    akan menunggu hingga respon dari server, selama respon belum di dapat proses yang ada berikutnya akan di hold hingga respon dari server di terima.
Setelah melakukan request kepada server function akan menunggu respon dari server

oRequest.onreadystatechange

selama menggu respon dari server, bagian script berikut pd function akan dijalankan

document.getElementById("divContent").innerHTML="Menunggu Respon server";
if (oRequest.readyState == 4) { // baca data respon dari server
var response = oRequest.responseText;
document.getElementById("divContent").innerHTML = response;
}
}

ReadyState status:

0: uninitialized = Open status belum dijalankan
1: loading = Status request belum di jalankan
2: loaded = Status request sudah di kirimkan, dan menunggu respon dari server.
3: interactive = Respon dari server sedang dalam proses download.
4: completed = Respon data dari server telah selesai di download.

Function akan menunggu hingga status respon dari server oRequest.readyState == 4, nilai 4 tersebut berarti respon telah selesai diberikan oleh server, setelah respon selesai di kirimkan hasil respon di tampung kedalam variabel bernama response, proses menampung data respon ini mengunakan sintaks berikut :

var response = oRequest.responseText;

Dan selanjutnya data hasil respon di tampilkan pada div dengan nama “divcontent” yang telah di persiapkan sebelumnya, untuk menampilkan hasil respon ini mengunakan bantuan DOM (document object model) berikut :

document.getElementById("divContent").innerHTML = response;

Sampai disini baru terlihat pemanfaatan Javascript dalam mengunakan object XMLHttpRequest saja, data yang di berikan oleh server masih berupa file content statis dan belum memanfaatkan XML data respon.
Read more

Ajax PHP : Membuat Submit Form Dengan Ajax Menggunakan jQuery dan PHP

Halo smua ,, kali ini saya akan membagikan bagaimana cara untuk membuat submit form atau proses dari suatu form dengan menggunakan Ajax Jquery. Oke langsung saja ke TKP ...!!!
Studi kasus kali ini adalah contoh penggunaan Ajax untuk mengirimkan data dalam sebuah form dan memprosesnya. Salah satu kelebihan menggunakan form berbasis Ajax dibandingkan form konvensional adalah: kita tidak perlu meninggalkan form selama form dikirimkan/diproses.
Untuk contoh ini, saya menggunakan dua buah file, yang pertama adalah file ajaxform.html untuk menampilkan form nya, dan file proses.php untuk memproses data yang dikirimkan dan menampilkan hasilnya.

Script pada file ajaxform.html nya adalah sebagai berikut :

$(document).ready(function()
{  
$().ajaxStart(function() {
$('#loading').show();
$('#result').hide();})
.ajaxStop(function()
{
$('#loading').hide();
$('#result').fadeIn('slow');
});
$('#myForm').submit(function()
{ $.ajax(
{ type: 'POST', url: $(this).attr('action'), data: $(this).serialize(), success: function(data)
{ $('#result').html(data); } }) return false; }); })

Dalam mengimplementasikan Ajax, pada file form.html ini kita menggunakan fungsi ajax () pada jQuery. Fungsi ini memiliki sebuah argumen yaitu berupa object (pasangan key/value), dan yang akan saya gunakan di antaranya sebagai berikut:
  • type: jenis request yang dipakai, bisa ‘POST’ atau ‘GET
  • url: url yang akan digunakan untuk memproses data. karena pada form sudah terdapat nilai action (proses.php) maka saya tinggal mengambil nilai dari action tsb menggunakan $(this).attr('action')
  • data: data yang dikirimkan, dalam format querystring. untuk menghasilkan querystring dari form, saya menggunakan fungsi serialize()
  • success: fungsi yang akan dijalankan jika request berhasil, dengan sebuah argumen berupa data yang dikembalikan dari server, dalam hal ini adalah hasil output dari file proses.php (hasil output ini akan saya tampilkan ke dalam sebuah div dengan id="result" )
Sedangkan file proses.php yang akan memproses data yang dikirimkan, isinya adalah sebagai berikut:

<?php //validasi
if (trim($_POST['nim']) == '')
{
$error[] = '- NIM harus diisi';
}
if (trim($_POST['nama']) == '')
{
$error[] = '- Nama harus diisi';
}
if (trim($_POST['tempat_lahir']) == '')
{ $error[] = '- Tempat Lahir harus diisi';
} //dan seterusnya  
if (isset($error))
{
echo '<b>Error</b>: <br />'.implode('<br />', $error);
}
else
{ /* jika data mau dimasukkan ke database, */
/* maka perintah SQL INSERT bisa ditulis di sini */  
$data = '';
foreach ($_POST as $k => $v)
{
$data .= "$k : $v<br />";
}
echo '<b>Form berhasil disubmit. Berikut ini data anda:</b>';
echo '<br />';
echo $data;
}
die();
?>

Setelah file proses.php ini berhasil dijalankan dalam browser anda masing-masing maka hasil outputnya akan ditampilkan pada element div yang berada pada file ajaxform.html
Untuk lebih jelasnya anda bisa melihat demonya pada Link dibawah ini :


Lihat Demo Ajax Form Disini


Anda juga dapat mendownload source code nya di sini:

Klik Disini Untuk Download

Read more

10/26/12

Tips PHP : Teknik Untuk Mengurangi Resiko SQL Injection dengan Script Filter Parameter HTTP


Sahabat sekalian, Pernahkah anda berpikir jika website yang kita buat beresiko di bobol oleh para orang yang tidak bertanggung jawab ? atau tahukah anda jika semua hal itu sangat merugikan ? tentu anda sangat tidak ingin website yang anda buat di bobol oleh orang jahil dan tidak bertanggung jawab, So ,, Untuk mengatasi hal tersebut, saya sedikit berbagi tips atau cara untuk mengatasinya. Langsung saja ke TKP ...!!!
Salah satu bug yang paling ditakuti di dunia pemrograman web adalah : SQL Injection Vulnerability. Dalam dunia hacking sering disebut dengan SQLiv. Bug ini termasuk paling banyak dijumpai publikasinya di situs-situs pempublish bug dan hacking. SQL Injection ini termasuk bug dengan jenis resiko tinggi. Injeksi SQL biasanya dilakukan dengan cara memasukkan perintah atau sintaks tambahan ke dalam FORM yang ada dalam web tersebut, baik FORM di address bar, maupun FORM yang ada pada content.

Dasar Teknis

1. Serangan GET Methode

Dalam membuat web, biasanya kita akan gunakan pemanggilan ID atau kode unik untuk mengundang suatu konten.
Misalnya :

http://planetsphp/index.php?mod=news&id=12

Maka, proses SQL yang yang kemungkinan akan dibentuk adalah :
 
$id = $_GET['id'];
 
$query = "SELECT * FROM `news` WHERE `id`='$id'";

Apa yang terjadi apabila seseorang menambahkan perintah di belakang URL tersebut?

http://planetsphp/index.php?mod=news&id=12 and 1=1

dan selanjutnya. Jika penambahan 1=1 dan 1=0 menghasilkan efek yang berbeda, dengan
1=1 posting/berita tetap muncul (tidak error)
1=0 berita tidak muncul (error)

Error message memang bisa saja ditutup dengan mengganti value PHP.INI dengan display_errors=’false’. Namun proses error tetap saja terjadi. Maka sebenarnya sintaks perintah di belakang parameter ID itu diproses oleh script. Apakah ini berbahaya ? Tentu ia, ini sangat berbahaya. Biasanya penyusup akan menggunakan methode UNION untuk melakukan serangan selanjutnya. Anggap dalam tabel berita bagian yang diambil adalah terdapat 4 kolom/field
 
SELECT `judul`,`isi`,`penulis`,`tanggal` FROM `news` WHERE `id`='$id'

Proses UNION adalah proses dua SELECT yang harus memiliki jumlah field terpanggil yang sama. Jika sampai proses UNION tidak sama jumlah fieldnya, maka akan terjadi error. Error adalah informasi berharga untuk seorang intruder. Misal si intruder mencoba melakukan pemanggilan sebagai berikut :

http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1

maka halaman tersebut tidak akan muncul content. Dan kemungkinan dia bisa melanjutkan ke
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2

hingga
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,4

Pada saat ini, selain menunjukkan posting content tersebut, juga akan menampilkan tulisan 1,2,3,4 sesuai dengan fieldnya. Saat itulah si intruder memanfaatkan celah seperti berikut:

Pencarian versi MySQL
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,@@version

Pencarian nama database yang sedan digunakan atau aktif
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,database()

Pencarian nama user atau User Name database aktif
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,user()

Pencarian nama database lain
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,
(SELECT DISTINCT TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES WHERE 
TABLE_SCHEMA not in('INFORMATION_SCHEMA','mysql','test') LIMIT 1)

Pencarian nama tabel untuk database ‘website’ misal
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,
(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE 
TABLE_SCHEMA ='web' AND TABLE_NAME not in('coba','test','anu') LIMIT 1)

Pencarian nama kolom / field untuk tabel ‘user’ dalam database ‘website’ misal
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,
(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_SCHEMA ='web' AND TABLE_NAME ='user' AND COLUMN_NAME not in('test') LIMIT 1)

Pencarian data dalam kolom user atau password
 
http://planetsphp/index.php?mod=news&id=12 UNION SELECT 1,2,3,
(SELECT username FROM user LIMIT 1)
 
http://planetsphp
/index.php?mod=news&id=12 UNION SELECT 1,2,3,
(SELECT password FROM user WHERE username='admin')

Setelah mendapatkan user dan password dari tabel user, maka dapat dieksekusi Login ke dalam form. Proses lain dapat juga dengan mencoba membaca file dalam sistem atau menulis file dalam sistem

SELECT load_file('/etc/passwd');
 
SELECT 'test' INTO OUTFILE('/var/www/hack.php');

atau bahkan
 
UPDATE news SET judul='hacked';

Cerita mengenai hacking dengan sql injection akan dibahas dalam posting lain.

2. Serangan POST Method

Serangan ini biasanya dilakukan pada FORM login.
Login Admin

Serangan ini biasanya memanfaatkan logika pemrograman sebagai berikut :
 
$username = $_GET['username'];
 
$password = $_GET['password']
 
$query = "SELECT * FROM `user` WHERE `username`='$username' AND `password`='$password'";

Logika ini benar, memanfaatkan operator logika AND. Sehingga session baru terbuka jika PASANGAN username dan password itu terdapat dalam tabel user.
Apa yang terjadi apabila kita memasukkan pada kolom login tersebut adalah : admin’ OR”=’ ? Maka proses query yang terjadi menjadi seperti ini

SELECT * FROM `user` WHERE `username`=’admin’ OR ”=’‘ AND `password`=”;

Bagian tercetak kuning merupakan masukan yang berasal dari form. Sedangkan proses logika AND menjadi tercemar oleh OR, sehingga password salahpun akan dianggap benar. Padahal jika logika tersebut benar, sessi akan terbuka untuk si penyusup, tanpa perlu tahu passwordnya.

3. Blind SQL Injection

Blind SQL Injection adalah SQL Injection tanpa petunjuk error atau penampilan yang jelas. Tetap Blind SQLiv ini berbahaya.

Gejala-gejala
Melihat gejala sebuah situs mengidap penyakit ini adalah dengan beberapa cara:
  1. Menambahkan tanda petik. Jika pada halaman muncul error maka ada kemungkinan potensi bahaya itu ada.
  2. Menambahkan logika 1=1 dan 1=0. Jika dengan 1=1 berita masih muncul tapi 1=0 tidak muncul maka potensi itu ada
  3. Mencoba form login dengan memasukkan admin’ or ”=’pada kolom user dan password. Apakah anda dapat masuk ke halaman admin
  4. Memanfaatkan pentester software, seperti SQLMap, Hexjector ataupun Havij dan lain sebagainya.

Penanggulangan

Beberapa cara pengurang resiko bug ini adalah:
  1. Melakukan filtering parameter yang perlu dimasukkan sebagai proses SQL
  2. Melakukan penutupan error dan pembatasan jumlah karakter parameter/post
  3. Menggunakan user database dan password yang bukan root, dan beda aplikasi web seharusnya berbeda pula user dan grant nya
  4. Menata permission struktur direktori secara benar sehingga web tetap bisa melakukan penulisan, juga mysql tidak dapat menulis ke dalam file.
  5. Penggunaaan mod_rewrite apache untuk me-rewrite URL sehingga selain SEO Friendly juga aman.
  6. Melakukan sanitasi file upload dengan benar. Jika hanya dibutuhkan file gambar, maka hanya bertipe gambar saja yang boleh masuk.
  7. Penggunaan program semacam antivirus seperti clamav dan lain sebagainya.
  8. Penutupan database information_schema.
  9. Untuk penggunaan CMS, rajin update juga menjadi faktor penting. Namun kadang pluggins merupakan faktor yang sering membawa bug.
  10. Memanfaatkan log error dan access secara benar. Pengecekan apakah terjadi injection dapat dimulai dari sini.
dan lain sebagainya.

Contoh Script Filter Parameter sederhana:

function filter_param($text,$html=true){
$e_s=array('\\','\'','"');
$d_s=array('','','');
$text = preg_replace( "'<script[^>]*>.*?</script>'si", '', $text );
$text = preg_replace( '/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is', '\2 
(\1)', $text );
$text = preg_replace( '/<!--.+?-->/', '', $text );
$text = preg_replace( '/{.+?}/', '', $text );
$text = preg_replace( '/&nbsp;/', ' ', $text );
$text = preg_replace( '/&amp;/', '', $text );
$text = str_replace( $e_s, $d_s, $text );
$text = strip_tags( $text );
$text = preg_replace("/\r\n\r\n\r\n+/", " ", $text);
$text = $html ? htmlspecialchars( $text ) : $text;
return $text;

}
$id = filter_param($_GET['id']);
$username = filter_param($_POST['username']);
$password = filter_param($_POST['password']);

SQL Injection dapat terjadi pada semua jenis database. Oracle, SQLServer, Access dan lain-lain. Pada windows, SQL Server juga memiliki fungsi executable yang cukup berbahaya.

Semoga berguna.

Read more

Ebook PHP : 54 Ebook PHP gratis Langsung Download


Ebook PHP gratis Langsung Download

Salam Hangat buat teman-teman semua, kali ini saya ingin berbagi Ebook gratis tentang pelajaran PHP. Sebenarnya Ebook yang saya bagi ini bukan ebook milik saya, namun ini hasil dari searching di om google kita yang tercinta. hehehe,, tapi apa salahnya saya bagi-bagi buat anda semua. toh tujuannya baik kok.

Berikut ebooknya, langsung download aja :

  1. Script Cara Untuk Memproses Input Data Form Secara Dinamis
  2. Belajar Batching pada PHP
  3. Cara Mengetahui Penyebab Erorr pada PHP dan Cara Mengatasinya
  4. Membuat Tombol Submit lebih dari satu dalam satu Form
  5. Cara Mengedit File CSS Berbasis File Teks dengan menggunakan PHP
  6. Cara Editing Data Tanggal lewat Form pada PHP
  7. Cara Membuat Halaman Advanced dengan menggunakan PHP
  8. Cara Membuat Kotak Pencarian Multi Kategori dengan PHP
  9. Cara Membuat Login Multi User dengan PHP
  10. Mengatasi Masalah Penggunaan Function Date pada PHP
  11. Cara Membuat Autentifikasi User dengan PHP 
  12. Cara Membuat Auto Delete atau hapus otomatis dengan PHP
  13. Cara Membuat Checkbox Cantik dan Pemrosesannya dengan PHP
  14. Cara Membuat Nomor Halaman Di Wordpress
  15. Cara Membuat Nomor Urut Hasil Query di PHP 
  16. Cara Membuat Sendiri Code PHP Untuk Backup Database MySQL 
  17. Cara Memproses Input Komponen Check-Box di PHP 
  18. Cara Mengetahui Kualitas Code PHP Berdasarkan Waktu Eksekusi 
  19. Rahasia Penggunaan Cookies di Bisnis Online Part-1
  20. Rahasia Penggunaan Cookies di Bisnis Online Part-2
  21. Memproses Form dengan Komponen Combo Box dengan PHP
  22. Cara Menggunakan Function ereg( ) untuk Pattern Matching pada PHP
  23. Script MySQL untuk Menampilkan Data dari Beberapa Tabel Sekaligus
  24. Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging 
  25. Membuat Arsip Artikel Berdasarkan Bulan dan Tahun dengan PHP
  26. Edit Data dengan Komponen RadioButton pada Form menggunakan Script PHP 
  27. Membuat Report Format MS dengan PHP
  28. Cara Mencegah Submit Form agar tidak berulang kali dengan PHP
  29. Cara Mengedit data Lewat Form dengan PHP 
  30. Cara Menghapus Data Lewat Panel di Tabel dengan PHP
  31. Membuat Update Password Administrator degan PHP
  32. Teknik Debugging Script PHP + MySQL 
  33. Teknik Scripting Mencegah SQL Injection di PHP 
  34. Teknik Submit Data Melalui Multi Form 
  35. Tentang Letak Script Pengolah Form 
  36. Tips Membuat Script PHP Pengolah Password dengan MD5  
  37. Tips Optimisasi Script PHP 
  38. Import Excel To Database Menggunakan PHP Dengan Filtering Data Besyarat 
  39. Membuat Kalkulator dengan Metode PHP OOP 
  40. Upload Gambar Menggunakan Ajax 
  41. Pencarian Berdasarkan Field CakePHP 
  42. Source Code Fibonansi PHP 
  43. Implementasi PHP + MySQL DB Server 
  44. Operasi Lengkap CRUD Codeigniter 
  45. Pencarian 2 Periode (Awal - Akhir) Dengan DatePicker JQuery 
  46. Select Combo Box With JQuery  
  47. Sub Menu Keren JQuery 
  48. PHP Pencarian Berdasarkan Field  
  49. Menampilkan Berita Terakhir Per Kategori
  50. Component Upload CakePHP (Resize) 
  51. Membuat Upload Dan Force Download (Security & Non Security) 
  52. Membuat Rekap Penjualan dengan PHP
  53. Membuat Coret Harga (Studi Kasus: Diskon)
  54. 9 Ebook Tutorial Membuat Website 
 Jika saya menemukan ebook gratis yang baru dan berkualitas lagi ,, akan saya tambahkan disini dan jangan lupa koment dan sharenya ya sobat.Terimakasih
Read more

Tips PHP : Membuat Password Generator dengan PHP

Pernahkah anda mendengar password generator ?? atau semacam itu ?? atau anda sudah pernah mengunakannya ??. Mungkin jawaban anda-anda semua pasti berbeda-beda. Sedikit penjelasan tentang Password generator adalah password yang dibangkitkan atau dihasilkan secara acak. Aplikasi ini masih sangat sederhana, semoga hal ini bisa membuat anda semakin semangat untuk mengembangkannya menjadi lebih kompleks.

1. Buat sebuah halaman PHP dengan nama "Nama.php" , lalu copy-pastekan script dibawah ini kedalamnya.

<html>
<head>
<title>Password Generator</title>
</head>
<body>
<h1>Password Generator</h1>
<form action="pass_gen.php" method="post">
Nama : <input type="text" name="nama" size="13">
<input type="submit" value="Generator Password">
</form>
</body>
</html>

2. Buat lagi sebuah halaman php dengan nama "Pass_gen.php" , lalu copy-pastekan seluruh script dibawah ini kedalamnya.

<?php
$angka=range(0,9);
suffle($angka);
$ambilangka=array_rand($angka,6);
$angkastring-implode("-",$ambilangka);
$pass=$angkastring;
echo ("Selamat, <b>$nama</b>");
echo "<br>"
echo "password anda adalah : $pass";
?>

Jika sudah, coba anda jalankan dibrowser anda masing-masing, dalam kasus inii saya bersumsi bahwa anda semua sudah tahu persis cara menjalankan script php pada browser, Jika sudah akan terlihat seperti gambar dibawah ini.

password generator

Jika anda sudah berhasil menjalankan script php tersebut, dan sudah tampil dibrowser anda seperti gambar diatas, lalu coba untuk menginput nama dengan sesuka anda , lalu klik tombol " Generate Password ", jika sudah , akan tampil seperti gambar dibawah ini.

hasil generator

Sekian bahan latihan kita hari ini, harapan saya anda dapat mengembangkan ini menjadi lebih sempurna dan lebih akurat serta dapat menambah wawasan anda sekalian. Terimakasih atas perhatiaanya.
Read more

10/21/12

Tutorial PHP : Cara Menampilkan Grafik Pie dengan PHP dan MySQL

Grafik Pie PHP

Halo sahabat Belajar Pintar PHP sekalian, sebelumnya saya mengucapkan terimakasih atas kesetiannya terhadap blog saya ini yaitu belajar pintar php. Kali ini saya akan share sedikit ilmu tentang cara membuat grafik pada aplikasi php. Oke langsung saja ke TKP .. !!!!
Ini tips kepada anda bagaimana menampilkan Grafik dalam bentuk Pie menggunakan PHP dan MySQL. Silahkan anda membuat database nya menggunakan tabel dibawah, atau anda dapat memodifikasi sesuai kebutuhan.

CREATE TABLE `tabelpengunjung` (
`nomor` int(5) NOT NULL auto_increment,
`nama` varchar(50) NOT NULL,
`tanggal` date NOT NULL,
PRIMARY KEY  (`nomor`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
INSERT INTO `tabelpengunjung` (`nomor`, `nama`, `tanggal`) VALUES
(1, ‘Ivan’, ’2010-05-04′),
(2, ‘Nita’, ’2010-05-11′),
(3, ‘Lily’, ’2010-05-18′),
(4, ‘Viekka’, ’2010-06-15′),
(5, ‘Dinda’, ’2010-07-13′),
(6, ‘Putrie’, ’2010-07-06′),
(7, ‘Joko’, ’2010-08-11′),
(8, ‘Jaka’, ’2010-08-17′);

Selanjutnya buat halaman php dengan nama "pie.php" , lalu copy-pastekan script dibawah ini kedalamnya.


<?php
mysql_connect("localhost","root","");
mysql_select_db("test");
$data = "";
$label = "";
$query = mysql_query(“select count(*) as jumlah, monthname(tanggal) as bulan
from tabelpengunjung group by monthname(tanggal)”);
while($q=mysql_fetch_array($query)){
$data = $data.$q['jumlah'].”*”;
$label = $label.$q['bulan'].”*”;
}
$data = substr($data,0,-1);
$label = substr($label,0,-1);
$show_label = true;
$show_percent = true;
$show_text = true;
$show_parts = false;
$label_form = ‘square’;
$width = 199;
$background_color = ‘FFFFFF’;
$text_color = ’000000′;
$colors = array(’003366′, ‘CCD6E0′, ’7F99B2′,’F7EFC6′, ‘C6BE8C’, ‘CC6600′,’990000′,’520000′,’BFBFC1′,’808080′);
$shadow_height = 16;
$shadow_dark = true;
$height = $width/2;
$data = explode(‘*’,$data);
if ($label != ”) $label = explode(‘*’,$label);
for ($i = 0; $i < count($label); $i++)
{
if ($data[$i]/array_sum($data) < 0.1) $number[$i] = ‘ ‘.number_format(($data[$i]/array_sum($data))*100,1,’,',’.').’%';
else $number[$i] = number_format(($data[$i]/array_sum($data))*100,1,’,',’.').’%';
if (strlen($label[$i]) > $text_length) $text_length = strlen($label[$i]);
}
if (is_array($label))
{
$antal_label = count($label);
$xtra = (5+15*$antal_label)-($height+ceil($shadow_height));
if ($xtra > 0) $xtra_height = (5+15*$antal_label)-($height+ceil($shadow_height));
$xtra_width = 5;
if ($show_label) $xtra_width += 20;
if ($show_percent) $xtra_width += 45;
if ($show_text) $xtra_width += $text_length*8;
if ($show_parts) $xtra_width += 35;
}
$img = ImageCreateTrueColor($width+$xtra_width, $height+ceil($shadow_height)+$xtra_height);\
ImageFill($img, 0, 0, colorHex($img, $background_color));
foreach ($colors as $colorkode)
{
$fill_color[] = colorHex($img, $colorkode);
$shadow_color[] = colorHexshadow($img, $colorkode, $shadow_dark);
}
$label_place = 5;
if (is_array($label))
{
for ($i = 0; $i < count($label); $i++)
{
if ($label_form == ’round’ && $show_label)
{
imagefilledellipse($img,$width+11,$label_place+5,10,10,colorHex($img, $colors[$i % count($colors)]));
imageellipse($img,$width+11,$label_place+5,10,10,colorHex($img, $text_color));
}
else if ($label_form == ‘square’ && $show_label)
{
imagefilledrectangle($img,$width+6,$label_place,$width+16,$label_place+10,colorHex($img, $colors[$i % count($colors)]));
imagerectangle($img,$width+6,$label_place,$width+16,$label_place+10,colorHex($img, $text_color));
}
if ($show_percent) $label_output = $number[$i].’ ‘;
if ($show_text) $label_output = $label_output.$label[$i].’ ‘;
if ($show_parts) $label_output = $label_output.$data[$i];
imagestring($img,’2′,$width+20,$label_place,$label_output,colorHex($img, $text_color));
$label_output = ”;
$label_place = $label_place + 15;
}
}
$centerX = round($width/2);
$centerY = round($height/2);
$diameterX = $width-4;
$diameterY = $height-4;
$data_sum = array_sum($data);
$start = 270;
for ($i = 0; $i < count($data); $i++)
{
$value += $data[$i];
$end = ceil(($value/$data_sum)*360) + 270;
$slice[] = array($start, $end, $shadow_color[$value_counter % count($shadow_color)], $fill_color[$value_counter % count($fill_color)]);
$start = $end;
$value_counter++;
}
for ($i=$centerY+$shadow_height; $i>$centerY; $i–)
{
for ($j = 0; $j < count($slice); $j++)
{
if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $i, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][2], IMG_ARC_PIE);
}
}
for ($j = 0; $j < count($slice); $j++)
{
if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $centerY, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][3], IMG_ARC_PIE);
}
OutputImage($img);
ImageDestroy($img);
function colorHex($img, $HexColorString)
{
$R = hexdec(substr($HexColorString, 0, 2));
$G = hexdec(substr($HexColorString, 2, 2));
$B = hexdec(substr($HexColorString, 4, 2));
return ImageColorAllocate($img, $R, $G, $B);
}
function colorHexshadow($img, $HexColorString, $mork)
{
$R = hexdec(substr($HexColorString, 0, 2));
$G = hexdec(substr($HexColorString, 2, 2));
$B = hexdec(substr($HexColorString, 4, 2));
if ($mork)
{
($R > 99) ? $R -= 100 : $R = 0;
($G > 99) ? $G -= 100 : $G = 0;
($B > 99) ? $B -= 100 : $B = 0;
}
else
{
($R < 220) ? $R += 35 : $R = 255;
($G < 220) ? $G += 35 : $G = 255;
($B < 220) ? $B += 35 : $B = 255;
}
return ImageColorAllocate($img, $R, $G, $B);
}
function OutputImage($img)
{
header(‘Content-type: image/jpg’);
ImageJPEG($img,NULL,100);
}
?>

Oke,  scipt diatas digunakan utuk membuat grafik pie.
kemudian kita akan membuat halaman yang berfungsi untuk menampilkan grafik pie tersebut didalam file lain dengan cara, buat sebuah halaman html dengan nama "tampilkangrafik.html". lalu copy-pastekan script dibawah ini kedalamnya.

<img src=pie.php>

Jika sudah, sekarang silahkan jalankan script tersebut di webserver kesayangan anda.
(yang dijalankan adalah halaman "tampilkangrafik.html".

Selamat Mencoba.
Read more

10/13/12

Tips PHP : Cara Meningkatkan Keamanan Website Kita Dengan PHP

Terkadang kita sering lupa atau bahkan tidak memikirkan keamanan website yang kita buat. Keamanan PHP web Saat kita mulai membuat aplikasi berbasis web dengan menggunakan PHP tentu kita akan berfokus pada cara pembuatannya, bagaimana mengimplementasikan logika sehingga menghasilkan suatu karya sistem yang berjalan sesuai dengan keinginan dan kebutuhan kita.

Tapi ada kalanya kita perlu membalik pola pikir tersebut dengan memandang sebagai seorang user (pengguna aplikasi) yang mungkin memiliki waktu lebih banyak dalam penggunaan aplikasi tersebut. Dalam hal ini banyak hal yang mungkin tidak kita perhatikan dari aplikasi buatan kita tersebut oleh karena itu ada pepatah “Tidak ada sistem yang sempurna.” tetapi penulis akan memberikan sedikit informasi keamanan dasar sehingga kita bisa sedikit melangkah menuju kesempurnaan tersebut.

Beberapa hal yang perlu diperhatikan dalam langkah percobaan para cracker untuk memboikot akses website kita antara lain :

1. Melalui URL (method GET)
2. Melalui media input yang terdapat dalam form (method POST)

Seperti yang kita bahas sebelumnya  bahwa terdapat 2 cara umum pengiriman variable dalam PHP yaitu GET dan POST sehingga perlu penanganan khusus dalam penerimaan serta pengiriman variable tersebut.

Untuk method POST :
Method POST ini sering dugunakan untuk menangkap variable dari media input yang terdapat dalam FORM.

Nah, dengan bahan pertimbangan yang diatas maka ada beberapa tips agar web kita sedikit aman dari serangan cracker, Apa ?? sedikit aman ?? tentu anda bertanya demikian, kenapa saya mengatakan demikian, karena seperti yang saya katakan  tadi bahwa tidak ada sistem yang sempurna. Jadi yang saya berikan dibawah ini akan sangat membantu web anda untuk mendekati sistem yang sempurna.

1. Batasi jumlah karakter (maxlength)

Pembatasan jumlah karakter dalam media input sangat penting sehingga tidak dimungkinkan penulisan script seperti javascript pada inputbox tersebut.

Contoh implementasi : <input name=”_cari” maxlength=”10? />

Titik rawan : Input Login (username dan password), Input search

2. Lapisi dengan penahan kutip atau addslashes()

Fungsi PHP ini akan membantu kita menambahkan tanda kutip (‘) pada setiap karakter garing (/) sehingga dapat mencegah timbulnya efek SQL injection. Saya rasa teknik hacking ini cukup populer diantara anda. Penambahan kutip akan membuat garing menjadi bertipe string sehingga tidak dianggap sebagai salah satu perintah query pada MySQL / SQL.

Contoh implementasi : addslashes($_POST['_username'])

Titik rawan : Form Login

3. Lapisi dengan penahan tag atau htmlspecialchars()

Untuk mencegah terjadinya teknik hacking xss atau javascript injection maka ada baiknya kita menambahkan fungsi tersebut. Hal ini akan membuat tag html maupun javascript memiliki tipe data string sehingga tidak akan dieksekusi oleh browser.
Apabila script dimungkinkan dalam media input sehingga masuk ke dalam database dan saat browser membuka halaman yang terkontaminasi tersebut maka browser akan melakukan eksekusi terhadap perintah tersebut yang biasanya dalam bentuk javascript.

Contoh implementasi : htmlspecialchars($_POST['pesan'])

Titik rawan : Form Login, Form Kontak Admin

4. Perhatikan nama media input Web anda

Sudah saatnya kita berusaha sedikit lebih unik dalam menentukan nama pada media input kita sehingga mempersulit beberapa tools penjahat yang menggunakan library (kamus kata) dalam penentuan nama variable incarannya. Misalnya pada media input login tambahkan garis bawah. Tentu anda memiliki ide sendiri dalam mengimplementasikan hal ini.

Contoh implementasi : <input name=”_username” />

Titik rawan : Input Login (username dan password)

Untuk method GET :

Method get merupakan penangkapan variable yang berasal dari URL.

1. Gunakan .htaccess

Sebenarnya ini adalah sebuah metode yang menjadikan website kita seakan memiliki struktur direktori yang luas, padahal itu adalah variable. Sehingga memecah konsentrasi dari pengunjung yang berniat isenk. Bila halaman tidak ditemukan maka kita dapat meredirectnya ke halaman 404 kesayangan kita.

Implementasi :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L]
</IfModule>

RewriteEngine on
RewriteCond %{HTTP_HOST} ^mydomain.com$ [NC]
RewriteRule ^(.*) http://www.mydomain.com/$1 [L,R=301]


2. Hindari $_REQUEST()

Metode ini digunakan untuk menangkap variable dalam bentuk POST dan GET. Ada kalanya kita membutuhkan metode penerimaan variable dengan menggunakan fungsi ini, tetapi batasilah penggunaannya karena tanpa disadari suatu saat anda akan mendapatkan masalah karena hal ini. Dan bila kita telah terlanjur menggunakannya pada seluruh aplikasi kita maka kita akan sulit untuk merubah (Bisa, dengan memilah mana yang tidak perlu dan benar-benar menggunakan.).

Tambahan :

1. Session dan Cookies timeout

Gunakan timeout pada session atau cookies terutama untuk pengenalan login. Session merupakan penanda dari sisi server dan akan hilang apabila browser ditutup, sedangkan cookies adalah pengenalan dari sisi browser dan bila tidak diset timeout maka status akan terus login (pada pengenalan login.), tentu saja anda tau kemungkinan-kemungkinan yang akan terjadi selanjutnya.

Selamat menerapkannya pada website atau blog kita masing-masing.
Read more

5 Framework PHP Terkenal Di dunia

Sebelumnya anda sudah paham ? apa itu framework php ? buat yang belum tau saya akan memberikan sedikit gambaran atau penjelasan tentang framework php. Oke ,, Framework php bukanlah suatu aplikasi bahasa pemrograman yang baru, tetapi ini adalah suatu metode dalam pembuatan website, sifatnya hampir sama dengan prinsip OOP PHP, tetapi disini, anda diberikan kemudahan serta anda tidak perlu lagi mengetik kode php dari nol. karena disini telah disediakan seperti configurasi Database, font website, chace, user agent dan masih banyak lagi.

PHP Framework yang baik akan meningkatkan keamanan web, membuat website dengan lebih mudah untuk mengurangi waktu yang diperlukan untuk membangun website dan aplikasi web. Tapi pertanyaan terbesar pada saat ini dari sekian banyak pengembang web (baca: developer web) adalah PHP Framework apakah yang terbaik?

Berikut Adalah 5 PHP Framework yang paling populer di dunia sekarang ini Revisi tahun 2012 .


1. Yii Framework

Secara statistik, saat ini Yii Framework adalah framework terbaik di kalangan para developer web. Ini adalah generasi framework PHP berikutnya. Faktor utama yang membuat Yii di posisi teratas adalah fitur yang dimiliiknya dan lebih cepat dari Codeigniter Framework dan Zend Framework. Dari saat menginstal Yii, Anda telah mendapatkan website yang sempurna dan mengesankan yang semuanya berjalan secara otomatis. Yii juga dilengkapi dengan berbagai fitur untuk tugas umum seperti CRUD (creating, reading, updating and deleting atau menciptakan, membaca, memperbarui dan menghapus).

URL: http://www.yiiframework.com/
Dokumentasi: http://www.yiiframework.com/doc/
Download: http://www.yiiframework.com/download/

2. Codeigniter Framework

Saat ini, Codeigniter juga merupakan pilihan yang baik untuk para pengembang php. Codeigniter relatif mudah dipelajari. Fitur bersahabat, Codeigniter adalah framework kerja yang kuat seperti Zend dan Cake. Tujuan utama adalah untuk memungkinkan Anda mengembangkan proyek-proyek lebih cepat dari yang Anda bisa, dengan menyediakan satu set perpustakaan (library) untuk tugas yang sering dikerjakan, serta antarmuka yang sederhana dan struktur logis untuk mengakses perpustakaan. CodeIgniter memungkinkan Anda kreatif dan fokus pada proyek Anda dengan meminimalkan jumlah kode yang dibutuhkan untuk tugas yang diberikan.

URL: http://www.codeigniter.com/
Dokumentasi: http://codeigniter.com/user_guide/
Download: http://codeigniter.com/downloads/

3. Zend Framework

Zend adalah PHP Framework kuat yang lebih aman, dapat diandalkan dan memungkinkan Anda untuk membangun aplikasi Web 2.0 & layanan web lainnya. Framework ini awalnya dibangun oleh PHP. Zend diperkaya dengan API dari vendor terkemuka seperti Google, Amazon, Yahoo, Flickr, dll yang membuatnya pilihan bagi bisnis besar.

Sebenarnya Zend memiliki kelebihan yang cukup banyak dan bisa dikatakan sebagai PHP Framework yang baik. Zend kuat, cepat dan terukur. Permintaan untuk para pengembang Zend (Zend developer) sangat besar dan Anda bisa mengetahui bahwa menggunakan Zend adalah seperti memiliki jaminan bahwa Anda tidak akan pernah kehilangan pekerjaan.

URL: http://framework.zend.com/
Dokumentasi: http://framework.zend.com/docs/
Download: http://framework.zend.com/download/

4. CakePHP Framework

CakePHP adalah framework populer untuk pengembangan aplikasi web. Sederhana untuk belajar yang menyediakan struktur dasar organisasi, menjaga seluruh aplikasi Anda konsisten dan logis. Ia bisa menangani setiap aspek, dari permintaan awal pengguna sampai ke rendering akhir dari suatu halaman web. Dan karena CakePHP Framework mengikuti prinsip MVC, yang memungkinkan Anda untuk dengan mudah menyesuaikan dan memperpanjang sebagian besar aspek aplikasi Anda.

URL: http://www.cakephp.org
Dokumentasi: http://book.cakephp.org/2.0/en/index.html
Download: https://github.com/cakephp/cakephp/archives/2.1

5. Symfony Framework

Symfony adalah framework php lengkap yang dirancang untuk mengoptimalkan pengembangan aplikasi web. Untuk pemula, ini dapat memisahkan aturan aplikasi web bisnis, logika server, dan tampilan presentasi. Symfony memiliki banyak alat (tools) dan class yang ditujukan untuk memperpendek waktu pengembangan sebuah aplikasi web yang kompleks.

Symfony seluruhnya ditulis dalam PHP. Telah diuji secara menyeluruh di berbagai dunia nyata, dan sebenarnya digunakan untuk permintaan tinggi website e-business. Hal ini kompatibel dengan sebagian besar mesin database yang tersedia, termasuk MySQL, PostgreSQL, Oracle, dan Microsoft SQL Server. Symfony berjalan pada platform Unix dan Windows.

URL: http://www.symfony-project.com/
Dokumentasi: http://www.symfony-project.org/doc/1_4/
Download: http://symfony.com/download#legacy


Sekarang anda tinggal memilih, mana yang paling mudah dan bagus menurut anda, tetapi disini saya sedikit memberikan saran agar anda lebih memperdalam framework CodeIgniter, karena banyak kemudahan yang diberikan. Dan perlu anda ketahui bahwa Pembuat PHP sendiri lebih menyukai framework yang satu ini.

Sekian dulu ya bapak ibu semua ,, saya mau makan malam dulu,, lapar ini ,, hehehe.
Read more

Tutorial PHP : Perbedaan Class OOP PHP dengan Fungsi PHP

Dalam tutorial OOP PHP sebelumnya, kita sudah belajar sedikit tentang prinsip OOP. Namun sebelum kita membahas lebih lanjut kelima istilah tersebut, kita akan mempelajari dulu konsep OOP alias Object Oriented Programming. Konsep ini tentu saja berlaku umum baik untuk PHP maupun pemrograman lain yang mendukung OOP seperti Java.

Catatan Penting : Sebenarnya OOP adalah cara berpikir dalam membuat program.

Sebenarnya dalam banyak hal, program kita tidak akan berbeda jauh dengan metode terstruktur yang mungkin selama ini kita kenal. Namun yang penting adalah cara berpikirnya. Ingat kata kunci ini: Berpikir secara obyek. Gampangnya kalau kita membuat sebuah program, maka kita akan membuat berbagai class yang akan sering kita gunakan dan class itu akan kita buat menjadi  obyek itu bisa kita kembangkan lagi nantinya.

Untuk menjelaskannya, biasanya berbagai buku atau tutorial akan menggunakan contoh obyek seperti kucing, rumah atau mobil. Karena penjelasan itu memang menggambarkan proses pembuatan program berbasis OOP yang mirip cara berpikir kita sehari-hari. Kalo ndak percaya, coba aja beli buku OOP atau baca tutorial OOP.

Namun saya pernah merasakan sendiri bahwa penjelasan langsung dengan contoh riil di dunia nyata tersebut menjadi contoh abstrak di dunia pemrograman. Lha iya kan, masak kita akan membikin kucing atau rumah atau mobil dengan PHP? Makanya saya coba njelasinnya sedikit berbeda. Saya akan mulai bukan dari contoh riil yang malah jadi abstrak tadi, tetapi dari membandingkan beberapa cara berpikir dalam membuat program. Selanjutnya baru kita lihat proses berpikir OOP dengan membandingkannya ke kehidupan sehari-hari tadi.

Mudah-mudahan bisa lebih clear.

Ok, untuk mempermudah membayangkan perbedaan cara membuat program biasa dan OOP, saya akan sampaikan beberapa perbandingan antara cara berpikir dalam pemrograman.

Langsung saja ke TKP :

Pada dasarnya umumnya kita akan membuat program tanpa fungsi. Misalnya kita akan membuat sebuah program kalkulator. Dalam contoh ini kita akan fokus dalam pembuatan  tampilannya.

Mari kita bayangkan sebuah kalkulator. Oke ?!! Nah, kita pasti perlu membuat tampilan depannya yang mirip kalkulator kan? Di mana ada beberapa tombol angka dan operasi matematikanya  serta layar yang akan menampilkan apapun yang kita pencet di tombol itu dll. Nah, dalam pembuatan program kalkulator tersebut, kita akan membuat sebuah program panjang yang menuliskan semua kode untuk membuat tampilan. Mulai dari kotak luarnya, diteruskan layarnya, tombol 1, tombol 2, tombol 3, dst, serta tombol operator -, +, x dan : serta sebuah tombol = yang Anda buat lebih besar dari yang lain karena sering dipakai.
Nah, setelah Anda agak canggih dalam membuat program, Anda pasti tahu bahwa pembuatan tombol itu adalah proses berulang yang sebenarnya bisa kita buatkan fungsi dengan variabel input tulisan yang akan ditampilkan. (Ingat contoh ini sangat disederhanakan lho, jadi jangan protes). Maka kita akan membuat fungsi tombol tersebut. Di sini kita akan membuat 2 jenis fungsi yaitu tombol kecil dan tombol besar (tombol besar tentu saja buat si “sama dengan” tadi itu).

Kemudian, setelah belajar OOP, maka kamu akan membuat sebuah sebuah class yang bernama tombol. Class ini sudah kita desain agar dapat kita bikin obyek tombol berbagai ukuran, warna, tulisan yang menyertainya dan event yang terjadi kalau kita pencet tuh tombol.  Dengan OOP, maka class kita tadi akan memiliki sifat-sifat pemrograman OOP yang tentu saja akan membantu kita untuk membuat program berbasis PHP.

Penjelasan mengenai perbedaan  antara class dengan fungsi secara sederhana adalah pada sifat-sifat OOP yang sudah pernah kita sebutkan dalam tutorial OOP sebelumnya.

Dengan adanya sifat-sifat itu, maka pembuatan program akan jauh lebih mudah. Contohnya, kalau kamu membuat program dan memerlukan fungsi tertentu, maka kamu bisa membuat sendiri fungsi kamu atau akan lebih mudah dengan mencari di Internet. Setelah kamu  download, maka kamu akan perlu mempelajari fungsi itu dan cara penggunaannya serta bila perlu memodidikasi core programnya. Ini berbeda dengan class pada OOP. Dengan class, kita cuman butuh tahu sifatnya aja.
Penjelasan mengenai class ini akan membawa kita pada penjelasan yang menggunakan obyek sehari-hari.

Ok, mudah-mudahan penjelasan dengan membandingkan ini bisa membantu kamu buat sedikit memahami OOP. Thanks.
Read more

Tips PHP : Mencari atau Cara Mengetahui Negara Berdasarkan IP Dengan PHP

Hai para sahabat Planetsphp.blogspot.com ,, kali ini saya akan berbagi sedikit tips php dimana tips ini sering dipakai untuk mengetahui dari negara mana aja sih yang pernah mengunjungi blog atau website kita ,, ??!!.

Sebagai contoh seperti pada blog saya ini , pada bagian widget traffick live, anda dapat melihat secara jelas bahwa disana dicantumkan kota asal , negara dari pengunjung blog saya ini. Nah, sekarang pasti ada muncul pertanyaan dalam benak sahabat sekalian, bagaimana ya caranya ? Bagi yang penasaran, langsung saja kita lihat sama-sama scriptnya.

Untuk mengetahui negara asal IP address pengunjung website, kita bisa menggunakan beberapa metode dalam PHP. Yang paling mudah adalah menggunakan versi pure PHP. Kamu harus download dulu geoip free country file dan mengekstrak di direktori tertentu di website kamu. Jika sudah, berikut adalah contoh kodenya, untuk melihat penjelasan detil, silakan ke website ini :


<?php
// include functions
include("geoip.inc");
// read GeoIP database
$handle = geoip_open("GeoIP.dat", GEOIP_STANDARD);
// map IP to country
echo "IP address 62.149.130.132 located in " . geoip_country_name_by_addr($handle, "62.149.130.132") . " (country code " . geoip_country_code_by_addr($handle, "62.149.130.132") . ")";
// close database handler
geoip_close($handle);
// print compulsory license notice
echo "<p> -- This product includes GeoIP data created by MaxMind, available from http://maxmind.com/ --";
?>

selamat mencoba, bagi anda yang menemukan atau mengalami kesulitan, bisa meninggalkan komentar dibawah ini.
Terimakasih...!!
Read more

10/12/12

Script PHP (User Agent) : Mengetahui atau Mendeteksi Merk HP yang Digunakan oleh Pengunjung Website Kita dengan PHP


Free SMS
Pada dasarnya setiap blog sudah dilengkapi dengan fasilitas blog versi mobile. seperti Blog saya ini telah dilengkapi dengan tampilan mobile friendly bagi pengunjung setia yang sering mengakses via handphone. Secara otomatis blog ini akan mengarahkan (redirecting) tampilan ke mode mobile friendly bila sedang diakses via handphone. Bila Anda perhatikan, tampilan blog dalam mode mobile friendly ini lebih sederhana dibandingkan tampilan sebenarnya. Anda bisa lihat seperti apa tampilan blog ini via handphone. Dengan mode mobile friendly ini, file size yang diakses via handphone akan lebih kecil sehingga pulsa yang diperlukan untuk akses internet juga sedikit. Konsep yang sama juga diterapkan oleh Detik.com.
Contoh lain, pernahkah Anda mengunjungi situs waptrik.com? Situs tersebut menyediakan free software aplikasi handphone Anda. Apabila Anda mencoba mengunjungi situs tersebut via browser di komputer Anda, maka situs tersebut tidak bisa diakses. Mengapa? karena situs tersebut hanya bisa diakses oleh handphone saja. Hebatnya lagi.. begitu Anda akses situs tersebut dengan handphone, maka secara otomatis akan muncul list software-software yang kompatible terhadap handphone Anda. Sebagai contoh misalkan Anda menggunakan Nokia, maka akan muncul list software yang support dengan Nokia, dst.
Nah.. yang menjadi pertanyaan, bagaimana cara mendeteksi bahwa seorang pengunjung situs kita atau secara umum pengakses script yang kita taruh ke dalam server hosting itu menggunakan handphone atau tidak? atau kalau perlu kita bisa mendeteksi merek handphone yang sedang digunakan visitor. Konsep ini nantinya kita gunakan untuk membuat konten mobile. Pertanyaan tersebut dapat terjawab dengan membaca user agent dari visitor.

Apa itu user agent? user agent adalah suatu aplikasi di sisi client (pengakses) yang secara otomatis mengirim informasi berupa string kepada server pada layanan web. String informasi ini bisa berisi OS yang digunakan, software vendor browsernya, versi software dll.
Salah satu bentuk string informasi user agent adalah sbb:


1.Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8

Dari string di atas tampak informasi bahwa terdapat client yang sedang mengakses menggunakan OS Windows, dan menggunakan Firefox sebagai browsernya, serta versinya yaitu 3.5.8.
Nah… lantas bagaimana bentuk string user agent yang berasal dari handphone? ini dia contohnya untuk Nokia N90

1.NokiaN90-1/5.0607.7.3 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1

Anda bisa lihat bentuk-bentuk user agent untuk jenis handphone yang lain di Wikipedia.
Dari keterangan di atas tampak bahwa untuk handphone, di dalam user agent nya terdapat informasi jenis handphone serta serinya. Dengan demikian kita tinggal olah user agent tersebut untuk membangun konten mobile seperti yang diharapkan.
OK.. sekarang bagaimana cara membaca user agent dengan PHP? Caranya sangat mudah, yaitu dengan menggunakan perintah $_SERVER['HTTP_USER_AGENT']
Berikut ini contoh script PHP untuk mendeteksi merek handphone apa yang sedang digunakan user untuk mengakses script.

01.<?php
02. 
03.$listMerk = array('Nokia', 'iPhone', 'iPod', 'BlackBerry', 'HTC', 'LG', 'Nokia', 'Samsung', 'SonyEricsson');
04. 
05.$agent = $_SERVER['HTTP_USER_AGENT'];
06. 
07.foreach ($listMerk as $merk)
08.{
09.$count = substr_count($agent, $merk);
10.if ($count > 0) $merkDigunakan = $merk;
11.}
12. 
13.echo "Anda menggunakan HP berjenis ".$merkDigunakan;
14. 
15.?>


Konsep dari script di atas adalah, pertama kita list dulu merek handphone yang ada di pasaran. Di sini saya hanya mencontohkan beberapa jenis saja. Selanjutnya setelah itu kita baca user agent nya. Proses berikutnya adalah mengecek apakah user agent nya memuat string berisi merek handphone yang sudah kita list tadi? Di sini saya menggunakan function subtr_count() untuk menentukan ada tidaknya nama merek yang sudah kita list di dalam user agent nya. Function substr_count() berfungsi untuk menghitung jumlah subtring dalam suatu string. Untuk menentukan ada tidaknya suatu substring yang terdapat dalam string cukup dengan melihat jumlahnya. Jika jumlahnya lebih besar dari 0, maka berarti substring itu ada dalam string.
Kemudian.. ini ada contoh script lain yang otomatis mendirect ke halaman tertentu yang khusus menampilkan konten mobile jika diakses melalui aplikasi mobile, dan akan mendirect ke halaman tertentu yang khusus menampilkan konten aslinya (non mobile content) jika diakses lewat PC (selain aplikasi mobile).

01.<?php
02. 
03.$listMerk = array('Nokia', 'iPhone', 'iPod', 'BlackBerry', 'HTC', 'LG', 'Nokia', 'Samsung', 'SonyEricsson');
04. 
05.$agent = $_SERVER['HTTP_USER_AGENT'];
06. 
07.$cek = 0;
08.foreach ($listMerk as $merk)
09.{
10.$count = substr_count($agent, $merk);
11.if ($count > 0) $cek = 1;
12.}
13. 
14.if ($cek == 0) header("Location: http://situsanda/scriptkontenbiasa");
15.else if ($cek == 1) header("Location: http://situsanda/scriptkontenmobile");
16. 
17.?>
Ide dari script di atas adalah memberi nilai awal $cek = 0. Nilai 0 diartikan bahwa script diakses oleh aplikasi non mobile. Selanjutnya dilakukan proses pengecekan browser User Agent nya. Jika ternyata user agent terdapat dalam array, maka nilai $cek berubah menjadi 1 yang berarti bahwa script diakses oleh aplikasi mobile. Sedangkan jika user agent tidak terdapat dalam array, maka nilai $cek akan tetap 0 yang berarti bahwa script diakses oleh aplikasi non mobile. Untuk mendirect ke halaman tertentu, Anda bisa menggunakan function header("Location: http://...").
Untuk melihat tampilan dari script di atas, silakan upload ke server hosting lalu akses script tersebut via handphone Anda.

CATATAN:
Jangan Anda taruh di localhost  Oke .. !
 
OK.. selamat mencoba.
Read more
loading...