การอัปโหลดรูปภาพเก็บในฐานข้อมูล มีวิธีทำ 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;
-- ----------------------------
Example Code:
<?php // Include คลาส class.upload.php เข้ามา เพื่อจัดการรูปภาพ ?>
<?php require_once('class/class.upload.php') ; ?>
<?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" ) ;
?>
<?php
// ถ้าหากหน้านี้ถูกเรียก เพราะการ 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 )
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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>
<p> </p>
</body>
</html>
ไม่มีความคิดเห็น:
แสดงความคิดเห็น