Mon 7 Nov 2005 17:38:31
สวัสดีครับทั่นเว็บมาสเตอร์ คือว่าผมจะทำการดึงไฟล์รูปภาพจาก ฐานข้อมูลน่ะครับ...เป็น mysql แต่พอดึงมาแล้ว..มันไม่เป็นภาพน่ะครับ...เป็นตัวอักษรอะไรไม่รู้เต็มไปหมดเลย...
โค๊ดในการ upload นะครับ
$filename =$HTTP_POST_FILES['files']['name'];
$filetempname =$HTTP_POST_FILES['files']['tmp_name'];
$filesize =$HTTP_POST_FILES['files']['size'];
$fp = fopen($filetempname,"r");
$data = fread($fp,filesize($filetempname));
fclose($fp);
$data = addslashes($data);
$sql="insert into doctor (Doctor_Fname,Doctor_Lname,Dep_ID,Doctor_Detail,Picture) values('$doctorfname', '$doctorlname','$dep','$detail','$data')";
$result=mysql_query($sql);
ส่วนโค๊ดในการ ดึงรูปมาโชว์คือ
<?
require("..\web\config.php");
$sql="select * from doctor where doctor_id=1";
$result=mysql_query($sql);
$images = mysql_fetch_array($result);
echo $images['Picture'];
?>
ช่วยดูให้ทีนะครับ....
ดังนั้นข้อมูลที่ถูกเขียนลงใน database นั้นจะมีการใส่ "\" ไว้หน้า escape charactors ทั้งหมดครับ ดังนั้นการแสดงผลจึงต้องมีการนำเครื่องหมายเหล่านี้ออกด้วยครับถึงจะได้ข้อมูลที่ถูกต้องครับด้วย stripslashes()
** ที่สำคัญต้องมีการส่ง header ไปบอกด้วยครับว่าเป็นไฟล์ชนิดอะไร เช่น header("image/jpeg") ด้วยครับ
Tue 8 Nov 2005 09:20:23
ก็ยังไม่ได้อ่ะครับ...ดูโค๊ดนะครับ(การแสดงรูป)
<html>
<head>
<title>test download picture</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
</head>
<body>
<?
require("..\web\config.php");
$sql="select * from doctor where doctor_id=17";
$result=mysql_query($sql);
$images = mysql_fetch_array($result);
stripslashes();
header("Content - type : image/jpeg");
echo $images['Picture'];
?>
</body>
</html>
<?
$link = @mysql_connect("localhost", "uid", "pass");
@mysql_select_db("db_name", $link);
$res = @mysql_query("SELECT * FROM doctor WHERE doctor_id=17", $link);
$images = @mysql_fetch_array($res, MYSQL_ASSOC);
@mysql_free_result($res);
@mysql_close($link);
header("Content-type: image/jpeg");
echo stripslashes($image["picture"]);
?>
ในการใช้งานจริงแล้วในฐานข้อมูลที่เก็บรูปภาพนั้นควรจะให้มีการอ่านขนิดของไฟล์และเก็บไว้ในฐานข้อมูลด้วยครับ เพื่อที่จะได้แสดงผลได้อย่างถูกต้อง เช่น image/jpeg, image/gif, image/png หรืออื่นๆอีกมากครับ
Tue 8 Nov 2005 14:41:25
ขอบคุณครับ...และแล้วก็ถึงทางสว่างเสียที....จักเป็นพระคุณอย่างสูง
Tue 8 Nov 2005 15:46:55
Tue 8 Nov 2005 16:48:40
โค๊ด upload อยู่ข้างบนสุดเลยครับ...ตามนั้นเลย ส่วนการอับโหลดครบหรือเปล่านั้น ผมลองไปดูใน เทเบิล ปรากฎว่า ขนาด ที่เก็บเท่ากับรูปเลยครับ...เป็น [BLOB-15.7 กิโลไบท์] ครับ
ลองดาวน์โหลด mysqlcc มาลองดูครับ
Tue 8 Nov 2005 18:56:38
ขอโทษนะครับ..คือว่าผมดาวน์โหลดมาแล้ว แต่ผมใช้ไม่เป็นน่ะครับ...ไม่ทราบว่าพอจะแนะนำได้ไหมครับ...จักเป็นพระคุณอย่างสูง....
การใช้งาน
Create connection (Ctrl+N) ใส่ชื่อ connection, host name, user name, password ตามค่าที่ใช้ในการติดต่อ mysql ครับ
เสร็จแล้วทำการติดต่อเข้าไปยัง mysql server โดยดับเบิ้ลคลิ๊กที่ connection แล้วเข้าไปที่ database ที่ต้องการ เลือกที่ table ที่ต้องการ แล้วสามารถเลือกดูข้อมูลได้ทุก field และทุก record เลยครับ ซึ่งถ้าเป็นข้อมูล blob นั้นจะแสดงเป็นรูปขึ้นมาเลยครับ ซึ่งลองดูว่ารูปใน database นั้นถูกต้องหรือไม่ครับ
Wed 9 Nov 2005 08:19:41
ถ้าเป็นไปได้รบกวนท่าน guest สร้าง table เพื่อเก็บข้อมูลรูปภาพโดยโครงสร้างดังนี้ครับ
create table images (
image_id tinyint(3) not null default '0',
image_type varchar(25) not null default '',
image_blob blob not null,
image_size varchar(25) not null default ''
);
ส่วนในการแสดงผลก็เป็น
header("Content-type:".$row["imagetype"]);
้header("Content-length:".$row["image_size"]);
echo stripslashes($row["image_blob"]);
เพื่อความถูกต้องของข้อมูลครับ
Wed 9 Nov 2005 13:55:58
ครับผม...จะลองแก้ไขตรงส่วนนี้ดู...แล้วได้ผลเป็นยังงัย...จะแจ้งให้ทราบนะครับเพื่อเป็นความรู้ให้กับท่านอื่น..ขอบคุณทั่นเว็บมาสเตอร์มากครับ
Wed 9 Nov 2005 15:25:49
ปรากฎว่า รูปไม่ออกครับ ตรวจดูใน Mysql Control Center ข้อมูลก็มาปกติ แต่ ทำไม Type เป็น "image/pjpeg" ครับ พอเวลาดึงรูปมาดูก็ทำแบบที่ทั่นเว็บมาสเตอร์บอกเป๊ะเลย แต่รูปไม่โชว์ ครับ.....
header("Content-type:".$row["imagetype"]);
้header("Content-length:".$row["image_size"]);
echo $row["image_blob"];
Thu 10 Nov 2005 08:53:29
ก็ยังไม่ออกอยู่ดี...โฮะ โฮะ จนปัญญาแล้ว...ผม....ตาย
ไม่ทราบว่าเกี่ยวกันไหม ผมใช้ดรีมเขียน แล้วรัน โดยใช้ Appserv
http://localhost/Web/test1.php
โครงสร้างของฐานข้อมูลก็
Pic_ID tinyint(3)
Pic_Name varchar(45)
Pic_Type varvhar(25)
Pic_Data blob
Pic_Size varchar(25)
แล้วไฟล์ test1.php ก็มีโค๊ดดังนี้
<?
$link = @mysql_connect("localhost", "root", "");
@mysql_select_db("sirivej", $link);
$res = @mysql_query("SELECT * FROM picture WHERE Pic_ID=2", $link);
$images = @mysql_fetch_array($res, MYSQL_ASSOC);
@mysql_free_result($res);
@mysql_close($link);
header("Content-type:".$row["Pic_Type"]);
header("Content-length:".$row["Pic_Size"]);
echo $row["Pic_Data"];
?>
แต่ภาพไม่ยอมออกมา....
<?
$link = @mysql_connect("localhost", "root", "");
mysql_select_db("dbname" ,$link);
$data = fread(fopen($_FILES["userfile"]["tmp_name"], "rb"), filesize($_FILES["userfile"]["tmp_name"]));
$res = mysql_query("INSERT INTO modoeye_images(image_blob, image_type, image_size) VALUES('".$data."', '".$_FILES["userfile"]["type"]."', ".filesize($_FILES["userfile"]["tmp_name"]).")", $link);
mysql_close($link);
?>
ส่วนของการ download ครับ
<?
$link = mysql_connect("localhost", "root", "");
mysql_select_db("dbname", $link);
$res = mysql_query("SELECT * FROM modoeye_images WHERE image_id=".(int)$_GET["id"], $link);
$row = mysql_fetch_array($res, MYSQL_ASSOC);
mysql_free_result($res);
mysql_close($link);
header("Content-type: ".$row["image_type"]);
header("Content-length: ".$row["image_size"]);
echo stripslashes($row["image_blob"]);
?>
ทั้งหมดนี้ผมทดลองใน php ที่เปิด magic_quote_gpc นะครับ จะเห็นว่าตอน upload ผมไม่จำเป็นต้องใส่ addslashes() แต่ตอนแสดงผลผมต้งอใส่ stripslashes() เพิ่ม เพราะว่า system จะทำการ add ส่วน slash ส่วนเกิดเข้ามาครับ ลองนำไปใช้ดูนะครับ
Fri 19 Sep 2008 14:56:10
ยังมะได้เหมือนกันอะค่ะ ไม่รู้ทำไรผิด ภาพที่ออกมามันเป็นภาษาต่างดาวอะ
โค๊ดก็เป็นดังนี้อะค่ะ
<?
$hostname = "localhost";
$user = "root";
$password = "many1616";
$dbname = "tooktun";
$tblname = "Dolls";
mysql_connect($hostname, $user, $password) or die("ติดต่อฐานข้อมูลไม่ได้");
mysql_select_db($dbname) or die("เลือกฐานข้อมูลไม่ได้");
$link = @mysql_connect($hostname,$user, $password);
@mysql_select_db($dbname, $link);
$res = @mysql_query("SELECT * FROM Dolls WHERE ID = 'D001')", $link);
$images = @mysql_fetch_array($res, MYSQL_ASSOC);
header("Content-type: image/gif");
echo stripslashes($images["DPic"]);
@mysql_free_result($res);
@mysql_close($link);
?>
และอีกอย่างตรง header มันฟ้องว่าหยั่งงี้ด้วยอะคะ
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\tooktun\Webboard.php:144) in C:\AppServ\www\tooktun\Webboard.php on line 161
ทำไงดีคะเนี่ย แงๆ
Sun 21 Sep 2008 02:35:02

















