Advanced PHP Techniques
3. Building Web Application large project with PHP and MySQL
7.2 File Upload
Hal yang terpenting dari upload file adalah file tidak dapat dikirimkan dalam method GET. Karena ada limitasi besar size dari URL, ±1kb. Sedangkan File biasanya memiliki size lebih besar dari limitasi tersebut. Jadi biasanya digunakan sebuah form sebagai media pengirim file dan method POST.
Selain harus menggunakan method POST, form tersebut harus ditambahkan behaviour berupa ENCTYPE=”multipart/form-data”, di mana pada defaultnya behaviour dari form adalah ENCTYPE=” application/x-www-form-urlencoded”. Tujuannya agar
$_FILES[‘upload’]. Array tersebut dapat menampung nama file, besar size file (dalam bytes), tipe file, lokasi awal file, serta error file.
$_FILES[‘upload’][‘name’]; => menyimpan nama file yang dikirimkan
$_FILES[‘upload’][‘size]; => menyimpan besar file yang dikirimkan
$_FILES[‘upload’][‘tmp_name]; => menyimpan lokasi file dikirim
$_FILES[‘upload’][‘error]; => menyimpan error dari file yang dikirim
Untuk metode penyimpanan file sendiri terdiri dari beberapa jenis, mulai dari penyimpanan file secara fisik (dipindahkan file tersebut ke dalam server) maupun disimpan dalam bentuk binary ke dalam database (bloob).
Jika kita ingin menyimpan bentuk file fisik, kita tidak akan kesulitan dalam men-download file tersebut. Namun perlu diperhitungkan, besar size dari file yang di-upload tersebut akan langsung memotong besar kapasitas hard disk fisik server. Hal ini dapat menimbulkan kerugian, karena kapasitas server menjadi habis. Selain itu riskan untuk terkena file injection (akan dijelaskan di dalam web security). Jika kita menggunakan metode penampungan di database, akan sulit dalam hal penanganan penyimpanan informasi.
File upload (physical) :
Form.php :
<form enctype=”multipart/form-data” method=”POST” action=”Upload.php”>
<input type=”file” name=”tryToUpload” />
<input type=”submit” value=”upload” />
</form>
Upload.php:
Notes : Untuk validasi lainnya bisa ditambahkan sesuai kebutuhan.
Untuk penyimpanan file menggunakan database, anda harus menyiapkan 1 field dengan tipe bloob. Lalu source file yang ada diubah bentuknya menggunakan fungsi file_get_contents(source); lalu di save ke dalam database.
7.3 Paging
Paging adalah konsep menampilkan data per halaman dengan jumlah data per halamannya sesuai yang diinginkan, di bawah ini link contoh script PHP untuk menampilkan 5 data per halaman:
<?php
$host = “localhost”;
$user = “root”;
$pass = “”;
$db = “info”;
$conn = mysql_connect(“$host”,”$user”,”$pass”) or
if(!$_GET['page'])
$page = 0;
else
$page = $_GET['page'];
$qmon = “select * from info order by id desc limit $page,$record_home”;
$query = mysql_query($qmon, $conn);
echo mysql_error();
if(mysql_num_rows($query)==0) {
echo “<BR>Tidak terdapat berita”;
}
<a href=”?page=0″>First</a> – <a
href=”?page=<?=$page-$record_home?>”>Previous</a> -
<?php
}
$nav = “select count(*) from info”;
$query = mysql_query($nav,$conn);
<a href=”?page=<?=$page+$record_home?>”>Next</a> – <a
href=”?page=<?=(ceil($n/$record_home)*$record_home)-$record_home?>”>Last</a>
Fungsi PHP mail() menyediakan fasilitas untuk mengirimkan email secara langsung dari script. Fungsi mail() ini memerlukan program PHP yang sudah diinstall dan juga sistem email yang bekerja. Tidak membutuhkan installasi program tambahan. Program yang digunakan ditentukan oleh pengaturan konfigurasi pada file php.ini.
Runtime Configuration
Sifat dari fungsi mail ini dipengaruhi oleh pengaturan pada file php.ini.
server SMTP
smtp_port “25” Windows: Nomor port
SMTP. Tersedia sejak PHP 4.3
PHP_INI_ALL
sendmail_from NULL Windows:
Menentukan alamat
sendmail_path NULL Unix system:
Menentukan dimana
To Diperlukan. Menentukan penerima email
Subject Diperlukan. Menentukan subyek email. Catatan: parameter ini tidak boleh berisi karakter baris baru
Message Diperlukan. Mendefinisikan pesan yang akan dikirim. Setiap baris harus dipisahkan dengan LF (\ n). Garis tidak boleh melebihi 70 karakter Headers Opsional. Menentukan header tambahan, seperti From, Cc, dan Bcc.
Header tambahan harus dipisahkan dengan CRLF (\ r \ n)
Parameters Opsional. Menentukan parameter tambahan untuk program sendmail Berikut ini merupakan contoh kodingan email dengan nama file “frmMail.php” :
<html>
<title>Simple Mail Form</title>
<body>
<?php
if (isset($_REQUEST['email'])) //if "email" is filled out, send email {
//send email
$email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("[email protected]", "$subject", $message, "From:" . $email);
echo "Thank you for using our mail form";
} else
//if "email" is not filled out, display the form {
echo "<form method='post' action='frmMail.php'>
Email: <input name='email' type='text' /><br />
Subject: <input name='subject' type='text' /><br />
Message:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
Berikut penjelasan contoh kodingan diatas, yaitu:
Pertama, program akan melakukan pengecekan apakah data email sudah terisi atau belum.
Jika data email belum diisi, maka program akan menampilkan tampilan form 2 textbox, 1 textarea, dan 1 button submit.
Setelah data diisi dengan benar, maka program akan masuk ke dalam data yang sudah terisi dan mengirimkan data tersebut ke email dan akan menampilkan pesan “Thank you for using our mail form”
7.5 Exercise
Buatlah sebuah web yang terdapat fitur login untuk menampung session dan terdapat juga fitur file upload dan paging.
Jika NIM/KdDosenatau Password salah maka akan ditampilkan pesan kesalahan pada halaman login.php.
Setting session selama user belum logout dan tampilkan Username yang login pada halaman home.php.
Buatlah menu untuk logout.