UP
    Latest News
Showing posts with label Tips PHP. Show all posts
Showing posts with label Tips PHP. Show all posts

Tutorial PHP : Cara Praktis Membuat Website Multi Bahasa dengan Widget Translate

Tutorial PHP : Cara Praktis Membuat Website Multi Bahasa dengan Widget Translate
membuat website multi bahasa
Hy para sahabat belajar pintar php ..!!! sehubungan dengan adanya pertanyaan dari pengunjung blog ini tentang Bagaimana cara membuat web multi language , maka saya akan berbagi ilmu tentang ini kepada sobat sekalian. Oke langsung saja ke TKP ...!!!

Terkadang kita ingin membuat fasilitas translater (penterjemah) agar content yang ada di dalam website kita seperti berita atau artikel bisa dibaca atau dimengerti oleh user yang berada di negara yang berbeda dengan bahasa yang berbeda pula seperti bahasa ingris, cina, korea, jepang, arab dll.
Solusi yang sering digunakan adalah dengan google translate. Namun kurang nyaman dilihat karena web kita pindah kehalaman google translate, benar bukan ??.

Ini Adalah Solusinya

Dengan menggunakan widget yang disediakan oleh situs http://translateth.is. Anda bisa menterjemahkan web anda tanpa pindah ke halaman google translate.

Berikut Cara Penggunaan Widget

Syarat menggunakan widget ini adalah anda sudah tersambung ke internet. karena cara kerja widget ini adalah tetap menggunakan jasa google translate namun bekerja di “belakang layar” hampir sama seperti fungsi ajax jquery pada php, jadi jika anda masih dalam tahap perancangan website atau bersifat localhost, cara ini tidak dapat bekerja.

Jika sudah tersambung, buat sebuah file HTML (index.html). untuk pengembangan selanjutnya anda bisa menyisipkan codingnya pada file PHP. codingnya adalah sebagai berikut :

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
<title>Web Multibahasa</title>
<script type=”text/javascript” src=”http://www.google.com/jsapi”></script>
<script type=”text/javascript” src=”http://x.translateth.is/translate-this.js”></script>
<script type=”text/javascript”>
TranslateThis();
</script>
</head>
<body>
<div id=”translate-this”><a href=”http://translateth.is/”>Translate</a></div>
Selamat Datang
</body>
</html>

batalkan proses penterjemahan, anda pilih dahulu salah satu bahasa. Maka dibagian atas akan ada sebuah link “Undo” untuk kembali ke bahasa asli web yang semula. klik link tersebut maka halaman web anda akan di terjemahkan ke bahasa semula.

membuat website multi bahasa

Sekian tutorialnya , semoga membantu, jika masih kurang paham, silahkan meninggalkan komentar dibawah ini. Terimakasih.

Tips PHP : Cara Membuat Nomor Halaman Web Tanpa Database

Tips PHP : Cara Membuat Nomor Halaman Web Tanpa Database
Halo sobat semua, dalam pembuatan website, nomor halaman atau paging website adalah hal yang sangat penting diperhatikan, karena selain hal tersebut memudahkan parapengunjung web kita, hal itu juga dapat menambah nilai keindahan website yang kita buat.

Sebagai pengguna teknologi Internet terutama website tentunya kita seringkali melihat tampilan seperti dibawah ini  :
nomor halaman website

Tampilan di atas biasa disebut dengan Halaman Bertingkat. Apakah paging itu? Paging merupakan teknik menampilkan data dengan cara membaginya ke beberapa halaman. Teknik ini diberikan untuk mengurangi scrolling window apabila data yang disajikan terlalu banyak, sehingga akan menimbulkan kejemuan orang yang melihat dan juga akan menghasilkan page load time yang besar karena ukuran filenya besar (apabila data disajikan dalam satu halaman saja).

Untuk keperluan navigasi data biasanya disajikan dengan link berupa nomor halaman atau kadang berbentuk Previous dan Next.

Pada kasus ini akan dipaparkan bagaimana membuat paging ini dilakukan.

1 2 3 4 5 ... 20 Next >>

Contoh tampilan di atas maksudnya terdapat 20 halaman paging dan halaman yang sedang aktif adalah halaman 1. Bila yang aktif halaman 10, maka tampilan navigasinya adalah:

<< Prev 1 … 7 8 9 10 11 12 13 ... 20 Next >>

Sedangkan bila yang aktif adalah halaman terakhir (20) maka tampilan navigasinya adalah

<< Prev 1 .. 17 18 19 20

Dalam contoh ini kasus paging ini akan diterapkan pada data guestbook atau buku tamu. Atau sering kita jumpai pada Search Engine seperti Google, Yahoo, dan sebagainya.

Berikut adalah script PHP Paging tanpa Database.

Langkah 1

Simpanlah dengan nama paging.php.

Langkah 2

Ketik script berikut ini:
<? function makeLink($str,$url,$bold="false"){
if($bold){
$str="<b>".$str."</b>";
}
return '<a href="'.$url.'">'.$str.'</a>';
}
function paging($curRec,$totalRec,$maxRec){
$totalPage=ceil($totalRec/$maxRec);
$curPage=ceil(($curRec+1)/$maxRec);
$str="";
/* tombol previous */
if($curPage>1){
$rec=($curPage-2)*$maxRec;

$str.=" ".makeLink("prev","?cur=".$rec,$bold)." ";
}
/* nomor halaman 1 2 3 dst… */
for($i=1;$i<=$totalPage;$i++){
if($i==$curPage){
$bold=true;
}else{
$bold=false;
}
$rec=($i-1)*$maxRec;
$str.=" ".makeLink($i,"?cur=".$rec,$bold)." ";
}
/* tombol next */
if($curPage<$totalPage){
$rec=($curPage*$maxRec);
$str.=" ".makeLink("next","?cur=".$rec,$bold)." ";
}
return $str;
}
$totalRec=60;// total Record ini didapat berdasrkan table dalam database
$maxRec=4;// ini adalah maximum record per halaman
/*
curRecord akan digunakan di sql query menggunakan LIMIT
contoh : $rs=mysql_query(“select * from phonebook limit $curRec,$maxRec”;
*/

$curRec=($_GET['cur']==null)?"0":$_GET['cur'];
?><?=paging($curRec,$totalRec,$maxRec)?><?
?>

Langkah 3

Simpan di dalam C:\AppServ\www atau sesuai dengan tempat yang anda buat, yang paling penting, file ini berada di dalam C:\Apache\htdocs\...
nomor halaman website

Langkah 4

Silahkan cek tampilan di dalam localhost seperti tampilan di bawah ini.
nomor halaman website


Jika anda mengalami kesulitan dalam pembuatannya ,, silahkan tinggalkan komentar anda dibawah ini, saya siap memberikan bantuan kepada saudara sekalian. Terimakasih.
Selamat mencoba.

Tips Ajax PHP : Cara Cepat Menguasai AJax PHP serta Jquery

Tips Ajax PHP : Cara Cepat Menguasai AJax PHP serta Jquery
Mungkin masih banyak dari anda yang belum mengerti benar tetang ajax php, dan saat ini saya akan berusaha untuk memberikan penjelasan yang lebih mendetail tentang ajax, agar sobat semua mudah untuk memahaminya.
 Ajax bukan merupakan bahasa pemrogram yang baru melainkan hanya merupakan satu fitur yang digunakan oleh para developer, baik menambah data, menghapus, mengupdate, tanpa melakukan refresh page, atau redirect page.
kenapa kita harus menggunakan ajax ? Mungkin pertanyaan semacam itu akan muncul dalam benak anda. contoh yang paling simpel mengenai kegunaan ajax adalah disaat kita sedang mengerjakan sebuah website, atau sedang menginput data, edit atau hapus data pada website ,, dengan menggunakan ajax kita tidak perlu lagi me refresh halaman yang mengalami perubahan data, dengan ajax proses yang dilakukan akan dikerjakan disisi server, atau anda bisa melihat twitter.com , coba anda perhatikan pada bagian twitt dari folower anda,, akan secara otomatis bertambahkan ??? tanpa kita harus merefresh halaman browser kita,,,!!! itulah kegunaan ajax.
Banyak cara juga untuk dapat menghasilkan ajax ini, ada develepor yang membuat engine sendiri, tentunya menggunakan standarisasi ajax, ada juga yang menggunakan javascript plugin, seperti jquerymisalnya.
Di tutorial kali ini, penulis akan menjelaskan sedikit saja bagaimana menghasilkan fitur ajax menggunakan php dan jquery. Caranya sangat-sangat mudah sekali. Anda cukup mengikuti syntaxnya, dan memahami alurnya. Tapi sebelumnya terlebih dahulu Anda membaca tutorial saya sebelumnya tentang pengenalan jquery.
Setidaknya diperlukan paling tidak 3 buah file minimal, pertama adalah file yang digunakan untuk mengirimdata, kemudian file yang digunakan untuk menerima data ataupun memproses data, dan yang terakhir adalah jquery librarynya itu sendiri.
Oke disini saya memiliki file index.php yang berfungsi dalam mengirimkan data



<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<html>
<head>
<title></title>
<meta name=”" content=”">
<script type=”text/javascript” src=”jquery-1.6.4.js”></script>
<script type=”text/javascript”>
$(document).ready(function(){
$(‘#ajaxTest’).submit(function(eve){
eve.preventDefault();
$.ajax({
url: “/function.php”,
type: “POST”,
dataType: “html”,
data: $(this).serialize(),
beforeSend: function(){
$(‘#waiting’).text(‘Mohon Tunggu Sebentar’).fadeIn(‘slow’);
},
success: function(html){
$(‘#waiting’).fadeOut(‘slow’);
$(‘#result’).text(html).fadeIn(‘slow’).fadeOut(‘slow’).fadeIn(‘slow’);
}
});
}); 
});?? ??? ?
</script>
</head>
<body>
<form method=”POST” id=”ajaxTest”>
<input type=”input” name=”ajaxInput” />
<input type=”submit” name=”ajaxBtn” value=”Test Button” />
</form>
<div id=”waiting”></div>
<div id=”result”></div>
</body>
</html>



selanjutnya adalah function.php yang digunakan dalam menerima dan memproses data berisi :


<?php
echo $_POST['ajaxInput'];
?>

dan file yang terakhir adalah file jquery itu sendiri saya menggunakan jquery versi 1.6.4.
Yang perlu disorot adalah jquery script yang ada dibagian headnya :

<script type=”text/javascript” src=”jquery-1.6.4.js”></script>
<script type=”text/javascript”>
$(document).ready(function(){
$(‘#ajaxTest’).submit(function(eve){
eve.preventDefault();
$.ajax({
url: “/function.php”,
type: “POST”,
dataType: “html”,
data: $(this).serialize(),
beforeSend: function(){
$(‘#waiting’).text(‘Mohon Tunggu Sebentar’).fadeIn(‘slow’);
},
success: function(html){
$(‘#waiting’).fadeOut(‘slow’);
$(‘#result’).text(html).fadeIn(‘slow’).fadeOut(‘slow’).fadeIn(‘slow’);
}
});
}); 
});?? ??? ?
</script>


jquery action selalu diawali dengan

$(document).ready(function(){

dan diakhiri dengan
});

kemudian baris selanjutnya adalah :

$(‘#ajaxTest’).submit(function(eve){
eve.preventDefault();

ini berarti submit form yang tadinya disubmit secara langsung ke action formnya alihkan dengan menggunakan jquery ajax, jadi ketika diklik maka tidak akan berpindah ke halaman action formnya. Yang ada malahan jquery yang mengambil alih ketika button submit di klik.
kemudian baris selanjutnya adalah : 

$.ajax({
url: “/function.php”,
type: “POST”,
dataType: “html”,
data: $(this).serialize(),

url berisi halaman penerima data yang akan dikirim, kemudian type POST anda sudah tahu maknanya, dataType HTML kita lewat saja, dan yang terakhir adalah data:($this).serialize() artinya kirimkan data yang datanya itu diambil dari input-input yang ada dalam form.
sedangkan baris selanjutnya penulis yakin Anda sudah paham maknanya,

beforeSend: function(){
$(‘#waiting’).text(‘Mohon Tunggu Sebentar’).fadeIn(‘slow’);
},
success: function(html){
$(‘#waiting’).fadeOut(‘slow’);
$(‘#result’).text(html).fadeIn(‘slow’).fadeOut(‘slow’).fadeIn(‘slow’);
}
});

Selamat mencoba, jangan lupa , meninggalkan coment anda dibawah ini, atau share ke teman anda.

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

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.

Tips PHP : Membuat Password Generator dengan PHP

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.

Tutorial PHP : Cara Menampilkan Grafik Pie dengan PHP dan MySQL

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.

Tips PHP : Cara Meningkatkan Keamanan Website Kita Dengan PHP

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.