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. การเก็บไฟล์ภาพลงในฐานข้อมูลนั้น เขียนอย่างไรครับ?
รบกวนขอคำแนะนำด้วยครับ
อนันต์
การจะกำหนดชนิดของไฟล์นั้นทำได้ง่ายๆก็ใช้การตรวจสอบนามสกุลของไฟล์ก็ได้ครับ แต่ก็ไม่ได้ผลเสมอไปครับ เนื่องจากแต่ละไฟล์สามารถเปลี่ยนนามสกุลได้ การจะตรวจสอบว่าไฟล์ขนากใหญ่เกินไปหรือไม่นั้นก็มี การตรวจสอบได้ครับ เช่น
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 มากๆครับ
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 ลงไปแทนก็ได้ครับ

















