Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 81

Variabel Siap Pakai pada PHP

Selain variabel yang kita tentukan sendiri, PHP menyediakan variabel yang berisi data-data yang bisa kita pakai. Variabel tersebut berisi data-data terkait server dan data yang tersimpan di browser user yang dikirimkan saat request. Untuk mengakses data tersebut, caranya tinggal memanggilnya dengan perintah: $_SERVER['VARIABLE']; Dan inilah variabel-variabelnya beserta fungsinya masing-masing: PHP_SELF Nama file yang digunakan oleh script, relative kepada domain root. Contohnya, $_SERVER['PHP_SELF'] dalam script dengan alamat http://example.com/test.php/foo.bar akan menghasilkan /test.php/foo.bar. SERVER_ADDR IP Address server dimana script tersebut dijalankan. SERVER_NAME Nama server tempat dijalankan script PHP. SERVER_PROTOCOL Informasi Protokol yang dipergunakan untuk request, contoh: HTTP/1.0'; REQUEST_METHOD Metode rquest yang dipergunakan untuk mengakses; contoh: GET, HEAD, POST, PUT. REQUEST_TIME Waktu dimulainya request. Ada sejak PHP 5.1.0. It is float with microseconds since PHP 5.4.0. QUERY_STRING Query string, jika ada DOCUMENT_ROOT The document root directory under which the current script is executing, as defined in the servers configuration file. HTTP_ACCEPT Contents of the Accept: header from the current request, if there is one. HTTP_ACCEPT_CHARSET Contents of the Accept-Charset: header from the current request, if there is one. Example: iso-8859-1,*,utf8'. HTTP_ACCEPT_ENCODING Contents of the Accept-Encoding: header from the current request, if there is one. Example: gzip. HTTP_ACCEPT_LANGUAGE Contents of the Accept-Language: header from the current request, if there is one. Example: en. HTTP_CONNECTION Contents of the Connection: header from the current request, if there is one. Example: Keep-Alive. HTTP_HOST Contents of the Host: header from the current request, if there is one. HTTP_REFERER The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

HTTP_USER_AGENT Contents of the User-Agent: header from the current request, if there is one. This is a string denoting the user agent being which is accessing the page. A typical example is: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Among other things, you can use this value with get_browser() to tailor your pages output to the capabilities of the user agent. HTTPS Set to a non-empty value if the script was queried through the HTTPS protocol. Note: Note that when using ISAPI with IIS, the value will be off if the request was not made through the HTTPS protocol. REMOTE_ADDR The IP address from which the user is viewing the current page. REMOTE_HOST The Host name from which the user is viewing the current page. The reverse dns lookup is based off the REMOTE_ADDR of the user. Note: Your web server must be configured to create this variable. For example in Apache youll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr(). REMOTE_PORT The port being used on the users machine to communicate with the web server. SCRIPT_FILENAME The absolute pathname of the currently executing script. Note: If a script is executed with the CLI, as a relative path, such as file.php or ../file.php, $_SERVER['SCRIPT_FILENAME'] will contain the relative path specified by the user. SERVER_ADMIN The value given to the SERVER_ADMIN (for Apache) directive in the web server configuration file. If the script is running on a virtual host, this will be the value defined for that virtual host. SERVER_PORT The port on the server machine being used by the web server for communication. For default setups, this will be 80'; using SSL, for instance, will change this to whatever your defined secure HTTP port is. SERVER_SIGNATURE String containing the server version and virtual host name which are added to server-generated pages, if enabled. PATH_TRANSLATED Filesystem- (not document root-) based path to the current script, after the server has done any virtual-toreal mapping. Note: As of PHP 4.3.2, PATH_TRANSLATED is no longer set implicitly under the Apache 2 SAPI in contrast to the situation in Apache 1, where its set to the same value as the SCRIPT_FILENAME server variable when its not populated by Apache. This change was made to comply with the CGI specification that PATH_TRANSLATED should only exist if PATH_INFO is defined. Apache 2 users may use AcceptPathInfo = On inside httpd.conf to define PATH_INFO. SCRIPT_NAME Contains the current scripts path. This is useful for pages which need to point to themselves. The __FILE__ constant contains the full path and filename of the current (i.e. included) file. REQUEST_URI The URI which was given in order to access this page; for instance, /index.html. PHP_AUTH_DIGEST When doing Digest HTTP authentication this variable is set to the Authorization header sent by the client (which you should then use to make the appropriate validation). PHP_AUTH_USER

When doing HTTP authentication this variable is set to the username provided by the user. PHP_AUTH_PW When doing HTTP authentication this variable is set to the password provided by the user . AUTH_TYPE When doing HTTP authenticated this variable is set to the authentication type. PATH_INFO Contains any client-provided pathname information trailing the actual script filename but preceding the query string, if available. For instance, if the current script was accessed via the URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, then $_SERVER['PATH_INFO'] would contain /some/stuff. ORIG_PATH_INFO Original version of PATH_INFO before processed by PHP. Anda bisa mencobanya satu per satu untuk mengetahui seperti apa cara kerjanya. Maaf, belum sempat nerjemahin satu per satu.

Sumber : http://simasdap.blogspot.com/2012/06/variabel-siap-pakai-pada-php.html#ixzz2JGCqA6Zt

Manipulasi Alur Perintah PHP


Sebagaimana bahasa pemrograman lainnya, PHP memiliki alur perintah dari atas ke bawah. Artinya, PHP akan menjalankan perintah dari baris pertama dan terus turun hingga baris terakhir. Sehingga ada kalanya perintah di bagian atas tidak jadi dilaksanakan gara-gara perintah di bawahnya. Contohnya seperti ini: <!--?php $nama = "Bejo Paijo"; $alamat = "Jemurwonosari - Surabaya"; $nama = "Lutvi Avandi"; echo $nama; ?--> Berdasarkan perintah diatas, variable $nama pertama diisi dengan nama Bejo Paijo. Namun ternyata di baris ke-5 variable $nama diisi dengan nama Lutvi Avandi. Maka ketika variable itu ditampilkan dengan perintah echo, jadinya yang muncul adalah Lutvi Avandi karena PHP menjalankan perintah yang terakhir. Kita bisa memanipulasi alur perintah ini dengan menggunakan beberapa perintah. Diantaranya adalah: IFELSE Manipulasi pertama adalah menggunakan perintah IFELSE Dengan perintah ini, kita bisa membuat alur PHP melompati beberapa baris yang tidak diperlukan. Contohnya seperti ini: <!--?php<br /--> $nama = "Lutvi Avandi";<br> if ($nama == "Lutvi Avandi") {<br> echo "Lutvi Keren";<br> } else {<br> echo "Kamu jelek";<br> }<br> ?><br> <!--?pre--> Saat kode itu dijalankan, maka pertama variable $nama diisi dengan Lutvi Avandi. Lalu di baris berikutnya variabel ini dikenali dengan perintah IF. Jika isi variabelnya adalah Lutvi Avandi, maka tampilkan tulisan menggunakan echo Lutvi Keren. Setelah itu alur akan melompat menuju kurung kurawal dibawah echo Kamu Jelek. Sehingga perintah menampilkan Kamu Jelek diabaikan alias dilompati

Nah, jika kita mengubah variabel $nama, misalnya seperti ini: <pre name="code" class="php"><!--?php<br /--> $nama = "Bejo Paijo";<br> if ($nama == "Lutvi Avandi") {<br> echo "Lutvi Keren";<br> } else {<br> echo "Kamu jelek";<br> }<br> ?><br> <!--?pre--><p></p> <p>Maka yang muncul adalah tulisan Kamu Jelek. Script akan melewatkan perintah echo Lutvi Keren karena saat dideteksi menggunakan if, isi variabelnya bukan Lutvi Avandi.</p> <p>Selain dua opsi IF, kita bisa memberikan lebih dari 2 opsi. Misalnya seperti ini:</p> <pre name="code" class="php"><!--?php<br /--> $nama = "Lutvi Avandi";<br> if ($nama == "Lutvi Avandi") {<br> echo "Lutvi Keren";<br> } elseif ($nama == "Bejo Paijo") {<br> echo "Bejo Macho";<br> } else {<br> echo "Kamu jelek";<br> }<br> ?><br> <!--?pre--> Dari kode diatas, kita bisa mengenali bahwa, pertama variable $nama diisi nilai. Lalu dengan IF kita cek nilainya. Kalau isinya "Lutvi Avandi", maka tampilkan tulisan Lutvi Keren. Kalau bukan, cek lagi apakah isinya "Bejo Paijo"? Kalau ya, tampilkan tulisan Bejo Macho. Kalau bukan juga, maka tampilkan tulisan "Kamu Jelek". Kode elseif bisa anda ulang-ulang sebanyak apapun. Seperti ini misalnya: <pre name="code" class="php"><!--?php<br /--> $nomor = 5;<br> if ($nomor == 1) {<br> echo 'Satu';<br> } elseif ($nomor == 2) {<br> echo 'Dua';<br> } elseif ($nomor == 3) {<br> echo 'Tiga';<br> } elseif ($nomor == 4) {<br> echo 'Empat';<br> } elseif ($nomor == 5) {<br> echo 'Lima';<br> } else {<br> echo 'Maaf, saya cuma bisa ngitung sampai lima doang';<br> }<br> ?><br> <!--?pre-->

Sumber : http://simasdap.blogspot.com/2012/06/manipulasi-alur-perintah-php.html#ixzz2JGDOp83N

Fungsi Rekursif dan Penerapannya di PHP


Fungsi merupakan bagian yang tidak terpisahkan dari konsep bahasa pemrograman. Dengan adanya fungsi, akan meningkatkan readibility (kemudahan untuk dibaca), modularity (pemecahan program menjadi modulmodul) dan reusability (dapat digunakan kembali) program kita. Lalu apa itu fungsi rekursif? Singkatnya,

fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Jadi di dalam suatu fungsi rekursif terdapat pemanggilan terhadap dirinya sendiri. Penasaran? Dalam tutorial kali ini, saya akan menyajikan beberapa contoh sederhana penerapan fungsi rekursif di bahasa pemrograman PHP. Pada akhir tutorial, akan dicontohkan penggunaan fungsi rekursif dalam menampilkan menu bertingkat yang diambil dari database MySQL. Fungsi rekursif biasanya digunakan untuk menyelesaikan permasalahan yang memiliki keteraturan pola dalam prosesnya, contohnya dalam menyelesaikan soal menampilkan deret bilangan. Salah satu kelebihan penggunaan fungsi rekursif adalah secara penulisan code program akan lebih singkat dan efektif. Namun kekurangannya tidak terlalu efektif secara performa dan waktu eksekusi program karena fungsi rekursif membutuhkan resources memory yang lebih besar. Dan jika tidak hati-hati dalam mendefinisikan proses di dalam fungsi rekursif, seringkali menghasilkan proses yang tidak pernah berhenti (infinitive process).

Menghitung Faktorial dengan Rekursif


Salah satu contoh yang paling mudah untuk menjelaskan fungsi rekursif adalah faktorial. Kita tahu bahwa dalam matematika, faktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh 5! = 5 x 4 x 3 x 2 x 1 = 120.

Jika dilihat dari keteraturan pola dalam menghitung nilai faktorial suatu bilangan, maka dapat diselesaikan dengan menggunakan fungsi biasa maupun fungsi rekursif. Perhatikan dan bandingkan kedua program berikut ini dimana program pertama tanpa rekursif dan program kedua dengan rekursif.

faktorial-1.php

1. 2. 3. <?php

4. 5. 6.

7. 8. 9. function faktorial($n=1) {

10. 11. 12. $hasil = 1;

13. 14. 15. for($i=$n; $i >= 1; $i--) {

16. 17. 18. $hasil = $hasil * $i;

19. 20. 21. }

22. 23. 24. return $hasil;

25. 26. 27. }

28. 29. 30.

31. 32. echo "10! = ".faktorial(10);

33.

34. 35. 36.

37. 38. 39. ?>

Pada program di atas, proses menghitung nilai faktorial dilakukan dengan menggunakan perulangan. Sedangkan pada program di bawah ini, proses perhitungan dengan menggunakan fungsi rekursif. Di dalam fungsi terdapat pemanggilan fungsi diri sendiri dengan parameter ($n-1) yang dikalikan dengan $n.

faktorial-2.php

1. 2. 3. <?php

4. 5. 6.

7. 8. 9. function faktorial($n=1) {

10. 11. 12. if ($n==1) {

13. 14. return 1;

15.

16. 17. 18. } else {

19. 20. 21. return $n * faktorial ($n-1);

22. 23. 24. }

25. 26. 27. }

28. 29. 30.

31. 32. 33. echo "10! = ".faktorial(10);

34. 35. 36.

37. 38. 39. ?>

Pada kedua contoh di atas mungkin tidak terlalu menonjol mengenai manfaat fungsi rekursif. Pada contoh yang lebih kompleks, misalnya melakukan penelusuran suatu graph atau tree, fungsi rekursif akan lebih tepat digunakan dibanding fungsi biasa.

Menampilkan Menu Bertingkat (Tree Menu) dengan Fungsi Rekursif


Menu atau navigasi merupakan bagian penting dan tidak dapat terpisahkan dari suatu halaman web. Menu yang kompleks biasanya diorganisasikan menjadi beberapa tingkat sedemikian hingga jika digambarkan akan terbentuk seperti diagram pohon. Menu tersebut sering disebut tree-menu. Untuk membuatnya pun sudah banyak dibahas di berbagai website, termasuk di website ini (baca kembali tutorial Membuat Menu Bertingkat dengan JQuery jQSimpleMenu dan Membuat Menu Bertingkat (Tree Menu) dengan Dreamweaver). Pada bagian ini, saya tidak akan mengulang kembali bagaimana menggunakan library jQuery atau sejenisnya untuk membuat menu bertingkat, namun lebih pada bagaimana menyimpan menu bertingkat ke dalam database MySQL dan menampilkannya dalam bentuk unordered-list di HTML, tentunya dengan memanfaatkan fungsi rekursif. Langsung saja, kita ikuti langkah-langkahnya: Langkah #1. Buat database dan tabel untuk menyimpan informasi menu. Saya asumsikan Anda sudah bisa membuat database di MySQL, baik dengan tools bantuan seperti PHPMyAdmin, MySQL Front, SQL Yog dll maupun dengan cara manual menggunakan mysql-console. Jika belum, coba pelajari buku gratis MySQL 5 yang dapat didownload di website ini. Setelah database dibuat, sekarang kita buat tabelnya, kurang lebih strukturnya sebagai berikut:

Kolom

Tipe Data

Keterangan

kd_menu

int(5)

Kode Menu

nm_menu

varchar(50)

Nama menu yang akan ditampilkan

link

varchar(50)

Link ke halaman menu

kd_parent

int(5)

Kode menu yang menjadi induknya. Menu yang paling atas diatur induk-nya 0.

Jika tabel sudah dibuat, isikan dengan beberapa contoh data. Bagi yang ga mau repot, saya sudah menyediakan perintah SQL untuk membuat tabel dan mengisi contoh datanya. Tinggal dijalankan di mysql client Anda. Langkah #2. Buat fungsi rekursif dan jalankan.

Pada Program di bawah ini, akan dilakukan pengambilan data secara rekursif dari tabel menu yang sudah dibuat sebelumnya. Selanjutnya data akan ditampilkan dalam bentuk unordered-list (ul) di HTML.

Code block

1. 2. 3. <?php

4. 5. 6. #koneksi mysql

7. 8. 9. mysql_connect("localhost","root","");

10. 11. 12. mysql_select_db("demo");

13. 14. 15. #end koneksi

16. 17. 18.

19. 20. 21. function html_menu(&$strmenu="", $parent=0) {

22. 23. 24. $query = "SELECT kd_menu, kd_parent, nm_menu, link

25. 26. 27. FROM menu WHERE kd_parent='$parent'

28. 29. 30. ORDER BY kd_menu";

31. 32. 33. //die ($query);

34. 35. 36. $sql = mysql_query($query);

37. 38. 39.

40. 41. 42. if (mysql_num_rows($sql) > 0) {

43. 44. 45. $strmenu .= '<ul>';

46. 47. 48. }

49. 50. 51.

52. 53. // tampilkan anaknya

54.

55. 56. 57. while ($row = mysql_fetch_assoc($sql)) {

58. 59. 60.

61. 62. 63. $strmenu .= "<li>";

64. 65. $strmenu .= sprintf("<a href='%s' title='%s'>%s</a>", $row['link'], $row['nm_menu'], $row['nm_menu']); 66.

67. 68. 69.

70. 71. 72. //panggil diri sendiri

73. 74. 75. html_menu($strmenu, $row['kd_menu']);

76. 77. 78. $strmenu .= "</li>";

79. 80. 81. }

82. 83. 84.

85. 86. 87. if (mysql_num_rows($sql) > 0)

88. 89. 90. $strmenu .= '</ul>';

91. 92. 93.

94. 95. 96. }

97. 98. 99.

100. 101. $strmenu = ""; 102.

103. 104. html_menu($strmenu, 0); 105.

106. 107. echo $strmenu; 108.

109. 110. ?> 111.

Berikut ini kurang lebih tampilan akhir jika program di atas dijalankan.

Tampilan Menu dalam bentuk Unordered-List


Demikian tutorial singkat ini, semoga ada manfaatnya untuk kita semua.

Referensi

http://id.wikipedia.org/wiki/Faktorial

http://www.khabib.staff.ugm.ac.id/index.php?option=com_content&task=view&id=82&Itemid=3 3 Sumber - Achmatim.Net

http://id.wikipedia.org/wiki/Rekursi

Sumber : http://simasdap.blogspot.com/2012/06/fungsi-rekursif-dan-penerapannya-di-php.html#ixzz2JGDjH3FB

Membuat Auto Wrap Content pada Tabel dengan FPDF dan PHP
Semalem saya dapet pertanyaan dari salah satu pengunjung website ini terkait dengan tutorial membuat laporan PDF dengan FPDF yang pernah saya posting. Dia sudah mencobanya namun saat isi data pada suatu kolom melebihi lebar dari kolom tersebut, maka tulisannya akan kepotong alias ga keliatan. Saya juga sering mendapatkan pertanyaan serupa baik dari beberapa mahasiswa, pengunjung website achmatim.net, kawankawan di facebook maupun follower di twitter. Sehingga saya mencoba untuk membuat contoh program PHP sederhana mengenai membuat auto wrap content pada tabel ini. Bagi Anda yang belum pernah menggunakan library FPDF sebaiknya mencoba tutorial dasarnya terlebih dahulu sebelum mencoba tutorial ini. Dan untuk menyederhanakan tutorial, data yang ditampilkan diambil dari sebuah array. Anda dapat memodifikasinya dengan mudah jika ingin dikoneksikan dengan sebuah database.Contoh Program PHP pada tutorial ini menggunakan library FPDF versi 1.7 yang dapat Anda download di situs resminya.

Source Code Program


Berikut ini contoh program beserta penjelasan singkatnya:

fpdf-table-auto-wrapping.php

1. 2. 3. <?php

4. 5. 6.

7. 8. 9. /**

10. 11. 12. * @author Achmad Solichin

13. 14. 15. * @website http://achmatim.net

16. 17. 18. * @email achmatim@gmail.com

19. 20. 21. */

22. 23. 24. require_once("fpdf17/fpdf.php");

25. 26. 27.

28. 29. 30. class FPDF_AutoWrapTable extends FPDF {

31. 32. 33. private $data = array();

34. 35. 36. private $options = array(

37. 38. 'filename' => '',

39.

40. 41. 42. 'destinationfile' => '',

43. 44. 45. 'paper_size'=>'F4',

46. 47. 48. 'orientation'=>'P'

49. 50. 51. );

52. 53. 54.

55. 56. 57. function __construct($data = array(), $options = array()) {

58. 59. 60. parent::__construct();

61. 62. 63. $this->data = $data;

64. 65. 66. $this->options = $options;

67.

68. 69.

70. 71. 72.

73. 74. 75. public function rptDetailData () {

76. 77. 78. //

79. 80. 81. $border = 0;

82. 83. 84. $this->AddPage();

85. 86. 87. $this->SetAutoPageBreak(true,60);

88. 89. 90. $this->AliasNbPages();

91. 92. 93. $left = 25;

94. 95. 96.

97. 98. 99. //header

100. 101. $this->SetFont("", "B", 15); 102.

103. 104. $this->MultiCell(0, 12, 'PT. ACHMATIM DOT NET'); 105.

106. 107. $this->Cell(0, 1, " ", "B"); 108.

109. 110. $this->Ln(10); 111.

112. 113. $this->SetFont("", "B", 12); 114.

115. 116. $this->SetX($left); $this->Cell(0, 10, 'LAPORAN DATA KARYAWAN', 0, 1,'C'); 117.

118. 119. $this->Ln(10); 120.

121. 122. 123.

124. 125. $h = 13;

126.

127. 128. $left = 40; 129.

130. 131. $top = 80; 132.

133. 134. #tableheader 135.

136. 137. $this->SetFillColor(200,200,200); 138.

139. 140. $left = $this->GetX(); 141.

142. 143. $this->Cell(20,$h,'NO',1,0,'L',true); 144.

145. 146. $this->SetX($left += 20); $this->Cell(75, $h, 'NIP', 1, 0, 'C',true); 147.

148. 149. $this->SetX($left += 75); $this->Cell(100, $h, 'NAMA', 1, 0, 'C',true); 150.

151. 152. $this->SetX($left += 100); $this->Cell(150, $h, 'ALAMAT', 1, 0, 'C',true); 153.

154. 155. $this->SetX($left += 150); $this->Cell(100, $h, 'EMAIL', 1, 0, 'C',true); 156.

157. 158. $this->SetX($left += 100); $this->Cell(100, $h, 'WEBSITE', 1, 1, 'C',true); 159.

160. 161. //$this->Ln(20); 162.

163. 164. 165.

166. 167. $this->SetFont('Arial','',9); 168.

169. 170. $this->SetWidths(array(20,75,100,150,100,100)); 171.

172. 173. $this->SetAligns(array('C','L','L','L','L','L')); 174.

175. 176. $no = 1; $this->SetFillColor(255); 177.

178. 179. foreach ($this->data as $baris) { 180.

181. 182. $this->Row(

183.

184. 185. array($no++, 186.

187. 188. $baris['nip'], 189.

190. 191. $baris['nama'], 192.

193. 194. $baris['alamat'], 195.

196. 197. $baris['email'], 198.

199. 200. $baris['website'] 201.

202. 203. )); 204.

205. 206. } 207.

208. 209. 210.

211.

212. } 213.

214. 215. 216.

217. 218. public function printPDF () { 219.

220. 221. 222.

223. 224. if ($this->options['paper_size'] == "F4") { 225.

226. 227. $a = 8.3 * 72; //1 inch = 72 pt 228.

229. 230. $b = 13.0 * 72; 231.

232. 233. $this->FPDF($this->options['orientation'], "pt", array($a,$b)); 234.

235. 236. } else { 237.

238. 239. $this->FPDF($this->options['orientation'], "pt", $this->options['paper_size']); 240.

241. 242. } 243.

244. 245. 246.

247. 248. $this->SetAutoPageBreak(false); 249.

250. 251. $this->AliasNbPages(); 252.

253. 254. $this->SetFont("helvetica", "B", 10); 255.

256. 257. //$this->AddPage(); 258.

259. 260. 261.

262. 263. $this->rptDetailData(); 264.

265. 266. 267.

268. 269. $this->Output($this->options['filename'],$this->options['destinationfile']); 270.

271. 272. } 273.

274. 275. 276.

277. 278. private $widths; 279.

280. 281. private $aligns; 282.

283. 284. 285.

286. 287. function SetWidths($w) 288.

289. 290. { 291.

292. 293. //Set the array of column widths 294.

295. 296. $this->widths=$w; 297.

298. 299. }

300.

301. 302. 303.

304. 305. function SetAligns($a) 306.

307. 308. { 309.

310. 311. //Set the array of column alignments 312.

313. 314. $this->aligns=$a; 315.

316. 317. } 318.

319. 320. 321.

322. 323. function Row($data) 324.

325. 326. { 327.

328.

329. //Calculate the height of the row 330.

331. 332. $nb=0; 333.

334. 335. for($i=0;$i<count($data);$i++) 336.

337. 338. $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i])); 339.

340. 341. $h=10*$nb; 342.

343. 344. //Issue a page break first if needed 345.

346. 347. $this->CheckPageBreak($h); 348.

349. 350. //Draw the cells of the row 351.

352. 353. for($i=0;$i<count($data);$i++) 354.

355. 356. { 357.

358. 359. $w=$this->widths[$i]; 360.

361. 362. $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; 363.

364. 365. //Save the current position 366.

367. 368. $x=$this->GetX(); 369.

370. 371. $y=$this->GetY(); 372.

373. 374. //Draw the border 375.

376. 377. $this->Rect($x,$y,$w,$h); 378.

379. 380. //Print the text 381.

382. 383. $this->MultiCell($w,10,$data[$i],0,$a); 384.

385.

386. //Put the position to the right of the cell 387.

388. 389. $this->SetXY($x+$w,$y); 390.

391. 392. } 393.

394. 395. //Go to the next line 396.

397. 398. $this->Ln($h); 399.

400. 401. } 402.

403. 404. 405.

406. 407. function CheckPageBreak($h) 408.

409. 410. { 411.

412. 413. //If the height h would cause an overflow, add a new page immediately 414.

415. 416. if($this->GetY()+$h>$this->PageBreakTrigger) 417.

418. 419. $this->AddPage($this->CurOrientation); 420.

421. 422. } 423.

424. 425. 426.

427. 428. function NbLines($w,$txt) 429.

430. 431. { 432.

433. 434. //Computes the number of lines a MultiCell of width w will take 435.

436. 437. $cw=&$this->CurrentFont['cw']; 438.

439. 440. if($w==0) 441.

442. 443. $w=$this->w-$this->rMargin-$this->x;

444.

445. 446. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 447.

448. 449. $s=str_replace("\r",'',$txt); 450.

451. 452. $nb=strlen($s); 453.

454. 455. if($nb>0 and $s[$nb-1]=="\n") 456.

457. 458. $nb--; 459.

460. 461. $sep=-1; 462.

463. 464. $i=0; 465.

466. 467. $j=0; 468.

469. 470. $l=0; 471.

472. 473. $nl=1; 474.

475. 476. while($i<$nb) 477.

478. 479. { 480.

481. 482. $c=$s[$i]; 483.

484. 485. if($c=="\n") 486.

487. 488. { 489.

490. 491. $i++; 492.

493. 494. $sep=-1; 495.

496. 497. $j=$i; 498.

499.

500. $l=0; 501.

502. 503. $nl++; 504.

505. 506. continue; 507.

508. 509. } 510.

511. 512. if($c==' ') 513.

514. 515. $sep=$i; 516.

517. 518. $l+=$cw[$c]; 519.

520. 521. if($l>$wmax) 522.

523. 524. { 525.

526. 527. if($sep==-1) 528.

529. 530. { 531.

532. 533. if($i==$j) 534.

535. 536. $i++; 537.

538. 539. } 540.

541. 542. else 543.

544. 545. $i=$sep+1; 546.

547. 548. $sep=-1; 549.

550. 551. $j=$i; 552.

553. 554. $l=0; 555.

556.

557. $nl++; 558.

559. 560. } 561.

562. 563. else 564.

565. 566. $i++; 567.

568. 569. } 570.

571. 572. return $nl; 573.

574. 575. } 576.

577. 578. } //end of class 579.

580. 581. 582.

583. 584. //contoh penggunaan 585.

586. 587. $data = array( 588.

589. 590. array( 591.

592. 593. 'nip' 594. => '0111500382',

595. 596. 'nama' 597. => 'ACHMAD SOLICHIN',

598. 599. 'alamat' Jakarta', 600. => 'Jalan Ciledug Raya No 99, Petukangan Utara, Jakarta Selatan 12260, DKI

601. 602. 'email' 603. => 'achmatim@gmail.com',

604. 605. 'website' 606. => 'http://achmatim.net'

607. 608. ), 609.

610. 611. array( 612.

613. 614. 'nip' 615. => '0411500101',

616. 617. 'nama' 618. => 'CHOTIMATUL MUSYAROFAH',

619. 620. 'alamat' => 'Komplek Japos RT 002/015 Kelurahan Peninggilan, Kec. Ciledug,

Tangerang', 621.

622. 623. 'email' 624. => 'chotimatul.musyarofah@gmail.com',

625. 626. 'website' 627. => 'http://contohprogram.info'

628. 629. ), 630.

631. 632. array( 633.

634. 635. 'nip' 636. => '1111500200',

637. 638. 'nama' 639. => 'MUHAMMAD LINTANG',

640. 641. 'alamat' 642. => 'Jl. Raya Caplin, Kec. Ciledug, Tangerang, Banten',

643. 644. 'email' 645. => 'achmatim@yahoo.com',

646. 647. 'website' 648. => 'http://ebook.achmatim.net'

649. 650. ) 651.

652. 653. ); 654.

655. 656. 657.

658. 659. //pilihan 660.

661. 662. $options = array( 663.

664. 665. 'filename' => '', //nama file penyimpanan, kosongkan jika output ke browser 666.

667. 668. 'destinationfile' => '', //I=inline browser (default), F=local file, D=download

669.

670. 671. 'paper_size'=>'F4', //paper size: F4, A3, A4, A5, Letter, Legal 672.

673. 674. 'orientation'=>'P' //orientation: P=portrait, L=landscape 675.

676. 677. ); 678.

679. 680. 681.

682. 683. $tabel = new FPDF_AutoWrapTable($data, $options); 684.

685. 686. $tabel->printPDF(); 687.

688. 689. ?> 690.

Penjelasan singkat program:

Baris 8. Menyertakan library FPDF. Pada tutorial ini, menggunakan library FPDF versi 1.7 dan diletakkan di folder /fpdf17 Baris 10-197. Mendefinisikan class FPDF_AutoWrapTable yang merupakan turunan dari class FPDF. Baris 11-17. Mendeklarasikan variabel $data berisi data yang akan ditampilkan dan $options berisi beberapa opsi tampilan PDF seperti ukuran kertas dan orientasi kertas.

Baris 19-23. Konstruktor dari class yang menangkap 2 parameter yaitu $data dan $options Baris 34-40. Mengatur header / judul laporan, termasuk ukuran font (baris 35 dan 38) Baris 43-54. Mengatur judul tabel (kolom-kolom tabel) termasuk teks judul, lebar kolom dan perataan kolom. Baris 57-70. Menampilkan data tabel dengan memanggil fungsi Row(). Pada baris 58 diatur lebar untuk setiap kolom dan pada baris 59 diatur perataan untuk setiap kolom. Baris 75-93. Fungsi untuk menggenerate output PDF. Baris 200-222. Setting data yang akan ditampilkan. Jika ingin dikoneksikan dengan database, ganti baris ini dengan perintah untuk mengambil data. Baris 232-233. Pembentukan object class FPDF_AutoWrapTable dan pemanggilan fungsi untuk menggenerate file PDF. Hasil dari program tersebut kurang lebih sebagai berikut:

Download dan Demo Program

Klik disini untuk mendownload contoh program diatas beserta library FPDF versi 1.7

Klik disini untuk melihat demo program di atas.

Menampilkan Data MySQL ke PDF


Pada contoh program di atas, saya menggunakan data berupa array yang diisikan di dalam program. Anda bisa saja menggantinya dengan data yang berasal dari database seperti MySQL. Dan berhubung cukup banyak pengunjung yang bertanya mengenai bagaimana jika ingin menampilkan data dari database ke PDF, saya buatkan contoh programnya di bawah ini. Jangan lupa, siapkan terlebih dahulu database dan tabel yang diperlukan (lihat penjelasan di code program).

Code block

1. 2. 3. <?php

4. 5. 6.

7. 8. 9. /**

10. 11. 12. * @author Achmad Solichin

13. 14. 15. * @website http://achmatim.net

16. 17. 18. * @email achmatim@gmail.com

19. 20. */

21.

22. 23. 24. require_once("fpdf17/fpdf.php");

25. 26. 27.

28. 29. 30. class FPDF_AutoWrapTable extends FPDF {

31. 32. 33. private $data = array();

34. 35. 36. private $options = array(

37. 38. 39. 'filename' => '',

40. 41. 42. 'destinationfile' => '',

43. 44. 45. 'paper_size'=>'F4',

46. 47. 48. 'orientation'=>'P'

49.

50. 51.

);

52. 53. 54.

55. 56. 57. function __construct($data = array(), $options = array()) {

58. 59. 60. parent::__construct();

61. 62. 63. $this->data = $data;

64. 65. 66. $this->options = $options;

67. 68. 69. }

70. 71. 72.

73. 74. 75. public function rptDetailData () {

76. 77. 78. //

79. 80. 81. $border = 0;

82. 83. 84. $this->AddPage();

85. 86. 87. $this->SetAutoPageBreak(true,60);

88. 89. 90. $this->AliasNbPages();

91. 92. 93. $left = 25;

94. 95. 96.

97. 98. 99. //header

100. 101. $this->SetFont("", "B", 15); 102.

103. 104. $this->MultiCell(0, 12, 'PT. ACHMATIM DOT NET'); 105.

106. 107. $this->Cell(0, 1, " ", "B");

108.

109. 110. $this->Ln(10); 111.

112. 113. $this->SetFont("", "B", 12); 114.

115. 116. $this->SetX($left); $this->Cell(0, 10, 'LAPORAN DATA KARYAWAN', 0, 1,'C'); 117.

118. 119. $this->Ln(10); 120.

121. 122. 123.

124. 125. $h = 13; 126.

127. 128. $left = 40; 129.

130. 131. $top = 80; 132.

133. 134. #tableheader 135.

136.

137. $this->SetFillColor(200,200,200); 138.

139. 140. $left = $this->GetX(); 141.

142. 143. $this->Cell(20,$h,'NO',1,0,'L',true); 144.

145. 146. $this->SetX($left += 20); $this->Cell(75, $h, 'NIP', 1, 0, 'C',true); 147.

148. 149. $this->SetX($left += 75); $this->Cell(100, $h, 'NAMA', 1, 0, 'C',true); 150.

151. 152. $this->SetX($left += 100); $this->Cell(150, $h, 'ALAMAT', 1, 0, 'C',true); 153.

154. 155. $this->SetX($left += 150); $this->Cell(100, $h, 'EMAIL', 1, 0, 'C',true); 156.

157. 158. $this->SetX($left += 100); $this->Cell(100, $h, 'WEBSITE', 1, 1, 'C',true); 159.

160. 161. //$this->Ln(20); 162.

163. 164. 165.

166. 167. $this->SetFont('Arial','',9); 168.

169. 170. $this->SetWidths(array(20,75,100,150,100,100)); 171.

172. 173. $this->SetAligns(array('C','L','L','L','L','L')); 174.

175. 176. $no = 1; $this->SetFillColor(255); 177.

178. 179. foreach ($this->data as $baris) { 180.

181. 182. $this->Row( 183.

184. 185. array($no++, 186.

187. 188. $baris['nip'], 189.

190. 191. $baris['nama'], 192.

193.

194. $baris['alamat'], 195.

196. 197. $baris['email'], 198.

199. 200. $baris['website'] 201.

202. 203. )); 204.

205. 206. } 207.

208. 209. 210.

211. 212. } 213.

214. 215. 216.

217. 218. public function printPDF () { 219.

220. 221. 222.

223. 224. if ($this->options['paper_size'] == "F4") { 225.

226. 227. $a = 8.3 * 72; //1 inch = 72 pt 228.

229. 230. $b = 13.0 * 72; 231.

232. 233. $this->FPDF($this->options['orientation'], "pt", array($a,$b)); 234.

235. 236. } else { 237.

238. 239. $this->FPDF($this->options['orientation'], "pt", $this->options['paper_size']); 240.

241. 242. } 243.

244. 245. 246.

247. 248. $this->SetAutoPageBreak(false); 249.

250. 251. $this->AliasNbPages();

252.

253. 254. $this->SetFont("helvetica", "B", 10); 255.

256. 257. //$this->AddPage(); 258.

259. 260. 261.

262. 263. $this->rptDetailData(); 264.

265. 266. 267.

268. 269. $this->Output($this->options['filename'],$this->options['destinationfile']); 270.

271. 272. } 273.

274. 275. 276.

277. 278. private $widths; 279.

280.

281. private $aligns; 282.

283. 284. 285.

286. 287. function SetWidths($w) 288.

289. 290. { 291.

292. 293. //Set the array of column widths 294.

295. 296. $this->widths=$w; 297.

298. 299. } 300.

301. 302. 303.

304. 305. function SetAligns($a) 306.

307. 308. { 309.

310. 311. //Set the array of column alignments 312.

313. 314. $this->aligns=$a; 315.

316. 317. } 318.

319. 320. 321.

322. 323. function Row($data) 324.

325. 326. { 327.

328. 329. //Calculate the height of the row 330.

331. 332. $nb=0; 333.

334. 335. for($i=0;$i<count($data);$i++) 336.

337. 338. $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));

339.

340. 341. $h=10*$nb; 342.

343. 344. //Issue a page break first if needed 345.

346. 347. $this->CheckPageBreak($h); 348.

349. 350. //Draw the cells of the row 351.

352. 353. for($i=0;$i<count($data);$i++) 354.

355. 356. { 357.

358. 359. $w=$this->widths[$i]; 360.

361. 362. $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; 363.

364. 365. //Save the current position 366.

367. 368. $x=$this->GetX(); 369.

370. 371. $y=$this->GetY(); 372.

373. 374. //Draw the border 375.

376. 377. $this->Rect($x,$y,$w,$h); 378.

379. 380. //Print the text 381.

382. 383. $this->MultiCell($w,10,$data[$i],0,$a); 384.

385. 386. //Put the position to the right of the cell 387.

388. 389. $this->SetXY($x+$w,$y); 390.

391. 392. } 393.

394.

395. //Go to the next line 396.

397. 398. $this->Ln($h); 399.

400. 401. } 402.

403. 404. 405.

406. 407. function CheckPageBreak($h) 408.

409. 410. { 411.

412. 413. //If the height h would cause an overflow, add a new page immediately 414.

415. 416. if($this->GetY()+$h>$this->PageBreakTrigger) 417.

418. 419. $this->AddPage($this->CurOrientation); 420.

421. 422. } 423.

424. 425. 426.

427. 428. function NbLines($w,$txt) 429.

430. 431. { 432.

433. 434. //Computes the number of lines a MultiCell of width w will take 435.

436. 437. $cw=&$this->CurrentFont['cw']; 438.

439. 440. if($w==0) 441.

442. 443. $w=$this->w-$this->rMargin-$this->x; 444.

445. 446. $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; 447.

448. 449. $s=str_replace("\r",'',$txt); 450.

451. 452. $nb=strlen($s);

453.

454. 455. if($nb>0 and $s[$nb-1]=="\n") 456.

457. 458. $nb--; 459.

460. 461. $sep=-1; 462.

463. 464. $i=0; 465.

466. 467. $j=0; 468.

469. 470. $l=0; 471.

472. 473. $nl=1; 474.

475. 476. while($i<$nb) 477.

478. 479. { 480.

481. 482. $c=$s[$i]; 483.

484. 485. if($c=="\n") 486.

487. 488. { 489.

490. 491. $i++; 492.

493. 494. $sep=-1; 495.

496. 497. $j=$i; 498.

499. 500. $l=0; 501.

502. 503. $nl++; 504.

505. 506. continue; 507.

508.

509. } 510.

511. 512. if($c==' ') 513.

514. 515. $sep=$i; 516.

517. 518. $l+=$cw[$c]; 519.

520. 521. if($l>$wmax) 522.

523. 524. { 525.

526. 527. if($sep==-1) 528.

529. 530. { 531.

532. 533. if($i==$j) 534.

535. 536. $i++; 537.

538. 539. } 540.

541. 542. else 543.

544. 545. $i=$sep+1; 546.

547. 548. $sep=-1; 549.

550. 551. $j=$i; 552.

553. 554. $l=0; 555.

556. 557. $nl++; 558.

559. 560. } 561.

562. 563. else 564.

565.

566. $i++; 567.

568. 569. } 570.

571. 572. return $nl; 573.

574. 575. } 576.

577. 578. } //end of class 579.

580. 581. 582.

583. 584. /* contoh penggunaan dengan data diambil dari database mysql 585.

586. 587. 588. *

589. 590. 591. * 1. buatlah database di mysql

592. 593. 594. * 2. buatlah tabel 'pegawai' dengan field: nip, nama, alamat, email dan website

595. 596. 597. * 3. isikan beberapa contoh data ke tabel pegawai tersebut.

598. 599. 600. *

601. 602. 603. * */

604. 605. 606.

607. 608. #koneksi ke database (disederhanakan) 609.

610. 611. mysql_connect ("localhost", "root", ""); 612.

613. 614. mysql_select_db ("demo"); 615.

616. 617. 618.

619. 620. #ambil data dari DB dan masukkan ke array 621.

622. 623. $data = array(); 624.

625. 626. $query = "SELECT nip, nama, alamat, email, website FROM pegawai ORDER BY nama"; 627.

628. 629. $sql = mysql_query ($query); 630.

631. 632. while ($row = mysql_fetch_assoc($sql)) { 633.

634. 635. array_push($data, $row); 636.

637. 638. } 639.

640. 641. 642.

643. 644. //pilihan 645.

646. 647. $options = array( 648.

649. 650. 'filename' => '', //nama file penyimpanan, kosongkan jika output ke browser 651.

652.

653. 'destinationfile' => '', //I=inline browser (default), F=local file, D=download 654.

655. 656. 'paper_size'=>'F4', //paper size: F4, A3, A4, A5, Letter, Legal 657.

658. 659. 'orientation'=>'P' //orientation: P=portrait, L=landscape 660.

661. 662. ); 663.

664. 665. 666.

667. 668. $tabel = new FPDF_AutoWrapTable($data, $options); 669.

670. 671. $tabel->printPDF(); 672.

673. 674. ?> 675.

Referensi Tutorial

Step by Step PHP Membuat Laporan PDF dengan FPDF Dokumentasi FPDF Table with Multicells

Sumber : http://simasdap.blogspot.com/2012/06/membuat-auto-wrap-content-pada-tabel.html#ixzz2JGE1Qqy0

Membuat Sistem Login Multi User Dengan Penggunaan Sessions Dalam PHP

Pada kesempatan kali ini saya akan mencoba kembali menulis tutorial mengenai PHP, dan kali ini yang akan kita bahas adalah bagaimana caranya membuat sistem login multi user dalam penggunaan SESSIONS yang tersimpan. Mungkin masih ada yang bertanya, Apa itu Sessions...?Pengertian menurut saya mengenai Sessions adalah informasi Website yang tersimpan di Server yang terkait dengan Browser yang kita gunakan, dan sessions ini banyak di gunakan dalam proses Login dan Logout pada Applikasi Website.

Lalu informasi seperti apakah yang tersimpan itu...? Tergantung dari si pembuat applikasi tersebut, informasi seperti apakah yang ingin di simpan nya, dan biasanya ini di gunakan untuk menyimpan informasi username, kata sandi dan informasi-informasi lain yang di perlukanya untuk mengakses website tersebut. Langsung menuju praktek nya...! Dalam contoh ini saya akan membuat sebuah applikasi website yang memiliki 3 golongan user dengan hak akses yang berbeda untuk login ke website tersebut, dan satu di antaranya memiliki akses sebagai Admin website. Mari kita buat sebuah database nya terlebih dahulu, misalkan bernama login_user

Setelah database baru bernama login_user di buat, kemudian buatlah sebuah table pada database tersebut, misalkan bernama tab_user dan nama-nama kolom nya adalah user_id, username, password,user_nama, dan user_akses. Silahkan gunakan phpMyAdmin untuk membuat nya, dan jangan lupa untuk kolom user_id gunakan sebagai INDEXS database dengan jenis PRIMARY, dan jenis kolom nya dibuat INT dengan penerapanAUTO_INCREMENT supaya nomor urut nya otomatis pada saat menambahkan user baru. Untuk membedakan hak akses user...! Pada kolom user_akses dibuat dengan type ENUM dengan isian nilainya misalkan"gratis","premium","admin" hal ini dimaksudkan untuk membedakan hak akses user tersebut saat login ke website, dan nantinya akan kita simpan pada sessions. Jika masih bingung dengan pembuatan table database di atas, silahkan copy kan struktur table database di bawah ini, kemudian paste pada database bernama login_user yang telah anda buat pada phpMyAdmin. Untuk phpMyAdmin dengan InnoDB:

--- Struktur dari tabel `tab_user` --

CREATE TABLE IF NOT EXISTS `tab_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `user_nama` varchar(50) NOT NULL, `user_akses` enum('gratis','premium','admin') NOT NULL DEFAULT 'gratis', UNIQUE KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Untuk phpMyAdmin Dengan MyISAM:

--- Table structure for table `tab_user` -CREATE TABLE `tab_user` ( `user_id` int(11) NOT NULL auto_increment, `username` varchar(50) collate latin1_general_ci NOT NULL, `password` varchar(50) collate latin1_general_ci NOT NULL, `user_nama` varchar(50) collate latin1_general_ci NOT NULL, `user_akses` enum('gratis','premium','admin') collate latin1_general_ci NOT NULL default 'gratis', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1;

Kemudian setelah selesai membuat struktur database dan kolom-kolom nya, insert kan beberapa contoh user pada database tersebut, misalkan seperti contoh di bawah ini:

user_id username password user_nama user_akses Andi 1 andi 1234 gratis Doang Toto 2 toto 1234 premium Kuncoro Calim 3 calim 1234 admin Weh 4 widia 1234 Widia gratis

Yatin
Jika masih bingung untuk membuat contoh user nya, silahkan masukan 4 data user di bawah ini kepada struktur tabel tab_user yang telah di buat:

--- Dumping data untuk tabel `tab_user` -INSERT INTO `tab_user` (`user_id`, `username`, `password`, `user_nama`, `user_akses`) VALUES (1, 'andi', '1234', 'Andi Doang', 'gratis'), (2, 'toto', '1234', 'Toto Kuncoro', 'premium'), (3, 'calim', '1234', 'Calim Weh', 'admin'), (4, 'widia', '1234', 'Widia Yatin', 'gratis');
Sekarang kita saat nya membuat script php untuk table 'tab_user' yang telah di buat pada database tersebut, dimulai dari pertama user login menggunakan form login, dan proses penyimpanan sessions apabila user tersebut memiliki akses dan sudah ada pada database tersebut. Untuk pembuatan applikasi nya, pertama-tama buatlah sebuah script PHP sebagai koneksi ke MYSQLterlebih dahulu, yang nantinya akan kita include kan ke script php untuk pemrosesan login user, kurang lebih seperti ini : koneksi.php

<?php $server = "localhost"; $username = "root"; $password = "passwordya"; $database = "login_user"; // Koneksi dan memilih database di server mysql_connect($server,$username,$password) or die("Koneksi gagal"); mysql_select_db($database) or die("Database tidak bisa dibuka"); ?>
Kemudian buat lah sebuah formulir untuk login user nya, misalkan pada form.php

<form name='login' action='proses.php' method='post'> <table> <tr> <td>Username</td> <td>:</td> <td><input type='text' name='username' value='username' /></td> </tr> <tr> <td>Password</td> <td>:</td> <td><input type='password' name='password' value='password' /></td> </tr> </table>

<input type='submit' name='submit' value="Login!" /> </form>


Script form PHP di atas di include kan pada file index.php. Apabila seorang user akan login dengan mengisi form pada form.php di atas, maka akan di proses oleh script proses.php seperti ini : proses.php

<?php include "koneksi.php"; $username = $_POST['username']; $password = $_POST['password']; $login = mysql_query("SELECT * FROM tab_user WHERE username='$username' AND password='$password'"); $hasil = mysql_num_rows($login); $r = mysql_fetch_array($login); if ($hasil > 0) { session_start(); session_register("user_id"); session_register("username"); session_register("password"); session_register("user_akses"); $_SESSION[user_id] = $r[user_id]; $_SESSION[username] = $r[username]; $_SESSION[password] = $r[password]; $_SESSION[user_akses] = $r[user_akses]; header('location:index.php'); } else{ echo "LOGIN GAGAL! <br> <a href='index.php'><< Kembali</a>"; } ?>
Proses di atas, jika user terdapat pada database, maka akan menyimpan 4 sessions yaitu user_id,username, password, dan user_akses. kemudian mengarah kanya kepada script index.php dan jika user tidak ada pada database, maka akan menghasil kan string LOGIN GAGAL! Coba anda perhatikan SESSIONS yang di register pada script di atas, bahwa kolom user_nama tidak di register kan pada sessions, padahal kolom user_nama di buat pada database di atas...! Sengaja saya buat demikian, karena untuk pembuatan applikasi website tentunya memerlukan detail user yang lebih lengkap, seperti alamat user, email user, nomor hp dan sebagai nya, dan jika kita register kan semua pada sessions, maka proses exsekusi script akan menjadi tambah berat untuk loading data nya. Untuk menghindari kekurangan di atas, maka di gunakan query_mysql untuk memproses pengambilan data-data yang lain pada database, seperti user_nama, dan data-data user lainya apabila ada dan di perlukan untuk applikasi tersebut, lihat pada script index.php. index.php

<?php session_start(); include "koneksi.php"; error_reporting(0);

if (empty($_SESSION['username']) AND empty($_SESSION['password'])){include"form.php";} else{ ?> <!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> <title>Login Multi User!</title> </head> <body> <?php $sql = mysql_query("SELECT * FROM tab_user WHERE user_id = '$_SESSION[user_id]'"); while ($data = mysql_fetch_array($sql)) { $user_nama = $data['user_nama']; } ?> <h2>Selamat Datang <?php echo "$user_nama"; ?>!</h2> <?php if ($_SESSION[user_akses] == "gratis") { echo "Kamu login sebagai user Gratis! <a href='logout.php' title='Keluar!'>Keluar</a>"; } if ($_SESSION[user_akses] == "premium"){echo "Kamu login sebagai user Premium! <a href='logout.php' title='Keluar!'>Keluar</a>";} if ($_SESSION[user_akses] == "admin"){echo "Kamu login sebagai user Admin! <a href='logout.php' title='Keluar!'>Keluar</a>";} if ($_SESSION[user_akses] == ""){echo "Kamu tidak memiliki akses kesini!";} ?> </body> </html> <?php } ?>
Untuk menghapus SESSIONS yang tersimpan gunakan fungsi perintah session_destroy() Lihat pada script logout.php di bawah ini: logout.php

<?php session_start(); session_destroy(); echo "<script>document.write('Kamu sudah keluar dari halaman member!'); window.location = 'index.php'</script>"; ?>
Sumber : http://simasdap.blogspot.com/2012/09/membuat-sistem-login-multi-user-dengan.html#ixzz2JGE945PK

eberapa Error di PHP, Penyebabnya, dan Solusinya


Seiring dengan bertambahnya usia, semakin bertambah banyak pula pertanyaan yang disampaikan oleh para pengunjung. Dalam artikel kali ini, saya mencoba merangkum beberapa pertanyaan yang sering ditanyakan oleh pengunjung seputar error yang mereka jumpai dan bagaimana cara mengatasinya. Bunyi Error:

1.Warning: mysql_fetch_array(): supplied argument is not 2.a valid MySQL result resource in ....
atau

1.Warning: mysql_num_rows(): supplied argument is not 2.a valid MySQL result resource in ...
Penyebab: Error di atas disebabkan ada query SQL yang salah. Bisa jadi karena sintaks perintah query SQL nya salah, misalnya kurang tanda petik untuk menyatakan string dll. Selain itu bisa juga terjadi karena nama field dan tabel yang salah penulisannya. Solusi: Coba cek kembali statement query SQL Anda. Pastikan tidak ada lagi kesalahan dalam penulisannya. Untuk proses debugging query SQL (mengetahui letak kesalahannya), Anda bisa menambahkan

die(mysql_error()) pada perintah mysql_query() nya. Contoh: 1.$query = "....."; 2.mysql_query($query) or die(mysql_error()); 3.. 4..
statement atau silakan baca kembali teknik debugging script php mysql. Bunyi Error:

1.Warning: session_start() [function.session-start]: 2.Cannot send session cookie - headers already sent by 3.(output started at ... ) in ... on line ...
atau

1.Warning: session_start() [function.session-start]: 2.Cannot send session cache limiter - headers already sent 3.(output started at ...) in ... on line ...
Penyebab: Error di atas biasanya terjadi pada penggunaan session. Sewaktu memberikan perintah session_start(), terdapat baris perintah di atasnya yang menampilkan string atau kode html ke browser. Sebagai contoh, perhatikan script berikut ini:

1.<?php 2.echo "Hallo..."; 3.session_start(); 4.?>


atau

1.<html> 2.<head> 3.<title>....</title> 4.</head>

5.<?php 6.session_start(); 7.?>


Bila Anda perhatikan script di atas, maka terdapat string yang di-echo-kan atau terdapat kode html yang diletakkan sebelum session_start(). Nah inilah yang menyebabkan error. Selain contoh di atas, error juga bisa muncul dari script yang berbentuk seperti ini

1.<?php 2.include "header.php"; 3.session_start(); 4.?> Meskipun sebelum session_start() tidak ada echo atau kode html, namun error akan tetap
muncul apabila isi dari script header.php terdapat echo atau kode html juga, misalnya header.php

1.<?php 2.echo "hallo"; 3.?>


Solusi: Pastikan sebelum perintah apapun. Bunyi Error:

session_start() tidak terdapat perintah echo atau kode html

1.Warning: Cannot modify header information headers already sent by 2.(output started at ...) in ...
Penyebab: Peringatan di atas biasanya muncul ketika Anda melakukan redirecting menggunakan perintah

1.header("Location: ..."); Seharusnya, sebelum perintah header("Location: ...") tidak boleh ada string apapun
yang ditampilkan di browser, meskipun itu kode HTML (sama seperti penyebab error

session_start() sebelumnya). Sebagai contoh perhatikan script berikut ini: 1.<?php 2.echo "<p>Hallo Apa kabar?</p>"; 3.header("Location: test.php"); 4.?> Pada script di atas, sebelum perintah header() terdapat string yang ditampilkan ke browser. Inilah
di yang mengakibatkan muncul peringatan tsb. Lantas bagaimana dengan script berikut ini?

1.<?php 2.$a = 10; 3.if ($a < 0) echo "Nilai A negatif"; 4.else header("Location: test.php"); 5.?>
Kira-kira muncul Warning nya gak ya? Jika Anda coba, maka tidak muncul Warning nya meskipun sebelum header() terdapat string yang ditampilkan ke browser. Mengapa demikian? ya.. meskipun di situ terdapat perintah untuk menampilkan string ke browser, namun perintah tersebut tidak pernah

dijalankan karena nilai Solusi: perintah

$a nya positif.

header("Location: ...") tidak ada kode HTML atau echo apapun. Jika Anda mengincludekan suatu script di atas header("Location: ...") pastikan dalam script yang diincludekan tersebut tidak ada kode HTML atau echo.
Pastikan sebelum perintah Bunyi Error:

1.Warning: mysql_connect() [function.mysql-connect]: 2.Access denied for user root@'localhost (using password: YES) in ...
Penyebab: Error di atas disebabkan karena koneksi yang gagal ke MySQL. Penyebab gagalnya bisa jadi disebabkan nama user atau password yang salah. Solusi: Pastikan username dan password koneksi ke MySQL Anda sudah benar ketika menggunakan perintah

mysql_connect("namahost", "namauser", "passworduser");


koneksi Bunyi Error:

1.Parse error: syntax error, unexpected T_STRING, 2.expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or } in ...
Penyebab: Penyebab pastinya, saya kurang mengetahuinya. Namun biasanya ini terjadi karena penggunaan versi PHP yang rendah (versi di bawah PHP 5) untuk menjalankan script PHP yang menggunakan OOP. Solusi: Coba upgrade versi PHP Anda, atau gunakan PHP dengan versi yang lebih tinggi. Bunyi Error:

1.Parse error: syntax error, unexpected T_ELSE in ...


Penyebab: Error tersebut muncul sebagai akibat penulisan sintaks IF ELSE yang tidak sesuai aturan. Perhatikan contoh penggunaan IF ELSE yang salah di bawah ini

1.<?php 2.$a = 5; 3.if ($a > 0) $status = "A lebih besar dari 0" 4.else ($a < 0) $status = "A lebih kecil dari 0" 5.else $status = "A sama dengan 0" 6.?>
Contoh di atas terdapat kesalahan yaitu setiap akhir statement tidak diberikan tanda titik koma (;), dan pada

else ($a < 0) kurang IF, seharusnya 1.<?php 2.$a = 5; 3.if ($a > 0) $status = "A lebih besar dari 0";
bagian

4.else if ($a < 0) $status = "A lebih kecil dari 0"; 5.else $status = "A sama dengan 0"; 6.?>
Solusi: Pastikan struktur statement yang Anda gunakan berbentuk seperti ini

1.<?php 2.if (syarat1) statement1; 3.else if (syarat2) statement2; 4.else if (syarat3) statement3; 5.. 6.. 7.else statementX; 8.?>
atau

01.<?php 02.if (syarat1) 03.{ 04.statement; 05.statement; 06.. 07.. 08.} 09.else if (syarat2) 10.{ 11.statement; 12.statement; 13.. 14.. 15.} 16.. 17.. 18.else 19.{ 20.statement; 21.statement; 22.. 23.. 24.} 25.?>
Bunyi Error:

1.Fatal error: Call to undefined function: ...


Penyebab: Error tersebut disebabkan karena nama function yang digunakan tidak ada atau tidak dikenal oleh PHP. Jika function tersebut adalah built in function, misalnya str_split() bisa jadi hal ini disebabkan pada versi PHP yang digunakan belum ada function tersebut. Jika function tersebut adalah function buatan sendiri, bisa jadi anda lupa menyisipkan ke dalam script atau meng-include-kannya. Solusi: Jika function yang tidak dikenal adalah built in function, maka lakukan upgrade versi PHP yang lebih tinggi. Sedangkan jika function yang tidak dikenal adalah buatan sendiri, pastikan Anda sudah meng-includekan di dalam scriptnya sehingga bisa dikenal. Contohnya: function.php

1.<?php 2.function jumlah($a, $b) 3.{ 4.return $a + $b; 5.} 6.?>


script.php

1.<?php 2.include "function.php"; 3.echo jumlah(9, 10); // akan menghasilkan 19 4.?>


atau script.php

1.<?php 2.function jumlah($a, $b) 3.{ 4.return $a + $b; 5.} 6. 7.echo jumlah(9, 10); // akan menghasilkan 19 8.?>
Bunyi Error:

1.Parse error: parse error, unexpected $end


Penyebab: Error di atas disebabkan karena kurangnya tanda penutup kurung kurawal. Contohnya:

1.<?php 2.if ($a > 1) 3.{ 4.echo "Nilai A lebih dari 1"; 5.?>
atau

1.<?php 2.while ($a > 1)

3.{ 4.. 5.. 6.. 7.?>


Selain itu, bisa pula error tersebut disebabkan karena efek perbedaan penggunaan tanda pembuka

<?php dan <?. Contohnya 01.<?php 02.if (syarat) 03.{ 04.statement1; 05.statement2; 06.?> 07. 08.<? 09.statement3; 10.statement4; 11.} 12.?>
PHP Perhatikan contoh script di atas, bahwa pada blok statement IF oleh si programmer dipecah menjadi 2 blok,

<? saja. Nah... terkadang <?php, sehingga untuk blok kedua tidak dianggap sebagai script, dan.. akibatnya statement IF nya dianggap tidak ada tanda } penutup.
namun perhatikan bahwa untuk blok kedua, tanda pembukanya menggunakan suatu server hanya membolehkan tanda pembuka script PHP menggunakan Solusi: Pastikan tanda kurung kurawal penutup tidak lupa menuliskannya. Jika ternyata kasus yang Anda hadapi sama seperti contoh kasus terakhir (perbedaan tanda pembuka script PHP), konsistenkan penulisan tanda pembukanya menggunakan Bunyi Error:

<?php supaya aman.

1.Parse error: syntax error, unexpected T_STRING


Penyebab: Error tersebut disebabkan karena penggunaan tanda petik (double quote atau single quote) yang tidak tepat untuk menyatakan suatu string. Sebuah string harus diapit oleh dua buah tanda petik. Sebagai contoh:

1.<?php 2.$a = "ini sebuah string"; 3.?>


atau

1.<?php 2.$a = 'ini sebuah string'; 3.?>


Namun... jika dalam string tersebut terdapat tanda petik lagi, misalkan

1.<?php 2.$a = "ini sebuah " string";

3.?>
atau

1.<?php 2.$a = 'ini sebuah ' string'; 3.?>


maka akan terdapat error di atas. Hal yang sama jika Anda menggunakan single quote (tanda petik tunggal). Solusi: Pastikan di dalam sebuah string, anda mengapitnya dengan hanya 2 buah tanda petik saja. Jika Anda bermaksud menyisipkan tanda petik dalam sebuah string, gunakan tanda

\" atau \', contoh

1.<?php 2.$a = "ini sebuah \" string"; 3.?>


atau

1.<?php 2.$a = 'ini sebuah \' string'; 3.?>


Bunyi Error:

1.Notice: Undefined index: ...


atau

1.Notice: Undefined variable: ...


Penyebab: Sebenarnya itu bukan error, namun sekedar peringatan saja bahwa ada variabel atau index array yang belum terdefinisi sebelumnya. Di beberapa versi PHP peringatan tersebut muncul, namun di versi yang lain tidak muncul. Berikut ini contohnya:

1.<?php 2.if ($a > 0) 3.{ 4..... 5.} 6.?> $a langsung diberikan statement pengecekan IF, padahal $a ini tidak ada sebelumnya. Nah... di beberapa versi PHP, akan muncul peringatan 1.Notice: Undefined variable: a Namun, bila nilai $a ini sudah didefinisikan sebelumnya misalnya 1.<?php 2.$a = 10; 3.if ($a > 0) 4.{ 5..... 6.} 7.?>
Jika kita perhatikan script di atas, variabel nilai maka peringatan di atas tidak akan muncul lagi. Peringatan yang hampir sama juga bisa muncul untuk contoh berikut ini

1.<?php 2.if ($_GET['test'] == 0) 3.{ 4..... 5.} 6.?> yang dikarenakan nilai $_GET['test'] belum terdefinisi sebelumnya atau belum ada nilainya
(belum ada request GET untuk parameter 'test'). Solusi: Sebenarnya peringatan di atas bisa saja diabaikan karena tidak berpengaruh pada kinerja script atau proses yang terjadi di dalamnya. Namun, jika Anda ingin menghilangkan peringatan tersebut caranya adalah dengan memodifikasi parameter

1.error_reporting = ...
pada file konfigurasi php.ini Tambahkanlah nilai "&

~E_NOTICE" pada nilai parameternya, contoh: 1.error_reporting = E_ALL & ~E_NOTICE


Maksud dari parameter di atas adalah, PHP akan menampilkan bunyi error kecuali NOTICE. Jika sudah, silakan merestart Apache nya. Bunyi Error:

1.Fatal error: Maximum execution time of ... seconds exceeded in ...


Penyebab: Error di atas disebabkan karena lama eksekusi sebuah script PHP telah mencapai batas maksimumnya. Jika Anda menggunakan AppServ atau XAMPP, default maximum execution time nya diset 30 detik. Jika lama eksekusi script yang Anda buat melebihi 30 detik, maka akan muncul error di atas. Solusi: Anda dapat meningkatkan atau menambah max execution time pada file php.ini, dengan cara carilah parameter

1.max_execution_time = ...
Tambahlah nilainya, misalnya menjadi 9999 detik, sehingga nilai parameternya menjadi

1.max_execution_time = 9999
Selanjutnya, simpan kembali php.ini nya, lalu restart Apachenya. Kalau perlu, lakukan analisis algoritma pada script Anda apabila dirasa tidak efisien sehingga mengakibatkan running time yang lama. Bunyi Error: Bukan Error sih, tapi kegagalan dalam proses upload file ketika Anda membuat script upload file. Penyebab: Kegagalan dalam proses upload file itu disebabkan oleh ukuran file yang terlalu besar melebihi batas maksimum yang diperbolehkan oleh PHP sesuai di file php.ini. Solusi: Anda dapat mengubah batas maksimum file size untuk upload ini dengan mengubah parameter

1.upload_max_filesize = ...
dan

1.post_max_size = ...
pada file php.ini Berikut ini contoh pengubahan batas maksimum upload file hingga 80 Mb.

1.upload_max_filesize = 80M

dan

1.post_max_size = 80M
Jika sudah melakukan pengubahan, lakukan restart Apache nya. Oya, jangan lupa pula untuk menambah komponen input

1.<input type="hidden" name="MAX_FILE_SIZE" value="800 00000" />


pada form upload nya. Solusi di atas hanya akan bisa menyelesaikan permasalahan upload jika file diupload ke folder atau direktori tertentu yang ada di server. Namun, jika file diupload ke database server, seperti pada artikel lain yang pernah dibahas, maka solusi di atas tidak menyelesaikan masalah karena adanya batasan limit file size pada tipe data yang memungkinkan untuk menyimpan data file, misalnya tipe data blob, medium blob, atau long blob. OK.. mudah-mudahan artikel di atas bisa bermanfaat bagi Anda yang ingin belajar PHP, namun terkendala beberapa macam error yang belum tahu penyebabnya dan solusinya.

Sumber : http://simasdap.blogspot.com/2012/09/beberapa-error-di-php-penyebabnya-dan.html#ixzz2JGEHxrRp

Menggabungkan Beberapa File Dalam PHP


Jika pada artikel-artikel sebelumnya kita hanya bekerja dengan 1 file saja, kali ini kita akan coba belajar bagaimana bekerja dengan beberapa file. Bagaimanapun, saat anda membangun sebuah script yang rumit, memecah script menjadi beberapa bagian sangatlah membantu anda mengorganisir script anda. Ada 2 fungsi yang bisa kita pakai untuk bekerja dengan beberapa file yaitu include dan include_once. Mari kita coba pelajari keduanya. INCLUDE

Perintah include kita pakai untuk memanggil file lain untuk dieksekusi di file pemanggilnya. Seperti biasa, kita buat contoh aja yuk. Pertama kita buat file yang akan dipanggil, sebut saja namanya data.php. Isinya seperti ini: <!--?php $anak = array( array(nama =-->'Bejo', alamat => 'Surabaya', hp => '7837487397493'), array(nama =>'Paijo', alamat => 'Malang', hp => '0897483743434'), array(nama =>'Panjul', alamat => 'Jakarta', hp => '3435364364645'), array(nama =>'Pinah', alamat => 'Medan', hp => '65464565646'), array(nama =>'Mintul', alamat => 'Samarinda', hp => '045264743775') ); ?> Yup, itu adalah array dari pelajaran kita sebelumnya.. hehehe.. Oke, kemudian di file kedua, kita sebut saja namanya list.php kita buat seperti ini: <!--?php include('data.php'); foreach ($anak as $item) { echo 'Nama: '.$item[nama]. 'Alamat: '.$item[alamat].' HP: '.$item[hp].'<br/-->'; } ?> Jika kita menjalankan list.php maka kita akan mendapatkan hasil yang persis seperti artikel sebelumnya. Bedanya dengan cara ini, kita bisa memanfaatkan data.php untuk file-file lain. Sehingga jika suatu saat data-

nya perlu dirubah, kita hanya perlu mengubah file data.php saja dan efeknya akan dipakai di semua file yang mengandung include data.php Saya sendiri lebih sering memakai ini untuk memasukkan header dan footer suatu web sehingga saya cuma perlu memanggilnya saja untuk page-page baru yang lain. INCLUDE_ONCE Seperti namanya, ini persis sebagaimana fungsi include. Tapi include_once kita pakai untuk memanggil file hanya sekali saja. Dengan cara ini, kita bisa mencegah file terpanggil lebih dari sekali. Biasanya kita pakai include_once untuk memanggil file yang mengandung fungsi-fungsi yang kita bangun sendiri atau memanggil file yang berisi koneksi ke database. Sudah cukup mudah dipahami kan? Selamat mencoba sendiri.

Sumber : http://simasdap.blogspot.com/2012/06/menggabungkan-beberapa-file-dalam-php.html#ixzz2JGENWBnf

You might also like