upload image with php การอัปโหลดรูปภาพเก็บในฐานข้อมูล

November 2007 | By admin | PHP | Tags : | อ่าน : 1267

การอัปโหลดรูปภาพเก็บในฐานข้อมูล มีวิธีทำ 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>

บทความน่าสนใจ

  1. upload image with php II การอัปโหลดรูปภาพเก็บในฐานข้อมูล II
  2. upload image with php II การอัปโหลดรูปภาพเก็บในฐานข้อมูล ภาคแสดงผล
  3. รวมฮิต jQuery upload file plugin
  4. ระบบยืนยันการลงทะเบียนด้วยอีเมล์ verify by email
  5. mySQL กับค่า NULL
Tags:

ผู้เขียน:

เว็บไซต์ :http://

มี 10 ความเห็น ในบทความเรื่อง “upload image with php การอัปโหลดรูปภาพเก็บในฐานข้อมูล”

  1. ddlion says:

    ไม่เข้าใจเกี่ยวกับการใช้งาน class.upload.php
    อ่านตามลิงค์แล้วเป็น eng แปลไม่ค่อยออกเท่าไรค่ะ

    ไม่มีวิธีลัดหรอ

  2. platoosom says:

    ในตัวอย่างที่ผมเขียนในบทความ ก็เพียงพอสำหรับการใช้งาน แต่ถ้าจะให้พิสดารขึ้นไปอีก ก็ต้องอ่านภาษาอังกฤษให้ออกครับ

    วิธีลัดเหรอ มีครับ คัดลอกโค้ดของผมแล้วแก้ไข ไง ลัดที่สุดแล้ว

  3. doublep says:

    ผมจะสามารถนำโค๊ดนี้ไปต่อกับภาคแสดงผลได้ยังไงครับ

    ช่วยชี้แนะหน่อยครับ ขอบคุณมากครับ

  4. platoosom says:

    ไม่ต้องไปต่ออะไรกันเลยครับ อัปโหลดก็หน้าหนึ่ง แสดงก็หน้าหนึ่ง

  5. big says:

    มีแบบ array ไหมครับทีละหลายรูปนะเจ้า class ตัวนี้

  6. platoosom says:

    เอาลูปไปคร่อมโค้ดครับ วิธีการจะคล้ายกับบทความ http://www.select2web.com/php/delete-database-by-checkbox.html

    เปลี่ยนจากการลบ ไปเป็นเพิ่มรูปเอาครับ

  7. big says:

    ลองแสดงตัวอย่างให้ดูหน่อยได้ไหมครับ

    ผมลองแล้วมันไม่ได้อะยังไงช่วยนะครับ มือ

    ใหม่ อิอิ

  8. สิงโต says:

    Upload ได้ครับ แต่มันสร้างเพิ่มให้อีก 1 ไฟล์ รวมเป็น 2 เช่น
    upload file a มันก็จะมี file   a และ a-1 ใน folder test อ่ะครับ จะแก้ไขอย่างไร ครับ แล้วเรากำหนดได้ไหมว่าให้ Up Load ได้เฉพาะนามสกุลนี้ แล้วรายละเอียดการใช้งาน ที่บอก crop ได้ Resize ได้ นี่ทำไงครับ

  9. platoosom says:

    ถ้าไฟล์ชื่อซ้ำกันมันจะสร้างให้ใหม่ครับ ยกเว้นเราเซ็ตบอกให้มันทับ ส่วนการใช้งานอย่างละเอียดนั้นอ่านได้ที่ http://www.verot.net/res/sources/class.upload.html

  10. ขอบคุณเป็นอย่างสูงค่ะ

แสดงความเห็น

ชื่อ *
Email *
Website
ความคิดเห็น