|
|
|
ช่วยทีครับ เรื่อง การอัพโหลดไฟล์รูปขึ้น database ใน mysql ยังไงครับ? |
|
|
|
|
|
|
|
ไม่มีคนตอบเลยครับ หรือผมตั้งคำถามแปลกมากหรอครับ บอกได้นะครับ ผมก็มือใหม่ไม่ค่อยแม่นครับ
|
|
|
|
|
Date :
2011-01-14 00:34:11 |
By :
slotqq |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เดี๋ยวตอบให้ครับ มันยาว
|
|
|
|
|
Date :
2011-01-14 00:37:16 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในบทเรียนก็มี ลองไปหาดูก่อน เหมือนกับที่คุณถามเด๊ะ
|
|
|
|
|
Date :
2011-01-14 00:48:52 |
By :
monotakari |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ความจริงแล้วมันบันทึกรูปลงฐานข้อมูลได้นะครับ แต่มันจะทำให้ฐานข้อมูลเก็บไฟล์ขนาดใหญ่ไป
เรามักจะเก็บแค่ชื่อไฟล์ หรือ Path รูปลงฐานข้อมูล (แนะนำให้เอาแค่ชื่อครับ ยืดหยุ่นและสะดวกในการเคลื่อนย้ายดี)
การบันทึกเราจะมี 3 ขั้นตอนที่จะต้องทำความเข้าใจกัน
1. สร้างฟอร์มที่ใช้อัพโหลดรูปได้
2. ย้ายไฟล์ที่อัพโหลดมาไปไว้ที่โฟลเดอร์รูปภาพ
3. ทำการบันทึก Path ที่เราเก็บไฟล์รูปนั้นไว้ในฐานข้อมูล (เก็บแต่ ชือรูปไว้ แล้วเวลาใช้ค่อยลิ้งเอาจากโฟลเดอร์จริงเอา)
ขั้นตอนที่ 1 - สร้างฟอร์มที่ใช้อัพโหลดรูปได้
การสร้างฟอร์ม ต้องระบุ Property ของแทก Form ให้มีค่า enctype="multipart/form-data"
แล้วก็มีแท็ก Input ประเภท File นะครับ ส่วนตรงพร็อพเพอร์ตี้ที่ชื่อ accept อันนั้นไว้เลือกประเภทไฟล์ที่ต้องการให้อัพโหลด
Code (PHP)
<form enctype="multipart/form-data" method="POST" action="form-action.php">
...
<input type="file" accept="image/x-png;image/gif;image/jpeg" name="pic" />
...
</form>
ขั้นตอนที่ 2 - ย้ายไฟล์ที่อัพโหลดมาไปไว้ที่โฟลเดอร์รูปภาพ
หลังจากเรากด Submit แล้วข้อมูลจะถูกส่งมาที่ฝั่งเซิฟเวอร์ โดยตัวแปร $_POST ซึ่่งจะเป็นอาเรย์ที่เราจะอ้างถึงค่าแต่ละฟอร์มโดยชื่อของสมาชิกฟอร์มตัวนั้นๆ ถูกต้องมั้ยครับ แต่พวกไฟล์ จะถูกอัพโหลดมาไว้ที่โฟลเดอร์ไฟล์ชั่วคราวของเซิฟเวอร์ (Temp) และข้อมูลเกี่ยวกับไฟล์จะถูกเก็บไว้ในตัวแปร $_FILES ซึ่งถ้าอยากได้ข้อมูลของรูปนั้น เราก็ต้องอ้างชื่อของอัพโหลดคอนโทรลตัวนั้นๆ ซึ่งของคุณตั้งชื่อว่า pic
ที่นี้ เราจะเอาข้อมูลที่มีอยู่มาใช้ในการ ย้ายไฟล์รูปจากโฟลเดอร์ Temp ไปไว้ในโฟลเดอร์ที่ถูกต้องกัน
Code (PHP)
<?php
$upload_dir = '/images';
foreach ($_FILES["pic"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pic"]["tmp_name"][$key];
$name = $_FILES["pic"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
ใน $_FILES['pic'] จะมีคีย์ย่อยอีก มีความหมายดังนี้
$_FILES['pic']['name'] ชื่อดั้งเดิมของไฟล์พร้อมนามสกุล
$_FILES['pic']['type'] ชนิดไฟล์
$_FILES['pic']['size'] ขนาด
$_FILES['pic']['tmp_name'] ชื่อตอนที่อยู่ในโฟลเดอร์ Temp
$_FILES['pic']['error'] เลขบอก Error
ขั้นตอนที่ 3 - ทำการบันทึก Path ที่เราเก็บไฟล์รูปนั้นไว้ในฐานข้อมูล
ขั้นตอนนี้ง่าย ก็แค่เอา $_FILES['pic']['name'] ลงฐานข้อมูล
พอตอนจะเอามาแสดง ก็แค่เอาชื่อรูปที่ดึงจากฐานข้อมูล มาแปะกับ directory ของโฟลเดอร์รูป ก็เอามาแสดงผลผ่านแท็ก <img> ครับ
Reference
move_uploaded_file() http://th.php.net/manual/en/function.move-uploaded-file.php
|
ประวัติการแก้ไข 2011-01-14 01:07:24
|
|
|
|
Date :
2011-01-14 01:01:43 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากๆครับสำหรับคำตอบนะครับ พี่ใจดีมากครับ
ผมขอประดับความรู้อีกนิดได้ไหมครับ
ตรงที่พี่ว่า "ความจริงแล้วมันบันทึกรูปลงฐานข้อมูลได้นะครับ แต่มันจะทำให้ฐานข้อมูลเก็บไฟล์ขนาดใหญ่ไป"
คือผมอยากรู้วิธี บันทึกรูปลงฐานข้อมูล เลยได้ไหมครับ ถ้ากรุณาจะดีใจมากๆเลยครับ
|
|
|
|
|
Date :
2011-01-14 02:15:43 |
By :
slotqq |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำตามที่พี่ kenessar บอก
มันขึ้นงี้อะครับ Warning: Invalid argument supplied for foreach() in /home/slotqq/public_html/testres/add_data1.php on line 3
มันเตือนฟังก์ชั่น foreach ไม่รู้ใช่ป่าวนะครับ ผมคิดเอง
นี่โค๊ดดนะครับ
Code (PHP)
<?php
$upload_dir = '/myfile';
foreach ($_FILES["pic"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pic"]["tmp_name"][$key];
$name = $_FILES["pic"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
|
|
|
|
|
Date :
2011-01-14 05:20:56 |
By :
slotqq |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับตรง foreach ครับ มันบอกว่าสิ่งที่ใส่มาให้มันนั้นไม่ใช่สิ่งที่ควรจะต้องใส่ลงไป (มันต้องใส่อาเรย์ลงไปน่ะครับ) ลองคอมเม้นโค้ดไว้ก่อน แล้วลอง var_dump($_FILES['pic']); ดู ถ้ามันแสดงออกมาเป็นโครงสร้างอาเรย์น่ะแสดงว่าถูกต้อง
แต่ถ้ามันไม่ใช่อาเรย์ มันเป็นค่าว่างๆ อันนี้อาจจะเกิดจากว่าเรารับค่ามาไม่ถูกต้องนะ
แต่ถ้าอยากเอาไฟล์รูปลงฐานข้อมูลเลย ก็ตั้งให้ฟิลด์ที่เราจะเอารูปลงเป็น BLOB อย่างที่คุณ monotakari ได้บอกไว้ข้างต้นน่ะครับ
|
ประวัติการแก้ไข 2011-01-14 07:32:27 2011-01-14 07:34:41
|
|
|
|
Date :
2011-01-14 07:31:06 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เหมือนจะได้ครับแต่ทำไม ไฟล์รูปเข้าโฟล์เดอร์นะครับ แต่ชื่อรูปเข้าdbแค่ชื่อเดียวครับ
แถมเข้าในdbมันเป้นแรคคอดไหม่ด้วย
เช่นผมอัพเรคคอดของคนแรกแล้วภาพมันก็เข้านะครับ แต่มันไปเข้าเป็นแรคคอดที่สองครับ ดังรูป
และหลังจากนั้นพออัพข้อมุลของคนอื่นเข้าdb ข้อมูลเข้าครับ รูปภาพเข้าโฟลเดอร์เรียบร้อย แต่ชื่อภาพไม่ยอมเข้า db อะครับ
วานพี่ๆช่วยหน่อยนะครับ
นี่โค๊ดของผมนะ Code (PHP)
<?
if(copy($_FILES["pic"]["tmp_name"],"myfile/".$_FILES["pic"]["name"]))
{
echo "Copy/Upload Complete<br>";
//*** Insert Record ***//
$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");
$objDB = mysql_select_db("slotqq_test");
$strSQL = "INSERT INTO wfc";
$strSQL .="(pic) VALUES ('".$_FILES["pic"]["name"]."')";
$objQuery = mysql_query($strSQL);
}
?>
<?
require("config.inc.php");
$name=$_REQUEST['name'];
$lastname=$_REQUEST['lastname'];
$email=$_REQUEST['email'];
$phone=$_REQUEST['phone'];
$clas=$_REQUEST['clas'];
$testi=$_REQUEST['testi'];
if($name=="" or $lastname=="" or $email=="" or $phone=="" or $clas=="" or $testi=="")
{
echo("<center>กรุณากด Back เพื่อป้อนข้อมูลที่สำคัญให้ครบ</center>");
exit;
}
echo"<b>ข้อมูลที่ป้อน</b><br>";
echo"ชื่อ:$name<br>";
echo"นามสกุล:$lastname<br>";
echo"E-mail:$email<br>";
echo"โทรศัพท์:$phone<br>";
echo"คอสที่เคยเรียน:$clas<br>";
echo"ความประทับใจ:$testi<br>";
$sql="insert into $tblname(name,lastname,email,phone,clas,testi)values('$name','$lastname','$email','$phone','$clas','$testi')";
$result=mysql_query($sql);
if(!$result)
{
echo("เอ็กซิคิวต์คำสั่ง SQL ไม่ได้".mysql_error());
}
else
{
echo"<b>ตรวจสอบความถูกต้องอีกครั้ง และกดยืนยันข้อมูลที่ปุ่มด้านล่างค่ะ</b><hr>";
}
//หยุดติดต่อฐานข้อมูล
mysql_close;
?>
|
|
|
|
|
Date :
2011-01-14 20:13:54 |
By :
slotqq |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รบกวนถามหน่อยครับ
ถ้าผมจะดึงรูปจาก database โดยเมื่อกดรูปแล้วให้ดึงรูปใหม่มาแทนรูปเก่า
ต้องทำไงครับ ทำไม่เป็นเลยครับ ทำให้วัดอะครับ www.watkangpla.com/sacred.html
|
|
|
|
|
Date :
2011-11-29 15:00:25 |
By :
GTONIC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อัพโหลดรูปภาพลงฐานข้อมูลแล้ว
เรียกรูปภาพในฐานข้อมูลมาแสดง แต่รูปมันไม่ขึ้น
มันขึ้นรูปสี่เหลี่ยมแล้วมี กากบาทอ่ะค่ะ ต้องทำยังไงคะ
อันนี้เป็นฐานข้อมูลค่ะ
|
|
|
|
|
Date :
2012-01-23 14:47:28 |
By :
piya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?=$fetch[ตรงนี้ก็ใส่ฟิลของรูป]?>
|
|
|
|
|
Date :
2012-01-23 15:40:22 |
By :
Spect2um |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
กรูณาตอบชัดๆได้ป่าวครับ ผมอ่านแล้วไม่เข้าใจ มือใหม่เพิ่งเรียนรู้ โค้ดเย่อะมาก แปะผิดที่ไม่ก็ได้อยากให้อธิบายแต่ละขั้นตอนเลยได้ป่าวครับ
|
|
|
|
|
Date :
2012-06-01 12:12:42 |
By :
tu85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตรงcommnet No 8 ครับตรง foreach ครับ มันบอกว่าสิ่งที่ใส่มาให้มันนั้นไม่ใช่สิ่งที่ควรจะต้องใส่ลงไป (มันต้องใส่อาเรย์ลงไปน่ะครับ) ลองคอมเม้นโค้ดไว้ก่อน แล้วลอง var_dump($_FILES['pic']); ดู ถ้ามันแสดงออกมาเป็นโครงสร้างอาเรย์น่ะแสดงว่าถูกต้อง
แต่ถ้ามันไม่ใช่อาเรย์ มันเป็นค่าว่างๆ อันนี้อาจจะเกิดจากว่าเรารับค่ามาไม่ถูกต้องนะ
แต่ถ้าอยากเอาไฟล์รูปลงฐานข้อมูลเลย ก็ตั้งให้ฟิลด์ที่เราจะเอารูปลงเป็น BLOB อย่างที่คุณ monotakari ได้บอกไว้ข้างต้นน่ะครับ
ถ้าเป็นค่าว่าง vาจเกิดจากการรับค่าไม่ถูกต้องยังไงเหรอคับ รบกวนผู้รู้ช่วยตอบ
|
|
|
|
|
Date :
2012-08-04 15:07:56 |
By :
l3koko |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองแบบไม่ระบุชื่อดูครับ var_dump($_FILES);
ปกติถ้าฝั่งฟอร์ม html มี <input type="file" อยู่ ก็จะเจอนะครับ โดยมันจะแบ่งตามชื่อเช่น
<input type="file" name="file1" />
<input type="file" name="file2" />
ฝั่ง php จะรับได้จาก $_FILES['file1'] กับ $_FILES['file2'] นะครับ
|
|
|
|
|
Date :
2013-02-10 11:27:53 |
By :
kenessar |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เราเป็นแบบนี้
พอใส่ enctype=multipart form/data ชื่อไฟล์ไม่ลงฐานข้อมูล แต่ไฟล์รูปอัพได้
ถ้าไม่ใส่enctype=multipart form/data ชื่อไฟล์ลงฐานข้อมูลได้ แต่รูปภาพไม่ไป
เกี่ยวกันไหมท่านอื่นๆเป็นเหมือนกันไหม
|
|
|
|
|
Date :
2019-09-13 16:03:10 |
By :
หัดทำ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|