Workshop : Storing Images and BLOB files in MYSQL หรือระบบเพิ่มรูปภาพลงฐานข้อมูลตรงๆ โดยไม่อัพโหลดไฟล์เข้าไปในโฟลเดอร์ของเว็บเรา
ก่อนอื่นต้องขอขอบคุณตัวอย่างดีๆ จากอาจารย์และเว็บ ดังนี้
ref1 : Banchar Paseelatesang
ref2 : https://vikasmahajan.wordpress.com/2010/07/07/inserting-and-displaying-images-in-mysql-using-php/
การทำงานของโปรแกรมมีดังนี้ครับ
1.สร้างตารางเก็บข้อมูลชื่อ images อย่าลืมสร้างฐานข้อมูลก่อนนะครับ ผมยกตัวอย่างชื่อ test
1 2 3 4 5 6 7 8 9 10 11 |
CREATE TABLE `images` ( `img_id` mediumint(8) UNSIGNED NOT NULL, `img_content` mediumblob ) ENGINE=MyISAM DEFAULT CHARSET=utf8; ALTER TABLE `images` ADD PRIMARY KEY (`img_id`); ALTER TABLE `images` MODIFY `img_id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT; |
2.ไฟล์เชื่อมต่อฐานข้อมูล condb.php
1 2 3 |
<?php $link = @mysqli_connect("localhost", "root", "", "test") or die(mysqli_connect_error()); ?> |
3.ฟอร์มสำหรับอัพโหลดภาพ form_add_img.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE html> <html> <head> <title>insert img blob </title> </head> <body> <form action="form_add_img_db.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">upload</button> </form> <br> ref1 : Banchar Paseelatesang <br> ref2 : https://vikasmahajan.wordpress.com/2010/07/07/inserting-and-displaying-images-in-mysql-using-php/ </body> </html> |
4.ไฟล์รับค่าจากฟอร์มและเก็บลงฐานข้อมูล form_add_img_db.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php error_reporting( error_reporting() & ~E_NOTICE ); include "condb.php"; if(is_uploaded_file($_FILES['file']['tmp_name'])) { $error = $_FILES['file']['error']; if($error == 0) { include "imager.php"; $img = image_upload('file'); $img = image_to_jpg($img); //$img = image_resize_max($img, 300, 300); $file = image_store_db($img, "image/jpeg"); $sql = "INSERT INTO images VALUES('', '$file')"; mysqli_query($link, $sql); } } //แสดงรูปล่าสุด $sql2 = "SELECT MAX(img_id) as id FROM images"; $query2 = mysqli_query($link, $sql2); $row = mysqli_fetch_array($query2); $id = $row["id"]; Header("Location: read_img.php?id=$id"); mysqli_close($link); ?> |
5.ไฟล์ฟังก์ชั่นในการอัพโหลดภาพ imager.php ref: Banchar Paseelatesang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
<?php /* Imager v1.0; Banchar Paseelatesang (banchar_pa@yahoo.com); All rights reserved */ function image_load($file_name) { $type = image_type($file_name); if($type=="gif") { return imagecreatefromgif($file_name); } else if($type=="png") { return imagecreatefrompng($file_name); } else if($type=="jpg" || $type=="jpeg" || $type=="pjpeg") { return imagecreatefromjpeg($file_name); } } function image_upload($input_name, $index="") { $f = $_FILES[$input_name]; if(is_uploaded_file($f['tmp_name']) || is_uploaded_file($f['tmp_name'][$index])) { $t = (!is_numeric($index))?$f['type']:$f['type'][$index]; if($t=="image/gif") { return (!is_numeric($index))?imagecreatefromgif($f['tmp_name']):imagecreatefromgif($f['tmp_name'][$index]); } else if($t=="image/png") { return (!is_numeric($index))?imagecreatefrompng($f['tmp_name']):imagecreatefrompng($f['tmp_name'][$index]); } else if($t=="image/jpg" || $t=="image/jpeg" || $t=="image/pjpeg") { return (!is_numeric($index))?imagecreatefromjpeg($f['tmp_name']):imagecreatefromjpeg($f['tmp_name'][$index]); } } } function image_type($file_name) { $info = pathinfo($file_name); return strtolower($info['extension']); } function image_mime_type($file_name) { $type = image_type($file_name); if($type=="jpg" || $type=="jpeg" || $type=="pjpeg") { $type = "jpeg"; } return "image/$type"; } function image_save($img, $file_name) { $type = image_type($file_name); if($type=="gif") { imagegif($img, $file_name); } else if($type=="jpg" || $type=="jpeg" || $type=="pjpeg") { imagejpeg($img, $file_name); } else if($type=="png") { imagepng($img, $file_name); } } function image_to_jpg($img) { $w = imagesx($img); $h = imagesy($img); $new_img = imagecreatetruecolor($w, $h); $bg = imagecolorallocate($new_img, 255, 255, 255); imagefill($new_img, 0, 0, $bg); imagecopy($new_img, $img, 0, 0, 0, 0, $w, $h); return $new_img; } function image_load_db($data) { return imagecreatefromstring($data); } function image_store_db($img, $img_type) { $t = strtolower($img_type); ob_start(); if($t=="gif"||$t=="image/gif") { imagegif($img); } else if($t=="png"||$t=="image/png") { imagepng($img); } else if($t=="jpg"||$t=="image/jpg"||$t=="jpeg"||$t=="image/jpeg"||$t=="pjpeg"||$t=="image/pjpeg") { imagejpeg($img,null,100); } $content = ob_get_contents(); ob_end_clean(); return addslashes($content); } ?> |
6.ไฟล์แสดงภาพที่อัพโหลดล่าสุด read_img.php
1 2 3 4 5 6 7 8 9 10 |
<?php include "condb.php"; $id = $_GET['id']; $sql = "SELECT img_content FROM images WHERE img_id = $id"; $result = mysqli_query($link, $sql); $data = mysqli_fetch_array($result); header("Content-Type: image/jpeg"); echo $data['img_content']; mysqli_close($link); ?> |
อย่าลืมนำไปประยุกต์ใช้นะครับ