BERBAGAI TUTORIAL PHP Editor
Agustinus
MUJILAN, S.E., M.Sc.
Edisi 1 Versi 2013.01.17
2013
Akuntansi – F. Ekonomi Unika Widya Mandala Madiun © penulis
i
DASAR PHP Pemrograman berorientasi objek paling tidak memiliki konsep: kelas (classes of objects), instansi (instance of objects), metode objek (method attached objects), penyampaian pesan (message passing) dan abstraksi (abstraction). Kelas (class)berisikan fungsi-fungsi (function) yang membentuk kelas objek. Instansiasi (instance) adalah peristiwa pembuatan objek dari suatu kelas, metode ini disebut metode objek (method attached objects). Suatu objek dalam OOP bisa menyampaikan pesan (message passing) kepada satu atau banyak proses. Setiap proses yang terjadi di dalam pemrograman bersifat abstrak (abstraction), yang mana suatu proses yang terjadi dapat saling berhubungan dengan beberapa objek di dalam sistem. Semua ini juga yang terjadi di dalam pemrograman PHP OOP atau PHP berbasis objek. (http://roes-wibowo.com/object-oriented-programming-php-oop/)
1
CLASS Sumber: http://roes-wibowo.com/class-function-instance-object-php-php-oop/
Konsep dasar pembuatan class
PEMBUATAN FUNGSI
PEMBUATAN INSTAN & OBJEK
CONTOH APLIKASI: cetak(); // Hasilnya: Cetak berhasil! $jajal = new coba(); // Membuat Instance untuk Object baru dengan variabel jajal $jajal -> cetak(); // Hasilnya: Cetak berhasil! ?>
2
Sumber: http://php.net/manual/en/keyword.class.php A class is a collection of variables and functions working with these variables. Variables are defined by var and functions by function. A class is defined using the following syntax:
// Items in our shopping cart
// Add $num articles of $artnr to the cart function add_item($artnr, $num) { $this->items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } elseif ($this->items[$artnr] == $num) { unset($this->items[$artnr]); return true; } else { return false; } } } ?>
FRAMEWORK SEDERHANA Agar class dapat dipanggil secara otomatis dalam program maka kita perlu membangun class-class tersebut dalam suatu file yang dapat dipanggil. Beberapa saran: 1. Buatlah folder-folder yang akan dipakai seagai tempat penyimpanan class-class php yang telah dibuat, misalkan folder root nya adalah myframework, kemudian taruh lah folder controller, model, view, dan library di dalamnya. 2. Buatlah class autoload nya yang sejajar dengan file index nya. Adapun class autoload nya adalah sebagai berikut: berinama file class nya bootstrap.php Coding dari: http://bptik.unnes.ac.id/artikel/membuat-php-framework-sederhana-part-1/ ---------------------------------------------------ini_set('unserialize_callback_func', 'spl_autoload_call'); class autoloader { public static $loader; public static function init() { if (self::$loader == NULL) self::$loader = new self(); return self::$loader; } public function __construct() {
3
spl_autoload_register(array($this,'model')); spl_autoload_register(array($this,'library')); spl_autoload_register(array($this,'controller')); } public function library($class) { set_include_path($_SERVER['DOCUMENT_ROOT'] . implode('/',array_slice(explode('/',$_SERVER['PHP_SELF']),0,1)).'/library/'); spl_autoload_extensions('.php'); spl_autoload($class); } public function model($class) { set_include_path($_SERVER['DOCUMENT_ROOT'] . implode('/',array_slice(explode('/',$_SERVER['PHP_SELF']),0,1)).'/model/'); spl_autoload_extensions('.php'); spl_autoload($class); } public function controller($class) { set_include_path($_SERVER['DOCUMENT_ROOT'] . implode('/',array_slice(explode('/',$_SERVER['PHP_SELF']),0,1)).'/controller/'); spl_autoload_extensions('.php'); spl_autoload($class); } } autoloader::init();
------------------------------------------------------------------------------------------Adapun penjelasan class nya adalah sebagai berikut: 1. class kita berinama autoloader, disana kita deklarasikan sebuah variabel public static loader, artinya varibel tersebut bersifat public sehingga dapat diakses diluar class itu sendiri dengan berbeda file, dan besifat static sehingga dapat dipanggil tanpa harus melakukan instance berulang-ulang. 2. fungsi ini berfungsi untuk menginstance class autoloader di dalam class itu sendiri, sehingga nanti kita cukup memanggil fungsi tersebut tanpa harus menginstance nya terlebih dahulu. 3. pada fungsi _construct yang merupakan fungsi konstruktor class autoloader sehingga akan dijalankan terlebih dahulu ketika class tersebut di instance. Di sana semua folder controller, library, dan model akan di register atau didaftarakan kedalan cache yang di serialisasi sehingga class-class didalamnya akan didaftarkan untuk melakukan overloading. 4. fungsi model, libary, dan controller berfungsi untuk mengautoload file-file class nya. 5. fungsi autoload dipanggil dengan autoload::init() karena class autoload di instance di dalam class nya itu sendiri. Kemudian setting di dalam file index.php nya sebagai berikut: ob_start(); require_once realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'bootstrap.php'; ...... ob_flush();
4
Referensi Php.net, “PHP Manual”, diakses dari: php.net, diakses tanggal: 13 Januari 2013 http://roes-wibowo.com, diakses tanggal: 13 Januari 2013 BPTIK (Badan Pengembangan Teknologi Informasi) Unnes (2013), ‘Membuat PHP Framework Sederhana Part 1’, diakses dari: http://bptik.unnes.ac.id/artikel/membuat-php-frameworksederhana-part-1/, diakses tanggal: 13 Januari 2013.
5
DATABASE & TABLE Database Syntax membuat database bar CREATE DATABASE database_name
Sumber coding: http://www.w3schools.com/php/php_mysql_create.asp
Table database Syntax membuat table database CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, .... )
Contoh aplikasi
6
// Create table mysql_select_db("my_db", $con); $sql = "CREATE TABLE Persons ( FirstName varchar(15), LastName varchar(15), Age int )"; // Execute query mysql_query($sql,$con); mysql_close($con); ?>
Primary Keys and Auto Increment Fields $sql = "CREATE TABLE Persons ( personID int NOT NULL AUTO_INCREMENT, PRIMARY KEY(personID), FirstName varchar(15), LastName varchar(15), Age int )"; mysql_query($sql,$con);
Referensi http://www.w3schools.com/php/php_mysql_create.asp; diakses pada 14 Januari 2013-01-14
7
MYSQL RELATIONSHIP One to One Relationship CREATE TABLE dog ( id int(11) NOT NULL auto_increment, name varchar(255), descr text, size enum('small','medium','large'), date timestamp(14), PRIMARY KEY (id) );
**** isikan beberapa data *** CREATE TABLE rfid_dog ( dog_id int(11) NOT NULL, bar_code varchar(128) NOT NULL, notes text, iso_compliant enum('y','n') DEFAULT 'n', date timestamp(14), PRIMARY KEY (dog_id) );
*** isikan beberapa data **** SELECT dog.id, dog.name, rfid_dog.bar_code AS rfid FROM dog,rfid_dog WHERE dog.id = rfid_dog.dog_id ORDER BY dog.name ASC;
Sehingga hasilnya +----+--------+-----------------------+ | id | name | rfid | +----+--------+-----------------------+ | 3 | Buster | 30id8383837210jndal20 | | 2 | Jake | 09383638920290397d829 | | 1 | Max | 234k34340ll2342323022 | +----+--------+-----------------------+
One to Many Tambahkan tabel database berikut CREATE TABLE breed ( id int(11) NOT NULL auto_increment, name varchar(255), descr text, date timestamp(14),
8
PRIMARY KEY (id) );
SELECT dog.id,dog.name,breed.name AS breed FROM dog,breed WHERE dog.breed_id = breed.id ORDER BY dog.name ASC;
Hasil +----+--------+---------+ | id | name | breed | +----+--------+---------+ | 3 | Buster | Terrier | | 2 | Jake | Hounds | | 1 | Max | Hounds | +----+--------+---------+
Many to Many Tambahkan Tabel berikut CREATE TABLE breeder ( id int(11) NOT NULL auto_increment, name varchar(255), address text, state varchar(10), city varchar(40), phone varchar(28), email varchar(28), date timestamp(14), PRIMARY KEY (id) );
CREATE TABLE breed__breeder ( breed_id int(11) DEFAULT '0' NOT NULL, breeder_id int(11) DEFAULT '0' NOT NULL, PRIMARY KEY (breed_id, breeder_id) );
SELECT breeder.name,breeder.address,breeder.phone,breeder.email,breed.name AS breedName FROM breed,breeder,breed__breeder WHERE breed__breeder.breed_id = breed.id AND breed__breeder.breeder_id = breeder.id ORDER BY breeder.name ASC; +------------+--------------+--------------+---------------+-----------+ | name | address | phone | email | breedName | +------------+--------------+--------------+---------------+-----------+ | Joe Bloggs | 23 Smith St | 02 7875 4545 |
[email protected] | Hounds | | Joe Bloggs | 23 Smith St | 02 7875 4545 |
[email protected] | Terrier |
9
| Tom Smith | 11 Tucker St | 07 023 2343 |
[email protected] | Hounds | +------------+--------------+--------------+---------------+-----------+
Keterangan Sumber: http://www.go4expert.com/forums/showthread.php?t=13386 1. Each table MUST be using the InnoDB storage engine. InnoDB is currently the only main-stream storage engine offered by MySQL to support relational design. More on this in my article: MyISAM vs InnoDB 2. The `author_id` field in the `books` table MUST be indexed and the same datatype as the `id` field in `authors`.
Referensi Anchor (2013), Creating A Quick MySQL Relational Database, diakses dari: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase, tanggal akses 13 Januari 2013
10
PENGAMANAN PHPMYADMIN Pengaturan Privillages 1. Buka dengan browser [localhost/phpmyadmin] 2. Klik privilleges 3. Pada user [misal: “root, localhost”] klik tanda pensil untuk edit; edit juga user ‘pma’ untuk pengguna phpmyadmin-nya. 4. Pada change password isikan passward yang diinginkan
Pengaturan config.inc.php Buka config di folder phpmyadmin dengan windows exsplore (misal: dapat dibuka dengan program notepad atau aplikasi penulisan html lainnya dreamweaver, dsb.) [misal e:\xamp\phpmyadmin\config.inc.php] kemudian edit password dengan edit baru yang telah anda masukkan. 1. Edit auth_type dari config menjadi http atau cookie 2. Edit root user password
/* Authentication type and info */ $cfg['Servers'][$i]['auth_type'] = 'config'; // edit ‘config’ menjadi ‘http’ atau ‘cookie’ $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; // isikan password sesuai yang sudah diedit misal ‘pass’ $cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['AllowNoPassword'] = true; Edit pma user password /* User for advanced features */ $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = '’; // isikan password sesuai yang sudah diedit
Pengaturan mysql.php Pada file “E:\xampp\htdocs\xampp\mysql.php” pada parameter setelah user ditambahkan password untuk phpMyAdmin.
Uji coba Setelah semua langkah dilaksanakan untuk uji coba silahkan tutup browser dan aktifkan kembali phpmyadmin. Jika browser tidak ditutup, kemungkinan terjadi user dan password masih diingat browser sehingga efek dari setting tidak nampak.
11
TroubleShoot Jika terjadi seperti berikut: The additional features for working with linked tables have been deactivated. To find out why click here. Maka dapat disarankan langkah penyelesaian berikut ini. 1. Tambahkan $cfg['Servers'][$i]['tracking'] = 'pma_tracking'; 2. Lihat di database phpmyadmin, jika belum ada tabel ‘pma_tracking’ maka dapat diimport dari \phpMyAdmin\scripts\create_tables.sql
3. Kemudian Log Out PhpMyAdmin-nya di bagian home. Tutup browser dan servernya. Dan jalankan ulang phpmyadmin. Berikut adalah struktur tabel [pma_tracking] CREATE TABLE IF NOT EXISTS `pma_tracking` ( `db_name` varchar(64) collate utf8_bin NOT NULL, `table_name` varchar(64) collate utf8_bin NOT NULL, `version` int(10) unsigned NOT NULL, `date_created` datetime NOT NULL, `date_updated` datetime NOT NULL, `schema_snapshot` text collate utf8_bin NOT NULL, `schema_sql` text collate utf8_bin, `data_sql` longtext collate utf8_bin, `tracking` set('UPDATE','REPLACE','INSERT','DELETE','TRUNCATE','CREATE DA TABASE','ALTER DATABASE','DROP DATABASE','CREATE TABLE','ALTER TABLE','RENA ME TABLE','DROP TABLE','CREATE INDEX','DROP INDEX','CREATE VIEW','ALTER VIE W','DROP VIEW') collate utf8_bin default NULL, `tracking_active` int(1) unsigned NOT NULL default '1', PRIMARY KEY (`db_name`,`table_name`,`version`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT;
Sumber: http://ubuntuforums.org/showthread.php?t=1498520
Referensi http://achmadnasir.wordpress.com/2011/01/07/penambahan-setting-keamanan-pada-mysql-danphpmyadmin-pada-xampp-windows/ ; diakses 17 Januari 2013 http://anriz.com/cara-mengamankan-sql/; diakses 17 Januari 2013 http://serverfault.com/questions/240738/xampp-tracking-disabled-error-in-phpmyadmin; 17 Januari 2013
diakses
http://ubuntuforums.org/showthread.php?t=1498520; diakses 17 Januari 2013
12