Cara Membuat Optional File Upload di PHP

Cara Membuat Optional File Upload di PHP

Optional file upload yang dimaksud disini adalah pengguna dapat memilih untuk mengupload sebuah file atau mengabaikannya, misalnya file tersebut adalah file untuk isian foto/gambar atau sebuah dokumen user bisa mengisinya atau tidak. Jadi pengisiannya bisa dibuat tidak wajib.

Saya akan memberikan sebuah contoh yang menurut logika saya sendiri, jadi mungkin kalau ada yang lebih baik dari ini, Anda bisa mencoba untuk menggunakan yang lebih baik daripada cara yang akan saya jelaskan ini.

Contoh penulisan kode ini menggunakan prepared statemenet, kode ini sudah pernah saya buat sebelumnya pada postingan CRUD PHP Procuderal Style Jadi disini saya hanya tinggal menambahkan script untuk isian foto pada bagian input dan function untuk menyimpan datanya.

Silahkan baca : CRUD PHP Procedural Style

DASAR PEMIKIRAN OPTIONAL FILE UPLOAD
Logika sederhananya kita bisa membuat dua buah kondisi, yaitu kondisi pertama jika user mengosongkan inputan pada isian file upload maka data akan tetap bisa dieksekusi dan kondisi kedua jika data pada file upload memiliki isi maka, data akan divalidasi ukuran dan jenisnya apakah sesuai atau tidak. 

KONDISI NORMAL

Pada kondisi normal saya akan membuat penulisan kode dimana data file upload yang di input oleh user tidak boleh kosong, ukurannya tidak boleh lebih dari 2MB dan harus berfomat jpg, jpeg, dan png. Berikut contohnya :
<?php
include ('koneksi.php');
include ('function.php');
?>
<?php
//set variabel
$nim = $nama_mahasiswa = $foto_mahasiswa = "";
$nim_err = $nama_mahasiswa_err = $foto_mahasiswa_err = "";
if($_SERVER["REQUEST_METHOD"] == "POST"){
    if(empty(trim($_POST['nim']))){
        $nim_err = "Nim tidak boleh kosong";
    }else{
        $nim=$_POST['nim'];
        $nim=mysqli_real_escape_string($koneksi, $nim);
    }
    
    if(empty(trim($_POST['nama_mahasiswa']))){
        $nama_mahasiswa_err = "Nama mahasiswa tidak boleh kosong";
    }else{
        $nama_mahasiswa = $_POST['nama_mahasiswa'];
        $nama_mahasiswa = mysqli_real_escape_string($koneksi, $nama_mahasiswa);
    }
    $imgFile = $_FILES['foto_mahasiswa']['name']; //name image
    $tmp_dir= $_FILES['foto_mahasiswa']['tmp_name']; //temporari file
    $imgSize = $_FILES['foto_mahasiswa']['size']; //info size
    $upload_dir = 'foto/'; //path upload
    $imgExt=strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); //mendapatkan info extension dari $imgFile
    $valid_extension = array('jpeg','jpg','png'); //extensi yang diperbolehkan
    $item_foto = rand(100, 1000000).".".$imgExt; //merename foto secara random
   
    //memulai validasi
    if(!empty($_FILES['foto_mahasiswa']['tmp_name'])){ //jika file tidak kosong, jalankan cabang pertama
        if(in_array($imgExt, $valid_extension)){ //cabang kedua memastikan ektensi
            if(!$imgFile < 2000000){ //cabang ketiga memastikan besar file
                //jika kurang dari 2MB simpan file
                $foto_mahasiswa=$tmp_dir; //nanti di eksekusi di function untuk bagian move upload, sementara disimpan dulu dalam bentuk var
            }else{
                $foto_mahasiswa_err = "Maaf foto mahasiswa tidak boleh lebih dari 2MB";
            }
        }else{
            $foto_mahasiswa_err = "Maaf ektensi foto tidak sesuai, upload hanya jenis jpeg, png, jpg";
        }

    }else{
       $foto_mahasiswa_err ="Foto mahasiswa masih kosong";
        
    }
//cek input sebelum insert untuk memastikan tidak ada data yang error
    if(empty($nim_err) && empty($nama_mahasiswa_err) && empty($foto_mahasiswa_err)){

    /* Panggil function */
        if(simpan_mahasiswa($nim, $nama_mahasiswa, $foto_mahasiswa)){
            echo 'Berhasil menyimpan data';
            echo "<a href='tampil_data.php'>Tampil data</a>";
        }else{
            echo 'Gagal menyimpan data';
        }
      
}
  mysqli_close($koneksi);
  //close koneksi

    //end POST  
    }


?>

<html>
<head>
    <title>Input Mahasiswa root93</title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" />
<label>Nim :</label>
<input type="text" name="nim" size="15" />
<label>Nama Mahasiswa :</label>
<input type="text" name="nama_mahasiswa" size="15" />
<label>Foto</label>
<input type="file" name="foto_mahasiswa" id="foto_mahasiswa" />
<input type="Submit" name="submit" value="Submit">
</form>
<?php echo $nim_err; ?>
<?php echo $nama_mahasiswa_err; ?>
<?php echo $foto_mahasiswa_err; ?>
</body>
</html>


Selanjutnya pada bagian function yang bertugas menyimpan datanya, saya perlu menambahkan beberapa baris dan perintah untuk mengeksekusi file yang ada supaya diupload ke direktori tujuan. Anda dapat menulisnya seperti berikut :
<?php
//function simpan data
function simpan_mahasiswa($nim, $nama_mahasiswa, $foto_mahasiswa){
    global $koneksi;
    global $upload_dir;
    global $item_foto;
    $sql="INSERT INTO datamhs(nim, nama_mahasiswa, foto_mahasiswa) VALUES (?,?,?)";
    if($stmt=mysqli_prepare($koneksi, $sql)){
        mysqli_stmt_bind_param($stmt,"sss",$param_nim, $param_nama_mahasiswa, $param_foto_mahasiswa);
        $param_nim = $nim;
        $param_nama_mahasiswa = $nama_mahasiswa;
        $param_foto_mahasiswa = $item_foto;
      
 if(mysqli_stmt_execute($stmt)&&(move_uploaded_file($foto_mahasiswa, $upload_dir.$item_foto))){
    return true;
 }else{
    return false;
 }

 }
 //Close statement
 mysqli_stmt_close($koneksi);
 //End function
 }
?>

KONDISI OPTIONAL

Pada kondisi optional saya akan membiarkan user agar tidak perlu melakukan pengisian pada bagian file upload. Namun ketika user mengisi file upload dia akan divalidasi, ukurannya tidak boleh lebih dari 2MB dan harus berfomat jpg, jpeg, dan png. Berikut contohnya :

<?php
include ('koneksi.php');
include ('function.php');
?>
<?php
//set variabel
$nim = $nama_mahasiswa = $foto_mahasiswa = "";
$nim_err = $nama_mahasiswa_err = $foto_mahasiswa_err = "";
if($_SERVER["REQUEST_METHOD"] == "POST"){
    if(empty(trim($_POST['nim']))){
        $nim_err = "Nim tidak boleh kosong";
    }else{
        $nim=$_POST['nim'];
        $nim=mysqli_real_escape_string($koneksi, $nim);
    }
    
    if(empty(trim($_POST['nama_mahasiswa']))){
        $nama_mahasiswa_err = "Nama mahasiswa tidak boleh kosong";
    }else{
        $nama_mahasiswa = $_POST['nama_mahasiswa'];
        $nama_mahasiswa = mysqli_real_escape_string($koneksi, $nama_mahasiswa);
    }
    if (empty($_FILES["foto_mahasiswa"]["tmp_name"])){
            //ketika kondisi data kosong
            $imgFile = "";
            $tmp_dir = "";      
            $upload_dir = 'foto/';
            $imgExt="jpg";
            $item_foto = rand(1000,1000000).".".$imgExt;             
            $foto_mahasiswa=$tmp_dir; 
        
        }else{
            //ketika user mengsisi file upload
            $imgFile = $_FILES['foto_mahasiswa']['name'];
            $tmp_dir = $_FILES['foto_mahasiswa']['tmp_name'];
            $imgSize = $_FILES['foto_mahasiswa']['size'];
            $upload_dir = 'foto/';
            $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); 
            $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); 
            $item_foto = rand(1000,1000000).".".$imgExt;
            if(in_array($imgExt, $valid_extensions)){           
            if($imgSize > 400000){
            $foto_mahasiswa_err="Foto terlalu besar.Max 400KB";
       
            }else{
             $foto_mahasiswa=$tmp_dir;    
            } 
            }else{
            $foto_mahasiswa_err="Ektensi Foto siswa tidak sesuai ketentuan upload, format JPEG, PNG";
                
            }     
}
//cek input sebelum insert untuk memastikan tidak ada data yang error
    if(empty($nim_err) && empty($nama_mahasiswa_err) && empty($foto_mahasiswa_err)){

    /* Panggil function */
        if(simpan_mahasiswa($nim, $nama_mahasiswa, $foto_mahasiswa)){
            echo 'Berhasil menyimpan data';
            echo "<a href='tampil_data.php'>Tampil data</a>";
        }else{
            echo 'Gagal menyimpan data';
        }
      
}
  mysqli_close($koneksi);
  //close koneksi

    //end POST  
    }


?>

<html>
<head>
    <title>Input Mahasiswa root93</title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" />
<label>Nim :</label>
<input type="text" name="nim" size="15" />
<label>Nama Mahasiswa :</label>
<input type="text" name="nama_mahasiswa" size="15" />
<label>Foto</label>
<input type="file" name="foto_mahasiswa" id="foto_mahasiswa" />
<input type="Submit" name="submit" value="Submit">
</form>
<?php echo $nim_err; ?>
<?php echo $nama_mahasiswa_err; ?>
<?php echo $foto_mahasiswa_err; ?>
</body>
</html>


Pada bagian function kita tidak perlu melakukan tambahan atau perubah. Namun pada kondisi ini kalian bisa melihat bahwa nanti php akan mengembalikan nilai false.

Meskipun mengembalikan nilai false, data sebenarnya tetap disimpan, menurut saya pesan kesalahan tersebut dikarenakan variabel yang digunakan dalam fungsi move_upload_file(); dalam keadaan kosong.
MERUBAH FUNCTION

Karena kondisi optional masih bermasalah dan mengembalikan nilai false meskipun datanya tetap disimpan. Kondisi false diakibatkan  nilai variabel pada ungsi move_upload_file(); dalam keadaan kosong. Oleh karena itu pada function kita perlu membuat dua kondisi lagi dimana sebelumnya kita cek apakah nilai variabel pada foto_mahasiswa kosong atau tidak.


<?php
function simpan_mahasiswa($nim, $nama_mahasiswa, $foto_mahasiswa){
    global $koneksi;
    global $upload_dir;
    global $item_foto;
    $sql="INSERT INTO datamhs(nim, nama_mahasiswa, foto_mahasiswa) VALUES (?,?,?)";
    if($stmt=mysqli_prepare($koneksi, $sql)){
        mysqli_stmt_bind_param($stmt,"sss",$param_nim, $param_nama_mahasiswa, $param_foto_mahasiswa);
        $param_nim = $nim;
        $param_nama_mahasiswa = $nama_mahasiswa;
        $param_foto_mahasiswa = $item_foto;
    //cek apakah nilai var kosong atau tidak, jika kosong eksekusi tanpa move
    if(empty($foto_mahasiswa)){
     if(mysqli_stmt_execute($stmt)){
      return true;
   }else{
      return false;
   }
    }else{  
  if(mysqli_stmt_execute($stmt)&&(move_uploaded_file($foto_mahasiswa, $upload_dir.$item_foto))){
     return true;
  }else{
     return false;
  }
 }
 
 }
 //Close statement
 mysqli_stmt_close($koneksi);
 //End function
 }
 ?>

Sampai disini mungkin kita sudah berhasil membuat optional file upload di php, user dapat memilih untuk mengosongkan isian pada bagian inputan file atau mengisinya. Untuk sisanya, kalian bisa berimajinasi  sendiri, dan disesuaikan dengan kebutuhan masing - masing

Demo Optional File Upload


1 Response to "Cara Membuat Optional File Upload di PHP "

  1. Andrie KristiantoJuly 10, 2019 at 2:37 PM

    Wahhh mantep banget nih.. Semua artikel di blog ini kalau dijadiin saatu bisa jadi sebuah website local host yang menabjubkan.. :D

    ReplyDelete

Silahkan untuk meninggalkan komentar, santai saja dan mulailah berkomentar...

nagabet76slot gacorslot online1213141516Slot Online Menghadirkan Pengalaman Digital Yang Didukung Pemrosesan Data Secara Real TimeMahjongways Menganalisis Pola Visual Dan Dinamika Simbol Berdasarkan Pemrosesan Data DigitalMahjongways Mengembangkan Dinamika Permainan Melalui Pengelolaan Data Dan Elemen Visual TerintegrasiAnalisis Komputasi Modern Membantu Memetakan Dinamika Sistem Digital Berdasarkan Data ObservasiMember Baru Mendorong Dinamika Komunitas Digital Menuju Pengalaman Yang Lebih Aktif Dan Menarikslot onlinemahjongwayasarsitektur layananpemrosesan data adaptifmember baruSlot Online Terbaru Menghadirkan AnalisisScatter Hitam Dianalisis Melalui PemetaanPola Scatter Hitam Membentuk Distribusi Visual Yang Dapat Dikaji Menggunakan Komputasi AdaptifArsitektur Teknologi TerdistribusiTeknologi Visualisasi DataMahjongways Mengembangkan Interaksi Visual Melalui Integrasi Simbol Digital Yang DinamisAnalisis Mahjongways Memetakan Dinamika Visual Dan Respons Antarmuka Berbasis DataScatter Hitam Dianalisis Melalui Pemetaan Struktur Simbol Digital Berbasis Komputasi AdaptifAlgoritma Scatter Hitam Membantu Mengidentifikasi Dinamika Pola Melalui Analisis Data ObservasiPg Soft Mengembangkan Sistem Rendering Adaptif Untuk Mendukung Visualisasi Digital ModernTeknologi Pg Soft Mengoptimalkan Pemrosesan Grafis Melalui Arsitektur Rendering TerintegrasiTeknologi Pemodelan Data Membantu Menganalisis Dinamika Informasi Pada Ekosistem Digital ModernArsitektur Komputasi Terdistribusi Meningkatkan Keandalan Pengelolaan Data Pada Platform DigitalTeknologi Kecerdasan Komputasional Mendorong Pengembangan Sistem Digital Yang Lebih AdaptifPemrosesan Data Modern Membantu Memetakan Pola Informasi Melalui Pendekatan Komputasi TerukurTeknologi Integrasi Data Mempermudah Sinkronisasi Informasi Dalam Lingkungan Digital TerpaduVisualisasi Komputasi Modern Membantu Menginterpretasikan Perubahan Pola Pada Sistem Digital KompleksTeknologi Otomasi Data Meningkatkan Efisiensi Pengelolaan Informasi Pada Infrastruktur DigitalModel Komputasi Adaptif Mendukung Pengembangan Teknologi Digital Melalui Analisis Data BerkelanjutanPengembangan Pg Soft Mengintegrasikan Teknologi Rendering Dengan Interaksi Visual Yang ResponsifPg Soft Menerapkan Komputasi Visual Untuk Meningkatkan Efisiensi Pengolahan Elemen DigitalEksplorasi Scatter Hitam Memetakan Distribusi Simbol Melalui Model Analitik Digital TerintegrasiPola Scatter Hitam Dikaji Menggunakan Pendekatan Visualisasi Data Dan Pemodelan StatistikMahjongways Menghadirkan Pendekatan Visual Interaktif Melalui Pemrosesan Simbol Yang AdaptifEksplorasi Mahjongways Mengungkap Perubahan Pola Visual Dalam Lingkungan Digital Terintegrasikasino online dan perubahan cara pengguna menilai keamanan platform digitalmengapa promosi kasino online sering memengaruhi harapan pengguna baruketika tampilan mewah kasino online membentuk kesan kepercayaan penggunapengaruh cerita kemenangan orang lain terhadap minat mengakses kasino onlinekasino online dalam fenomena perubahan pola konsumsi hiburan masyarakatbagaimana kasino online memanfaatkan desain interaktif untuk menarik perhatianalasan sebagian pengguna kasino online lebih mengingat bonus daripada risikoketika kemudahan transaksi mengubah kebiasaan pengguna kasino onlinekasino online dan tantangan menjaga kesadaran finansial di era serbadigitalmengapa ulasan pengguna dapat membentuk persepsi terhadap kasino onlinemahjong online dan perubahan cara generasi digital mengenal permainan klasikmengapa mahjong online menarik perhatian komunitas pecinta permainan strategiketika animasi modern memberikan identitas baru pada mahjong onlineperan fitur multiplayer dalam membangun interaksi pemain mahjong onlinemahjong online membawa warisan permainan asia ke dalam ekosistem digitalbagaimana mahjong online mengadaptasi simbol tradisional menjadi desain modernpengaruh tampilan antarmuka terhadap kenyamanan pengguna mahjong onlinemahjong online dan fenomena berkembangnya komunitas permainan lintas generasimengapa variasi aturan mahjong online menjadi topik menarik bagi pemain baruperjalanan mahjong online dari hiburan berbasis browser menuju platform mobile