Skip to main content
Codeigniter Upload File

CodeIgniter Basic Upload File With Database

ใบบทความนี้ เราจะมาแนะนำถึงการใช้งาน CodeIgniter ในส่วนของการ Upload  File ครับ ซึ่ง ตัว CodeIgniter  Framework ได้เตรียม ส่วนของการ Upload และ การตรวจสอบ ไฟล์  เช่น ขนาด รูปแบบ และ อื่น ๆ ไว้อยู่แล้ว เราจะมาทำการเรียกใช้งาน Class  Upload กันเลยดีกว่า

ก่อนอื่นเรามาสร้าง Folder สำหรับ เก็บ ไฟล์ที่เรา Upload กันก่อน

สร้าง Folder uploads เก็บไว้ที่  D:/xampp/htdocs/MyApp/uploads

create_folder_uploads

View

สร้าง view สำหรับ การ Upload File

สร้างไฟล์ upload_form.php ไว้ที่ D:/xampp/htdocs/MyApp/application/views/upload_form.php

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Customer</title>


  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >

</head>

<body>

<div class="container">

  <h1>Upload File </h1>
   
  <?php echo $error;?> 

  <form action="upload_file"  enctype="multipart/form-data" method="post" accept-charset="utf-8">

      <div class="form-group">

        <label for="exampleInputFile">Image</label>

        <input type="file"  name = "userfile">

      </div>

      <button type="submit" class="btn btn-success">บันทึก</button>

   </form>
        <hr>

        <!-- Footer -->
        <footer>
            <div class="row">
                <div class="col-lg-12">
                    <p>Your Website <?php echo date("Y")?></p>
                </div>
            </div>
            <!-- /.row -->
        </footer>

    </div>
    <!-- /.container -->
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>

</html>

เพิ่มเติม ในการ Upload File นั้น ในส่วนของ Form ต้องมีการระบุ

 enctype="multipart/form-data"

หากไม่ระบุ จะทำให้ไม่สามารถ Upload ได้ครับ หลายคน ติดปัญหา Upload ไม่ได้เพราะ ลืมใส่ส่วนนี้ (บางครั้งผู้เขียนเองก็ลืมเหมือนกันครับ 555)

ในส่วนของ $error คือ การแสดงผล Error ต่าง ๆ กรณีไม่สามารถ Upload File ได้ ครับ

สร้างไฟล์ upload_success.php ไว้ที่ C:/xampp/htdocs/MyApp/application/views/upload_success.php  สำหรับแสดงข้อมูลไฟล์ที่ Upload สำเร็จ

<html>
 
   <head> 
      <title>Upload Form</title> 
   </head>
	
   <body>  
      <h3>Your file was successfully uploaded!</h3>  
		
      <ul> 
         <?php foreach ($upload_data as $item => $value):?> 
         <li><?php echo $item;?>: <?php echo $value;?></li> 
         <?php endforeach; ?>
      </ul>  
		

   </body>
	
</html>

Controller Test

สร้างไฟล์ test.php  ไว้ที่ D:/xampp/htdocs/MyApp/application/controller/Test.php

ใน controller Test จะมี Function index เรียกใช้งาน view upload_form สำหรับการ Upload File  และ Function upload_file สำหรับ การรับข้อมูลจาก view และ ตรวจสอบความถูกต้องของไฟล์ หากไม่สามารถ Upload ได้ จะส่ง Error กลับไปที่ view upload_form แต่ กรณี Upload สำเร็จ จะ ส่งค่า $data ไปที่ upload_success

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Test extends CI_Controller {

    public function __construct() {

	        parent::__construct();
                $this->load->helper('url'); 
	        
	}   

 	public function index(){
		
		//เรียกใช้งาน view สำหรับ Upload File
		$this->load->view('upload_form', array('error' => ' ' )); 
	}

	public function upload_file(){

         $config['upload_path']   = './uploads/'; //Folder สำหรับ เก็บ ไฟล์ที่  Upload
         $config['allowed_types'] = 'gif|jpg|png'; //รูปแบบไฟล์ที่ อนุญาตให้ Upload ได้
         $config['max_size']      = 100; //ขนาดไฟล์สูงสุดที่ Upload ได้ (กรณีไม่จำกัดขนาด กำหนดเป็น 0)
         $config['max_width']     = 1024; //ขนาดความกว้างสูงสุด (กรณีไม่จำกัดขนาด กำหนดเป็น 0)
         $config['max_height']    = 768;  //ขนาดความสูงสูงสดุ (กรณีไม่จำกัดขนาด กำหนดเป็น 0)
         $config['encrypt_name']  = true; //กำหนดเป็น true ให้ระบบ เปลียนชื่อ ไฟล์  อัตโนมัติ  ป้องกันกรณีชื่อไฟล์ซ้ำกัน

         $this->load->library('upload', $config);
		 
			//ตรวจสอบว่า การ Upload สำเร็จหรือไม่	
         if ( ! $this->upload->do_upload('userfile')) {

			//กรณีมี Error ให้เก็บค่าไว้ในตัวแปร $error
            $error = array('error' => $this->upload->display_errors()); 
			
			//เรียกใช้งาน view และ ส่งค่า $error ให้แสดงผลกรณีมี Error
            $this->load->view('upload_form', $error); 

         }else { 
			//ตัวแปร $data เก็บข้อมูล ของไฟล์ที่ Upload
            $data = array('upload_data' => $this->upload->data()); 
			
			//เรียกใช้งาน view และ ส่งค่า $data ไปแสดงผลด้วย
            $this->load->view('upload_success', $data); 
         } 
	}
}

ทดสอบการทำงาน

ไปที่ http://localhost/myapp/index.php/test/index

upload_file

กรณีที่ ไม่ได้เลือกรูปภาพ หรือ ไม่สามารถ Upload ได้จะมี Error ดังภาพ

upload_error

กรณี Upload สำเร็จจะแสดงข้อมูลของไฟล์ ที่ Upload

upload_success

การประยุกต์ใช้งาน กับ ฐานข้อมูล MySQL

จากบทความก่อนหน้า เราได้แนะนำถึง การ เพิ่ม แก้ไข ลบ ข้อมูล กันไปแล้ว  ในบทความนี้ เราจะเพิ่มเติม การ บันทึกรูปภาพ โดยจะเก็บชื่อรูปภาพ ที่ Upload ลงใน ฐานข้อมูลด้วย

สร้าง database basic  และ สร้างตาราง customer

CREATE TABLE `customer` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `first_name` varchar(255) NOT NULL,
 `last_name` varchar(255) NOT NULL,
 `phone` varchar(255) NOT NULL,
 `image` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

Customer Controller

แก้ไขไฟล์ Customer.php โดยเพิ่มส่วนของการ Upload ดังนี้

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Customer extends CI_Controller {
	
	function __construct() { 
	
         parent::__construct(); 
		 
		 $this->load->model('Customer_Model');
		 
         $this->load->helper('url'); 
		 
		 $this->load->helper('form');
		 
		 $this->load->helper('html');
		 
         $this->load->database(); 
    } 

	public function index()
	{
		$query = $this->db->get("customer"); 
		 
        $data['result'] = $query->result(); 
		
		$this->load->view('header');
		
		$this->load->view('customer/customer_data',$data);
		
		$this->load->view('footer');
	}
	
	public function add_customer_form(){
		
		$this->load->view('header');
		
		$this->load->view('customer/customer_add_form');
		
		$this->load->view('footer');
	}
	
	public function save_customer(){
		
         $config['upload_path']   = './uploads/'; 
         $config['allowed_types'] = 'gif|jpg|png'; 
         $config['max_size']      = 0; 
         $config['max_width']     = 0; 
         $config['max_height']    = 0;  
         $config['encrypt_name']  = true;

         $this->load->library('upload', $config);
			
         if ( ! $this->upload->do_upload('userfile')) {

            $error = array('error' => $this->upload->display_errors()); 

			$this->load->view('header');

            $this->load->view('customer/customer_add_form', $error); 

            $this->load->view('footer');

         }else{

			$data = array( 
	            'first_name' => $this->input->post('first_name'), 
	            'last_name' => $this->input->post('last_name'),
	            'image' => $this->upload->data('file_name'), 
	        ); 
				
	        $this->Customer_Model->insert($data); 
			
			redirect('customer/index');
        }
	}
	
	public function edit_customer_form(){
		
		 $id = $this->uri->segment('3'); 
		 
		 $data['result'] = $this->Customer_Model->selectOne($id);
		 
		 $this->load->view('header');
		 
         $this->load->view('customer/customer_edit_form',$data);
		 
		 $this->load->view('footer');
		
	}
	
	public function save_edit_customer(){
		
		 $config['upload_path']   = './uploads/'; 
         $config['allowed_types'] = 'gif|jpg|png'; 
         $config['max_size']      = 0; 
         $config['max_width']     = 0; 
         $config['max_height']    = 0;  
         $config['encrypt_name']  = true;

         $this->load->library('upload', $config);
			
         if ( ! $this->upload->do_upload('userfile')) {


           	$image = $this->input->post('old_image');

         }else{

			$image = $this->upload->data('file_name');
         }
		
		 $data = array( 
            'first_name' => $this->input->post('first_name'), 
            'last_name' => $this->input->post('last_name'),
            'image' => $image,
         ); 
		 
		 $id = $this->input->post('id');
			
         $this->Customer_Model->update($data,$id); 
		
		 redirect('customer/index');

	}
	
	public function delete_customer(){
		
		 $id = $this->uri->segment('3'); 
		 
		 $this->Customer_Model->delete($id); 
		 
		 redirect('customer/index');
	}
	
	
}

Views Customer

แก้ไข Views ไฟล์ customer_data.php เพิ่มส่วนของการแสดงรูปภาพ

<h3>Title</h3>

<a href="<?php echo base_url()?>index.php/customer/add_customer_form" class="btn btn-info">ADD</a>


<table class="table table-bordered" style="margin-top:10px">
	<tr class="active">
		<th>Image</th>
		<th>First Name</th>
		<th>Last Name</th>
		<th width="10%">Edit</th>
		<th width="10%">Delete</th>
	</tr>
	<?php
		foreach($result as $r){
			echo "<tr>";
				
				$image_properties = array(
				        'src'   => 'uploads/'.$r->image,
				        'class' => 'post_images',
				        'width' => '80',
				        'height'=> '60',
				);

				echo "<td>";
					echo img($image_properties);
				echo "</td>";
				
				echo "<td>".$r->first_name."</td>";
				
				echo "<td>".$r->last_name."</td>";
				
				echo "<td><a href='".base_url()."index.php/customer/edit_customer_form/".$r->id."' class='btn btn-warning'>Edit</a></td>";
				
				echo "<td><a href='".base_url()."index.php/customer/delete_customer/".$r->id."' onclick='return confirm(\"Confirm Delete Item\")' class='btn btn-danger'>Delete</a></td>";
				
			echo "</tr>";
		}
	?>
</table>

แก้ไข Views ไฟล์ customer_add_form.php เพิ่ม input ส่วนของการ Upload ภาพ

		
		<h3>Add Data</h3>
         
		 <?php 
            echo form_open_multipart('customer/save_customer');
			
            echo form_label('First Name'); 
            echo form_input(array('class'=>'form-control','name'=>'first_name')); 
            echo "<br/>"; 
			
            echo form_label('Last Name'); 
            echo form_input(array('class'=>'form-control','name'=>'last_name')); 
            echo "<br/>"; 
			
			echo form_input(array('type'=>'file','name'=>'userfile')); 
			echo "<br/>"; 
			
            echo form_submit(array('id'=>'submit','value'=>'Add','class'=>'btn btn-success')); 
			
			echo anchor(base_url().'index.php/customer', 'Back',array('class'=>'btn btn-default'));
			
            echo form_close(); 
         ?>

แก้ไข Views ไฟล์ customer_edit_form.php เพิ่ม input ส่วนของการ Upload ภาพ

		
		<h3>Edit Data</h3>
         
		 <?php 
		 
			echo form_open_multipart('customer/save_edit_customer');
			
			echo form_hidden('id',$result[0]->id);

			echo form_hidden('old_image',$result[0]->image);  

			$image_properties = array(
			        'src'   => 'uploads/'.$result[0]->image,
			        'class' => 'post_images',
			        'width' => '200',
			        'height'=> '200',
			);

			echo img($image_properties);
			
			echo form_hidden('id',$result[0]->id); 
			echo "<br/>";	
            echo form_label('First Name'); 
            echo form_input(array('class'=>'form-control','name'=>'first_name','value'=>$result[0]->first_name)); 
            echo "<br/>"; 
			
            echo form_label('Last Name'); 
            echo form_input(array('class'=>'form-control','name'=>'last_name','value'=>$result[0]->last_name)); 
            echo "<br/>"; 
			
			echo form_input(array('type'=>'file','name'=>'userfile'));
            echo "<br/>"; 
			
            echo form_submit(array('id'=>'submit','value'=>'Save Edit','class'=>'btn btn-warning')); 
			
			echo anchor(base_url().'index.php/customer', 'Back',array('class'=>'btn btn-default'));

            echo form_close(); 
         ?>
		 

ทดสอบการทำงาน

http://localhost/MyApp/index.php/customer

image-6

สามารถ เพิ่ม และ แก้ไข รูปภาพ ได้ เมื่อมาดูที่ Database ก็จะมี ข้อมูลของรูปภาพที่เรา Upload ไว้

customer_database

 

Download SourceCode

 

 

 


Deprecated: Function create_function() is deprecated in /home/service1/domains/monkeywebstudio.com/public_html/wp-content/plugins/simple-lightbox/controller.php on line 1642