การอัปโหลดรูปภาพเก็บในฐานข้อมูล มีวิธีทำ 2 วิธี คือ

  1. อัปโหลดเป็นรูปภาพเก็บไว้ในโฟลเดอร์ แล้วเก็บชื่อภาพไว้ในฐานข้อมูล
  2. อัปโหลดรูปภาพอัดลงไปในฐานข้อมูลเลย

ทั้งสองวิธีนี้ต่างมีข้อดีและข้อเสีย

วิธีที่ 1 ข้อดีคือ ฐานข้อมูลไม่บวม เพราะเก็บเฉพาะชื่อรูปภาพเท่านั้น ส่วนข้อเสียคือ โฟลเดอร์ที่ใช้เก็บรูปภาพ ต้องกำหนด permission เป็น 0777 เขียนและอ่านได้ ซึ่งในบางสภาพแวดล้อม เป็นเรื่องที่ลำบาก โดยเฉพาะกับโฮสต์ที่เป็นวินโดว ต้องติดต่อ admin ให้ช่วย ช่างวุ่นวาย

วิธีที่ 2 ข้อดีคือ ไม่ต้องสนใจ permisstion ของโฟลเดอร์ที่เก็บรูปภาพ ส่วนข้อเสียคือ ฐานข้อมูลจะบวมใหญ่ โดยใช่เหตุ ถ้าระบบเล็กๆก็ไม่เป็นไรหรอก แต่ถ้าระบบใหญ่ๆ มีปัญหาแน่

จะกล่าวถึงวิธีที่ 1 ก่อน
ผมขอแนะนำคลาสตัวหนึ่งชื่อ class.upload.php ผมใช้อยู่ อันที่จริง php มีคำสั่งจัดการรูปภาพอยู่นะ แต่ผมว่าใช้โค้ดที่คนอื่นเขียนแจกไว้แล้ว คล่องกว่า

ซึ่ง class.upload.php นี้ ความสามารถสูงส่ง ทั้งใช้ง่าย ความสามารถโดยคร่าวๆ นะ

  • สามารถ ย่อ ขยาย ภาพ
  • สามารถ เพิ่มลายน้ำเข้าไปในรูปภาพ
  • สามารถ เพิ่มโลโก้ซ้อนเข้าไปในภาพ
  • สามารถ คร้อปภาพ
  • เพิ่มแสง เพิ่มเงา พิมตัวอักษร เข้าไปในรูปภาพ
  • และอื่นๆ อีกเพียบ ซึ่งเขามี help ให้อ่านในเว็บ

ดาวน์โหลด class.upload.php ที่ http://www.verot.net/php_class_upload_download_zip.htm

อ่าน help เพิ่มเติมที่ http://www.verot.net/res/sources/class.upload.html

โครงสร้างฐานข้อมูลในตัวอย่าง

– —————————-TABLE STRUCTURE FOR tbl_image
– —————————-
CREATE TABLE `tbl_image` (
`image_id` tinyint(4) UNSIGNED NOT NULL AUTO_INCREMENT,
`image_name` VARCHAR(50) NOT NULL COMMENT ‘จัดเก็บชื่อรูปภาพ’,
 
PRIMARY KEY (`image_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
– —————————-

— —————————-

ตัวอย่างโค้ด :

<?php
// Include คลาส class.upload.php เข้ามา เพื่อจัดการรูปภาพ
require_once('class/class.upload.php') ;
 
// ส่วนกำหนดการเชื่อมต่อฐานข้อมูล
$hostname_connection = "localhost";
$database_connection = "db_test";
$username_connection = "root";
$password_connection = "";
$connection = mysql_pconnect($hostname_connection, $username_connection, $password_connection)
		or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_query( "SET NAMES UTF8" ) ;
 
 
//  ถ้าหากหน้านี้ถูกเรียก เพราะการ submit form  
//  ประโยคนี้จะเป็นจริงกรณีเดียวก็ด้วยการ submit form 
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
 
    // เริ่มต้นใช้งาน class.upload.php ด้วยการสร้าง instant จากคลาส
    $upload_image = new upload($_FILES['image_name']) ; // $_FILES['image_name'] ชื่อของช่องที่ให้เลือกไฟล์เพื่ออัปโหลด
 
    //  ถ้าหากมีภาพถูกอัปโหลดมาจริง
    if ( $upload_image->uploaded ) {
 
        // ย่อขนาดภาพให้เล็กลงหน่อย  โดยยึดขนาดภาพตามความกว้าง  ความสูงให้คำณวนอัตโนมัติ
        // ถ้าหากไม่ต้องการย่อขนาดภาพ ก็ลบ 3 บรรทัดด้านล่างทิ้งไปได้เลย
        $upload_image->image_resize         = true ; // อนุญาติให้ย่อภาพได้
        $upload_image->image_x              = 400 ; // กำหนดความกว้างภาพเท่ากับ 400 pixel 
        $upload_image->image_ratio_y        = true; // ให้คำณวนความสูงอัตโนมัติ
 
        $upload_image->process( "upload_images" ); // เก็บภาพไว้ในโฟลเดอร์ที่ต้องการ  *** โฟลเดอร์ต้องมี permission 0777
 
        // ถ้าหากว่าการจัดเก็บรูปภาพไม่มีปัญหา  เก็บชื่อภาพไว้ในตัวแปร เพื่อเอาไปเก็บในฐานข้อมูลต่อไป
        if ( $upload_image->processed ) {
 
            $image_name =  $upload_image->file_dst_name ; // ชื่อไฟล์หลังกระบวนการเก็บ จะอยู่ที่ file_dst_name
            $upload_image->clean(); // คืนค่าหน่วยความจำ
 
            // เก็บชื่อภาพลงฐานข้อมูล
            $insertSQL = sprintf("INSERT INTO tbl_image (image_name) VALUES ( '%s' )", $image_name );
            echo $insertSQL ;
            mysql_select_db($database_connection, $connection);
            $Result1 = mysql_query($insertSQL, $connection) or die(mysql_error());
 
 
        }// END if ( $upload_image->processed )
 
    }//END if ( $upload_image->uploaded )
 
 
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload Image To Database</title>
</head>
 
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <p>Image_name 
    <input name="image_name" type="file" id="image_name" size="40" />
  </p>
  <p>
    <input type="submit" value="Upload" />
    <input type="hidden" name="MM_insert" value="form1" />
  </p>
</form>
</body>
 
</html>