การอัปโหลดรูปภาพเก็บในฐานข้อมูล มีวิธีทำ 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> |
ddlion says:
01/08/2552 at 01/08/2552
ไม่เข้าใจเกี่ยวกับการใช้งาน class.upload.php
อ่านตามลิงค์แล้วเป็น eng แปลไม่ค่อยออกเท่าไรค่ะ
ไม่มีวิธีลัดหรอ
administrator says:
02/08/2552 at 02/08/2552
ในตัวอย่างที่ผมเขียนในบทความ ก็เพียงพอสำหรับการใช้งาน แต่ถ้าจะให้พิสดารขึ้นไปอีก ก็ต้องอ่านภาษาอังกฤษให้ออกครับ
วิธีลัดเหรอ มีครับ คัดลอกโค้ดของผมแล้วแก้ไข ไง ลัดที่สุดแล้ว
doublep says:
19/10/2552 at 19/10/2552
ผมจะสามารถนำโค๊ดนี้ไปต่อกับภาคแสดงผลได้ยังไงครับ
ช่วยชี้แนะหน่อยครับ ขอบคุณมากครับ
administrator says:
19/10/2552 at 19/10/2552
ไม่ต้องไปต่ออะไรกันเลยครับ อัปโหลดก็หน้าหนึ่ง แสดงก็หน้าหนึ่ง
big says:
09/11/2552 at 09/11/2552
มีแบบ array ไหมครับทีละหลายรูปนะเจ้า class ตัวนี้
administrator says:
09/11/2552 at 09/11/2552
เอาลูปไปคร่อมโค้ดครับ วิธีการจะคล้ายกับบทความ http://www.select2web.com/php/delete-database-by-checkbox.html
เปลี่ยนจากการลบ ไปเป็นเพิ่มรูปเอาครับ
big says:
10/11/2552 at 10/11/2552
ลองแสดงตัวอย่างให้ดูหน่อยได้ไหมครับ
ผมลองแล้วมันไม่ได้อะยังไงช่วยนะครับ มือ
ใหม่ อิอิ
สิงโต says:
19/01/2553 at 19/01/2553
Upload ได้ครับ แต่มันสร้างเพิ่มให้อีก 1 ไฟล์ รวมเป็น 2 เช่น
upload file a มันก็จะมี file a และ a-1 ใน folder test อ่ะครับ จะแก้ไขอย่างไร ครับ แล้วเรากำหนดได้ไหมว่าให้ Up Load ได้เฉพาะนามสกุลนี้ แล้วรายละเอียดการใช้งาน ที่บอก crop ได้ Resize ได้ นี่ทำไงครับ
administrator says:
19/01/2553 at 19/01/2553
ถ้าไฟล์ชื่อซ้ำกันมันจะสร้างให้ใหม่ครับ ยกเว้นเราเซ็ตบอกให้มันทับ ส่วนการใช้งานอย่างละเอียดนั้นอ่านได้ที่ http://www.verot.net/res/sources/class.upload.html
เจนนี่ says:
15/02/2553 at 15/02/2553
ขอบคุณเป็นอย่างสูงค่ะ
เด็กวัด says:
27/10/2553 at 27/10/2553
ขอบพระคุณมากครับ
ผมอยากให้ช่วยดูโค้ด ที่สามารถอัพโหลดภาพโดยอัตโนมัติ เข้าไปในฐานข้อมูลเลย หรือเป็นเพียงชื่อที่ไปอยู่ในฐานข้อมูลก็ได้ พอเรียกจากฐานข้อมูลนั้นก็แสดงภาพ
โดยที่เราสร้างโพดเดอร์ไว้หนึี่งอัน พอเราดึงภาพมาไว้ใในโพดเดอร์ดังกล่าว ชื่อไฟล์หรือภาพก็จะเข้าไปอยู่ในฐานข้อมูลเลย
ขอบพระคุณครับ
สงสัย says:
16/11/2553 at 16/11/2553
อยากถามค่ะ พอดีมีปัญหาค่ะ รูปที่เก็บอยู่โฟล์เดอร์หนึ่ง และในฐานข้อมูลเก็บเป็นชือภาษาไทย พอเราจะ Browse บอกว่า not foundค่ะ ชื่อที่เก็บ และรูปเป็นชื่อภาษาไทยค่ะ ทำยังไงค่ะ
เด็กวัด says:
02/12/2553 at 02/12/2553
เรียนท่านที่มีความรู้
ต้องการแบบว่า ดึงภาพเข้ามาในแฟ้มที่เราสร้างไว้ ชื่อภาพจากไฟล์นั้นเขาไปอยู่ ในฐานข้อมูลเลย และสามารถอัพโหลดไปยังโอสโดยอัตโนมัต
คือ มีวิธีไหนบ้างที่สามารถอัพโหลดภาพที่ลากมาใส่แฟ้ม ที่เราสร้างแล้วภาพนั้นไปปรากฎบน host โดยไม่ต้องคลิก เลย เป็นอัตโนมัตเมื่อเราดึงไฟล์อ่ะ
ช่วยด้วยนะคัรบ
administrator says:
02/12/2553 at 02/12/2553
ท่านผู้มีความรู้งงกะคำถาม ช่วยเรียบเรียงให้ใหม่ได้มั้ยครับ
เด็กวัด says:
06/12/2553 at 06/12/2553
ครับ ท่านผู้มีความรู้
หมายความว่า
ผมสร้าง New Folder ไว้ใน my picture
จากนั้นลากภาพใดภาพหนึ่งมาใส่ใน New Folder ที่สร้างไว้
ชื่อภาพที่ลากเข้ามาจะไปอยู่ใน SQL เลยครับโดยอัตโนมัติ
และสามารถอัพโหลดภาพดังกล่าวไปยัง hots โอยอัตโนัติได้ไหมครับ โดยไม่ต้องกด submit
ขอบพระคุณท่านมีความรู้มากครับ
“จากเด็กวัดจน ๆ ที่อยากมีความรู้”
ฮาริซ says:
13/02/2554 at 13/02/2554
ไม่จำกัดจำนวน!!!!!!!ต้องการรับสมัครเจ้าหน้าที่โปรแกรมเมอร์ ASP,PHP ร่วมงานกับเรา ติตต่อสอบถามรายละเอียดได้ที่ 082-3607513
อ่านนิยาย.com says:
21/10/2554 at 21/10/2554
เพิ่งรู้นะเนี่ย ได้ความรู้มากมาย กำลังคิดว่าจะใช้วิธีไหนดี สรุป ใช้วิธีที่สองก็แล้วกัน อิอิ
เอส says:
22/12/2554 at 22/12/2554
ถ้าต้องการ rename ทำไงครับ
พีเค says:
04/01/2555 at 04/01/2555
ลองดูแล้วครับ เวิร์คมากเลยครับ ตอนที่ลองรันบน localhost
แต่พออัพขึ้นโฮสจริง แล้วทำไมมันไม่ขึ้นอะไรเลยครับ เหมือนกับว่าอัพโหลดไมไม่ได้
error ก็ไม่มีนะครับ chmod 777 ก็ทำแล้ว
รบกวนสอบถามด้วยนะครับ ว่าควรจะแก้ที่จุดไหน มืดทุกด้านแล้วครับ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
04/01/2555 at 04/01/2555
ปกติถ้ารันที่ localhost ได้แล้วเอาขึ้นข้างบนไม่ได้ เป็นที่ permission ของโฟลเดอร์ หรือไม่ก็ไม่ได้ดักขนาดของไฟล์ไว้ ปกติโฮสต์จะจำกัดขนาดไฟล์ที่สามารถอัปโหลดด้