Cara upload file di PHP




Tutorial upload di PHP sebenarnya sudah cukup banyak di internet, namun sayangnya sebagian tutorial hanya membahas teknik dasar mengupload. Karena hal itulah kami akan mencoba membuat panduan singkat tentang cara upload file menggunakan PHP dengan beberapa hal terkait validasi file dan rename file.

Skenario

Sebuah website ingin menambahkan fitur upload gambar . Saat user mengupload gambar, maka gambar yang sukses langsung akan ditampilkan di gallery sederhana dibawah form upload tersebut.

Permintaan untuk sistem adalah sebagai berikut

  1. Gambar di simpan dalam folder foto.
  2. nama file tersimpan di database dengan nama tabel foto.
  3. file harus divalidasi dengan pengecekan file tidak boleh kosong, file yang diupload hanya file gambar, ukuran maximal file 50kb, jika
    nama file mengandung spasi, maka spasi harus diganti dengan undersore (misal ‘foto keren.png’menjadi ‘foto_keren.png’)/li>

Perancangan

  1. Buat tabel foto dan folder foto di webserver
  2. buat sckript koneksi
  3. buat form upload plus script validasi saat gagal upload
  4. buat script untuk memvalidasi, mengupload dan menyimpan kedatabase
  5. tampilkan hasil upload

Implementasi

Buat tabel foto

CREATE TABLE IF NOT EXISTS `foto` (
  `id_foto` int(11) NOT NULL AUTO_INCREMENT,
  `nama_file` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id_foto`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

Buat skrip koneksi database(koneksi.php)

<?php
	
	define('db_host','localhost');
	define('db_user','root');
	define('db_pass','');
	define('db_name','candralabdb');//namadb
	
	mysql_connect(db_host,db_user,db_pass);
	mysql_select_db(db_name);
	
?>

Buat skrip form upload (koneksi.php)

<div style="background-color:#ffe597;  width: 300px;height: 100px">
		<form  method="POST" id="form1" enctype="multipart/form-data"
		action="foto_action.php">
			<legend>
				Upload foto
			</legend>
			<input type="file" name='nama_file'>
			<button type="submit">
				Upload
			</button>
		</form>
		</div>
			
<?php
// KODE UNTUK MENAMPILKAN PESAN STATUS
if(isset($_GET['status'])) {
	$status=$_GET['status'];
		switch($status) {
		case 0 :
			echo " upload sukses!";
			break;
		case 1 :
			echo " Anda belum memilih file yang akan diupload!";
			break;
		case 2 :
			echo "  Format yang diperbolehkan hanya jpg,png dan gif!";
			break;
			case 3 :
			echo " upload gagal, Ukuran file terlalu besar!";
			break;
			case 4 :
			echo " Gagal menyimpan kedatabase!";
			break;
	}
}
?>
<?php 
//include file foto_view.php 
include('foto_view.php');
 ?>

Buat skrip validasi dan upload (foto_action.php)

<?php
//status upload 
/* status 0: Sukses
 * status 1: file yang diupload kosong
 * status 2: file bukan file gambar
 * status 3: ukuran file terlalu besar
 * status 4: Gagal menyimpan ke database
 */
include ('koneksi.php');

$nama_file = $_POST['nama_file'];

//kode upload
$lokasi_file = $_FILES['nama_file']['tmp_name'];
$nama_file = $_FILES['nama_file']['name'];
$tipe_file = $_FILES['nama_file']['type'];
$ukuran_file = $_FILES['nama_file']['size'];

//kode untuk mengganti spasi menjadi garis bawah pada nama file


$nama_baru = preg_replace("/\s+/", "_", $nama_file);
$direktori = "foto/$nama_baru";

$MAX_FILE_SIZE = 50000; //50kb

//cek apakah file kosong? 
if(strlen($nama_file)<1){
	header("Location:foto_form.php?status=1");
	exit();
}
//cek apakah format file adalah format gambar
$formatgambar = array("image/jpg", "image/jpeg",
"image/gif", "image/png");
if(!in_array($tipe_file, $formatgambar)) {
  header("Location:foto_form.php?status=2");
	exit();

}
//cek apakah ukuran file diatas 50kb 
if($ukuran_file > $MAX_FILE_SIZE) {
	header("Location:foto_form.php?status=3");
	exit();
}
//code untuk mengkopi file ke fodler foto
move_uploaded_file($lokasi_file, $direktori);
$sql = "INSERT INTO foto(nama_file)
		VALUES('$nama_baru')";

//masukan nama file kedalam tabel foto di database mysql 
$result = mysql_query($sql) or die(mysql_error());

//check if query successful
if($result==true) {
	header('location:foto_form.php?status=0');
} else {
	header('location:foto_form.php?status=4');
}
mysql_close();
?>

Buat skrip menampilkan foto

<h2> File hasil upload foto</h2>


<?php
	
require_once ('koneksi.php');
			
$query="SELECT * from foto  ";
$result=mysql_query($query) or die(mysql_error());
$no=1;
//proses menampilkan data
while($rows=mysql_fetch_object($result)){
?>

	 <img  src='foto/<?=$rows -> nama_file;?>'
  width='150' height='150' alt="" />
<?php
}
?>

Download source code

silahkan download source code lengkapnya disini

Tags: ,

16 thought on “Cara upload file di PHP”

  1. 3sd says:

    thanks you very much :)

  2. - Ari says:

    ke database mw tpi kok filenya ndk mw pindah ya :(

  3. Fauji Rahman says:

    Maaf Mas….
    kalau hanya utk Menyimpan Multiple Gambar ke database My sql Gmn Mas dgn mengunakan PHP?
    Terimakasih

  4. Fauji Rahman says:

    Maaf Mas….
    kalau hanya utk Menyimpan Gambar ke database My sql Gmn Mas dgn mengunakan PHP?
    Terimakasih

  5. areza-scarlet says:

    gan kalo misalnya kotak upload kosong pas disubmit kan bakal masuk kedatabase, nah kalo kosong gmana cara nya biar pake yang sebelumnya

    1. Candra Adi Putra says:

      pake IF, misal if(empty($file)
      //do update without update file name
      else{
      //do update with file name

      itu logikanya…

  6. deni says:

    min tolong ajarin cara update file foto dong…aq inputnya bisa tapi untuk ganti fotonya gagal terus slalu ilang fotonya klw di update….tolong ya…makasih sebelumnya
    dibalas ke sini ya…denihidayat592@yahoo.com

    1. Candra Adi Putra says:

      berarti belajar PHP lagi…itu bukan masalah uploadnya, itu masalah if else aja di php kok

  7. oong says:

    Minta script nya buat java sih gan pengan belajar upload pake java .

  8. cho says:

    gan bisa ajarin kalo mau update atau ganti fotonya donk?
    tolong dibalas atau kirim via email saya gan chunchocho@gmail.com saya tunggu gan
    terima kasih..

  9. officialitoru says:

    Kalo field di table databasenya bukan cuma foto bertipe VARCHAR gimana gan ?
    Misal ada field : nim,nama,jurusan,semester,foto

    otomatis kan ntar bakal script simpan untuk field : nim,nama,jurusan,semester = dibikin sendiri (simpandata.php)

    trus bikin script simpan/upload atau buat validasi dkk buat field: foto = dibikin lagi (simpanfoto.php)

    Trus gabungin tuh 2 script menjadi 1 gimana gan?
    Soalnya kan ntar bakal di taruh di

    Nah tuh gimana gan?
    Soalnya kemaren aku muter2 disitu pas mw bikin script simpan foto :D

    Tolong dibls disini atau via email aku ya gan = officialitoru@gmail.com

    Terimakasih

    http://itorushare.blogspot.com/

    1. officialitoru says:

      Sorry gan yg d atas ada yg kurang, ini potongan lengkapnya
      ——————————————————————————-
      Trus gabungin tuh 2 script menjadi 1 gimana gan?
      Soalnya kan ntar bakal di taruh di

      /////// </ ///////

      Nah tuh gimana gan?
      Soalnya kemaren aku muter2 disitu pas mw bikin script simpan foto :D

      Tolong dibls disini atau via email aku ya gan = officialitoru@gmail.com

      Terimakasih

      http://itorushare.blogspot.com/

  10. retno says:

    kalau cuman mau upload terus di tampilin aja bagaimana? tanpa ada koneksi.

    1. Candra Adi Putra says:

      buang aja semua script yg berhubungan kedatabase…
      $sql = “INSERT INTO foto(nama_file)
      VALUES(‘$nama_baru’)”;

      //masukan nama file kedalam tabel foto di database mysql
      $result = mysql_query($sql) or die(mysql_error());

      //check if query successful
      if($result==true) {
      header(‘location:foto_form.php?status=0’);
      } else {
      header(‘location:foto_form.php?status=4’);
      }
      mysql_close();

  11. Candra Adi Putra says:

    cukup ganti baris $nama_baru = preg_replace(“/\s+/”, “_”, $nama_file); dengan
    $nama_baru=$_POST[‘nip’]. tentunya di form kamu juga harus ada input nip.. simple kan ?

  12. ulfa says:

    min, kalau saya pengenya setelah di upload itu kan otomatis yang masuk di database nama file asli tuh ya… lha kalo saya pengennya nama file fotonya itu sesuai dengan no.induk pegawai secara otomatis dapat merename tu bagaimana caranya

Tinggalkan Komentar plz!