พบกับบทความเกี่ยวกับคอมพิวเตอร์และ programming ได้ที่ http://articles.modoeye.com
PHP development / file ภาพ
Anan
Anan
Sat 28 Oct 2006 22:11:16

สวัสดีครับ

ผมขอคำแนะนำในเรื่องฟอร์มการแนบไฟลล์ภาพครับ ดังโปรแกรมด้านล่างดังนี้ครับ

<html>
<head>
</head>
<body>
<form name="form1" method="post" action="post_postbuyform.php" onSubmit="return validate(this);">
<table border="0" cellspacing="1" cellpadding="1">
<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product: </b></font></td>
<td><input type="text" size="30" name="product" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>
<input type="hidden" name="buy" value="1">
<tr><td><font color="#8B0000" face="verdana" size="1"><b>Packing: </b></font></td>
<td><input type="text" size="30" name="packing" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>
<tr><td><font color="#8B0000" face="verdana" size="1"><b><font color="#000000">*</font>Price: </b></font></td>
<td><input type="text" size="40" name="price" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>
<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product Detail: </b></font></td>
<td><textarea cols="30" row="10" name="productd" style="font-family:verdana; font-size: 10px; color:#000000;"></textarea></td></tr>
<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product photo: </b></font></td>
<td><input type="file" name="photo" size="10"></td></tr>
<tr><td height="30" valign="bottom"></td><td height="30" valign="bottom"><input type="submit" value="Post Buy"></td></tr>
</table>
</form>
</body>
</html>

คำถามครับ

1. การแนบไฟล์รูปภาพนั้น โดยปรกติมีเงื่อนไขอย่างไรบ้างครับ? อาทิ ต้องเป็น file jpg. มีขนาดของภาพเท่าใดครับ? ซึ่งถ้าเรากำหนดขนาดของภาพแล้ว เป็นได้ไหมครับที่เราจะรับภาพขนาดไม่เกินเท่าที่เรากำหนด ในกรณีที่ member แนบไฟลล์ภาพใหญ่เกินไป

2. การเก็บลงในฐานข้อมูลใน Mysql นั้น ต้องแยกเก็บออกมาอีกตารางหนึ่งต่างหาก หรือรวมกับข้อมูลที่ทั่วไปได้ครับ

3. การเก็บไฟล์ภาพลงในฐานข้อมูลนั้น เขียนอย่างไรครับ?

รบกวนขอคำแนะนำด้วยครับ

อนันต์

Administrator
Sun 29 Oct 2006 01:17:05
การ upload ไฟล์รูปภาพนั้น อย่างแรกคือใน <form> นั้นต้องระบุ attribute enctype="multipart/form-data" และ input ที่ใช้ก็ต้องเป็นชนิด file เช่น <input type="file">
การจะกำหนดชนิดของไฟล์นั้นทำได้ง่ายๆก็ใช้การตรวจสอบนามสกุลของไฟล์ก็ได้ครับ แต่ก็ไม่ได้ผลเสมอไปครับ เนื่องจากแต่ละไฟล์สามารถเปลี่ยนนามสกุลได้ การจะตรวจสอบว่าไฟล์ขนากใหญ่เกินไปหรือไม่นั้นก็มี การตรวจสอบได้ครับ เช่น

if(isset($_FILES["image"]["size"] && $_FILES["image"]["size"] > 0 && $_FILES["image"]["size"] < 50000){
    //upload
}

เมื่อมีการระบุ attribute enctype... แล้วใน PHP จะมีการสร้างตัวแปร $_FILES โดยมี index เป็นชื่อ input ชนิด file นั้นๆ และในแต่ละ object จะเป็น array ที่ระบุคุณสมบัติของไฟล์ที่ได้ถูก upload ขึ้นมาครับ ในการตรวจสอบขนาดก็ใช้ index size ในการตรวจสอบครับ

ในการเก็บลงฐานข้อมูลอาจจะเก็บลงใน record เดียวกันกับข้อมูลอื่นๆที่ถูก post เข้ามาก็ได้ครับ (จริงๆขึ้นอยู่กับความซับซ้อนของระบบครับว่าต้องการแบบใด)

การเก็บไฟล์ที่ upload แล้วนั้นแนะนำว่าเก็บเป็น file ลง directory ดีกว่าครับ โดยเก็บเฉพาะชื่อไฟล์ลงในฐานข้อมูลแทนครับ เนื่องจากการนำข้อมูลรูปภาพลงฐานข้อมูลนั้นทำให้การเรียกใช้งานนั้นช้าลงมากครับ และใช้งาน resource มากๆครับ
Anan
Anan
Wed 8 Nov 2006 22:04:15

*** เนื่องจากผู้ตอบช่วงนี้งานยุ่งมากครับ ถ้ามีโปรแกรมเมอร์ท่านอื่นช่วยแนะนำได้ กรุณาด้วยนะครับ***

สวัสดีครับ

คงตอบรบกวนอีกแล้วครับ ยังไงถ้าผู้ตอบพอมีเวลาว่างช่วยแนะนำด้วยนะครับ

เรื่องของการ upload files ที่ได้แนะนำมานั้น ผมได้ไปหาหนังสืออ่านของอาจารย์นิรุธ และพยายามเขียนตาม แต่ก็ยังไม่ค่อยเข้าใจ จึงต้องขอคำแนะนำเพิ่มเติมดังนี้ครับ

1. Form ในการรับข้อมูลและรูปภาพ ผมเขียนอย่างนี้ครับ

<?
session_start();
if(!isset($_SESSION["active"]) || $_SESSION["active"] != "ok" || !isset($_SESSION["username"]) || $_SESSION["username"] == "")
{
    header("Location: popup_postlogin.php?url=".$_SERVER["REQUEST_URI"]);
}
?>
<form name="form1" method="post" action="post_postbuyform.php" onSubmit="return validate(this);">
<table border="0" cellspacing="1" cellpadding="1">

<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product: </b></font></td>
<td><input type="text" size="30" name="product" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>

<input type="hidden" name="post" value="1">

<tr><td><font color="#8B0000" face="verdana" size="1"><b>Packing: </b></font></td>
<td><input type="text" size="30" name="packing" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>

<tr><td><font color="#8B0000" face="verdana" size="1"><b><font color="#000000">*</font>Price: </b></font></td>
<td><input type="text" size="40" name="price" style="font-family:verdana; font-size: 10px; color:#000000;"></td></tr>

<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product Detail: </b></font></td>
<td><textarea cols="40" rows="15" name="productd" style="font-family:verdana; font-size: 10px; color:#000000;"></textarea></td></tr>
</form>

<FORM ENCTYPE="multipart/form-data" ACTION="post_postbuyform.php" METHOD="post">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1024000">
<tr><td><font color="#8B0000" face="verdana" size="1"><b>Product Photo: </b></font></td>
<td><input type="file" name="productp" size=25></td></tr>

<tr><td height="50" valign="bottom"></td><td height="50" align="center"><input type="submit" value="Post Buy"></td></tr>
</table>
</form>

ผมมีคำถามดังนี้ครับ

1. ผมเขียน form แยกออกเป็น 2 ส่วน คือ form ที่รับข้อมูล และ form ที่รับรูปภาพ แล้ว submitครั้งเดียวครับ

2. ขนาดของไฟล์เท่ากับ 1024000 นั้นจะใหญ่ไปหรือเปล่าครับ เพราะผมไม่ทราบเหมือนกันว่ามันเท่าไหน? พอแนะนำได้ไหมครับที่พอเหมาะกับเนือที่ที่ผมเช่าอยู่

3. สำหรับคำแนะนำของคุณนั้น

การเก็บไฟล์ที่ upload แล้วนั้นแนะนำว่าเก็บเป็น file ลง directory ดีกว่าครับ โดยเก็บเฉพาะชื่อไฟล์ลงในฐานข้อมูลแทนครับ เนื่องจากการนำข้อมูลรูปภาพลงฐานข้อมูลนั้นทำให้การเรียกใช้งานนั้นช้าลงมากครับ และใช้งาน resource มากๆครับ

การสร้างโปรแกรม PHP ขึ้นมาเพื่อทำการ upload นั้น ผมเขียนดังนี้

<?
require("../main/config_1.inc.php");
if (!$link)
{
 print("Error");
}
else
{
 mysql_select_db("post",$link);
 $sql="INSERT into post(post, product, packing, price, productd, productp, dtnow)
  values('$post', '$product', '$packing', '$price', '$productd', '$productp', CURRENT_TIMESTAMP)";
 
  print("<br><font color='#228B22' face='verdana' size='2'><center><b>Adding to database is OK.</b></center></font>");
  print("<p><center>");
  print("<input type='button' value='Close' onclick='window.opener.location.href=window.opener.location.href; window.close();'>");
  print("</p></center>");
}
?>

ผมคิดว่าไม่น่าจะใช่เพราะว่าจากคำแนะนำของคุณนั้นหมายความว่า จะต้องมีการแยกเก็บส่วน

1. ส่วนที่เป็นรูปภาพลงใน folder ที่ตั้งขึ้นมาเพื่อเก็บภาพ

2. ส่วนที่เป็นชื่อของรูปภาพนั้นเก็บที่ฐานข้อมูลใน Mysql

ซึ่งวิธีการเขียนจะเขียนอย่างไร คงต้องขอคำแนะนำด้วยครับ

อนันต์

ไก่แสงทอง
ไก่แสงทอง
Wed 15 Nov 2006 18:06:07

$file=$_FILES['in_file'];
$group=$_POST['group'];
$basenamefile=basename($_FILES['in_file']['name']);
$nameup=date("YmdHis").strstr($file['name'],substr($file['name'],-4)); << ชื่อแล้วตามด้วย . นามสกุล ครับ
$target_path=".../".$nameup;
if (file_exists($target_path))
{
 $ErrorStr=$basenamefile. " already exists";
 }else{
  if (move_uploaded_file($_FILES['in_file']['tmp_name'],$target_path)){
   }else {
   $ErrorStr="Upload ".$basenamefile." failed." ;
  }
}

อันนี้จะเก็บเป็นชือ่นะครับ และจะเปลี่ยนชื่อของไฟล์เป็น date ครับ ในส่วนของชื่อไฟล์คุณจะใส่ฟังก์ชัน basename ลงไปแทนก็ได้ครับ

Administrator
Thu 23 Nov 2006 19:35:23
ขอบคุณท่าน ไก่แสงทองมากครับ ช่วยผมได้เยอะเลย
Reply
Name:
E-mail:
Home | Services | Forum | Classified | Directories | Support | Contact
ATOM feed RSS 0.9 feed RSS 1.0 feed RSS 2.0 feed
Copyright © 2005 - 2007 Modoeye.com, All Rights Reserved.
Disclaimer | Privacy policy | Term of Use | Term of Services
Valid XHTML Valid CSS! PHP: Hypertext Preprocessor MySQL database Apache Powered! FreeBSD Power to serve
Modoeye Sitemap Client login