รบกวนถามเกี่ยวกับการบันทึกลงฐานทำไม ยังผิดพลาดรบกวนหน่อยนะคะ
เป็นไฟล์แนบทำไม เวลาบันทึกลงมันเป็นดังภาพ แล้วรูปก็ไม่อยู่โฟล์เดอร์ที่เรากำหนด้วยคะ
นี้โค๊ดบันทึกคะ
Code (PHP)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>Untitled Document</title>
</head>
<body>
<?php
if (isset($_POST['save'])){
require_once "include/connectdb.php";
require_once "include/connect.php";
require_once "include/tdate.php";
//include "inc.all.php";
if($_FILES["file"]["name"]!=""){
move_uploaded_file($_FILES["file"]["tmp_name"],"fileupload/" . $_FILES["file"]["name"]);
$file=basename($_FILES["file"]["name"]);
}else{
$file='';
}
$name=$_POST['name'];
$idcard=$_POST['idcard'];
$address=$_POST['address'];
$pro_code=$_POST['pro_code'];
$tel=$_POST['tel'];
$email=$_POST['email'];
$subject=$_POST['subject'];
$scene=$_POST['scene'];
$subjecth=$_POST['subjecth'];
$sceneh=$_POST['sceneh'];
$complaint=$_POST['complaint'];
$complainth=$_POST['complainth'];
$you=$_POST['you'];
$detail_compl=$_POST['detail_compl'];
$ask=$_POST['ask'];
function alphanumeric_rand($num_require=8) {
$alphanumeric = array('A','b','C','d','E','f','G','h','I','j','K','l','M','n','O','p','Q','r','S','t','U','v','W','x','Y','z',0,1,2,3,4,5,6,7,8,9);
if($num_require > sizeof($alphanumeric)){
echo "Error alphanumeric_rand(\$num_require) : \$num_require must less than " . sizeof($alphanumeric) . ", $num_require given";
return;
}
$rand_key = array_rand($alphanumeric , $num_require);
for($i=0;$i<sizeof($rand_key);$i++) $randomstring .= $alphanumeric[$rand_key[$i]];
return $randomstring;
}
$alphanumeric_rand = alphanumeric_rand(12);
mysql_query("insert into detail (name,address,pro_code,tel,email,idcard, subject,scene,subjecth,complaint,complainth,you,detail_compl,ask,filename,dateregist,timeregist,ipaddress,password,date
)
values ('$name','$address','$pro_code','$tel','$email','$idcard','$subject',
'$scene','$subjecth','$complaint','$complainth','$you','$detail_compl','$ask','$file','$e_date', '$etime','".$_SERVER['REMOTE_ADDR']."','".$alphanumeric_rand."',NOW()) ") or die(mysql_error());
// header('location:emp_profiles.php');
?>
<script>
alert("บันทึกข้อมูลเรียบร้อยแล้ว ");
location.href="emp_add.php"
</script>
<?
}
?>
</body>
</html>
Tag : PHP, MySQL
Date :
2013-08-22 14:09:04
By :
NToo
View :
763
Reply :
18
รูปเข้าดาต้าเบสแต่รูปไม่เข้าไปยังโฟลเดอไช่ไหมครับ
ปัญหานี้เท่าที่ผมเจอจะเกิดแค่ในเครื่องครับ(เป็นปัญหาไดเรคเทอรี่ของ appserv) ตามโค้ดนี้
Code (PHP)
move_uploaded_file($_FILES["file"]["tmp_name"],"fileupload/" . $_FILES["file"]["name"]);
***ถ้าบนโฮสจริงจะเข้าได้เลย(กำหนดแค่เพอมิสชั่น 777)
แต่ถ้าบนserverจำลอง(appserv) มันจะไม่ไช่แบบนั้นครับ สมมุติโครงสร้างเราเป็นดังนี้
ไฟล์คำสั่งย้ายรูป(ไฟล์โค้ดด้านบนสมมุติให้ชื่้อupload.php) อยู่ที่ C:\appserv\www\Mywork\upload.php
รูปจะไปลงที่ C:\appserv\www\Mywork\fileupload\
การจะกอปปี้ไฟล์ไปยังโฟลเดอร์ต้องใช้ดังนี้ครับ
Code (PHP)
move_uploaded_file($_FILES["file"]["tmp_name"],"Mywork/fileupload/" . $_FILES["file"]["name"]);
-------------------------------------------------------------------------------------
ถ้าอยู่ในไดเรคเทอรี่ย่อย
ไฟล์คำสั่งย้ายรูปอยู่ที่ C:\appserv\www\Mywork\upload\upload.php
รูปจะไปลงที่ C:\appserv\www\Mywork\upload\fileupload\
Code (PHP)
move_uploaded_file($_FILES["file"]["tmp_name"],"../Mywork/upload/fileupload/" . $_FILES["file"]["name"]);
ประวัติการแก้ไข 2013-08-22 15:14:58 2013-08-22 15:16:04
Date :
2013-08-22 15:10:36
By :
meannerss
ในฐานมันบันทึกอะไรไม่รู้คะที่ลงไป ไม่ใช่ไฟล์ที่เราแนบไว้คะ ส่วนในโฟลเดอร์ก็ไม่มีไฟล์ที่เราแนบไว้เหมือนกันคะ
Date :
2013-08-22 15:15:25
By :
NToo
กรรม งั้นแก้ใขปัญหารูปเข้าดาต้าเบสให้ได้ก่อนนะครับ
Code (PHP)
mysql_query("insert into detail (name,address,pro_code,tel,email,idcard, subject,scene,subjecth,complaint,complainth,you,detail_compl,ask,filename,dateregist,timeregist,ipaddress,password,date
ตัวไหนคือฟิลชื่อรูปภาพเอ่ย
**เพิ่มเติม**
หน้าฟอร์มที่ส่ง $_POST ตัวนี้มาที่ action มันต้องมี enctype="multipart/form-data" ด้วยนะครับสำหรับการส่งค่ารูปภาพ
เช่น . . . .
Code (PHP)
<form id="form1" name="form1" method="post" action="xxxx.php" enctype="multipart/form-data">
ประวัติการแก้ไข 2013-08-22 15:21:06 2013-08-22 15:25:43
Date :
2013-08-22 15:19:59
By :
meannerss
เป็นไฟล์นะคะ enctype="multipart/form-data" ใส่ตั้งแต่แรกแล้วคะ ฟิวส์เอกสารคือ filename คะ
Date :
2013-08-22 15:30:36
By :
NToo
อยากให้เช็คเป็นลำดับ และเป็นเหตุเป็นผลกันนะครับดงันี้นะครับ
Code (PHP)
if($_FILES["file"]["name"]!=""){
move_uploaded_file($_FILES["file"]["tmp_name"],"fileupload/" . $_FILES["file"]["name"]);
$file=basename($_FILES["file"]["name"]);
}else{
$file='';
}
1. ทดลองดูสิว่ามันรับค่าได้หรือไม่ ลองเปลี่ยนโค้ดเป็นดังนี้แล้วไปแนบไฟล์เข้ามา
if($_FILES["file"]["name"]!=""){
echo "ไช่มีการแนบไฟล์เข้ามา";
}else{
echo "ไม่มีไฟล์แนบ";
}
2. ถ้าขั้นตอน 1 ไม่มีข้อผิดพลาดแนบมาคือรับรู้ว่าแนบมา ไม่แนบมาก็รับรู้ว่าไม่แนบมา ให้ทดสอบค่า
if($_FILES["file"]["name"]!=""){
$file=basename($_FILES["file"]["name"]);
echo $file;
}else{
$file='';
echo $file;
}
3. ถ้าขั้นตอน 2 มีการรับรู้ชื่อไฟล์ที่แนบเข้ามาแสดงว่าเรารับค่าได้ถูกต้อง แต่ยังเข้าดาต้าเบสอีก แสดงว่า โค้ด sql ผิด ดังนั้นให้ไปเช็คดูดีๆที่โค้ด SQL
Code (PHP)
mysql_query("insert into detail (name,address,pro_code,tel,email,idcard, subject,scene,subjecth,complaint,complainth,you,detail_compl,ask,filename,dateregist,timeregist,ipaddress,password,date
)
values ('$name','$address','$pro_code','$tel','$email','$idcard','$subject',
'$scene','$subjecth','$complaint','$complainth','$you','$detail_compl','$ask','$file','$e_date', '$etime','".$_SERVER['REMOTE_ADDR']."','".$alphanumeric_rand."',NOW()) ") or die(mysql_error());
4. หลังจากสามารถเอาชื่อไฟลเข้าดาต้าเบสได้แล้วค่อยมาคุยกันต่อเรื่อง move_uploaded_file ครับผม
Date :
2013-08-22 15:40:27
By :
meannerss
ขอบคุณมากคะ ได้แล้ว ผิดที่ลืมตัวแปร 1 ตัวคะ ขอบคุณคะ
Date :
2013-08-22 15:56:26
By :
NToo
อีกนิดหนึ่งนะคะ จะสอบถามว่าถ้าเราจะกำหนดไฟลืไม่ให้เกิด 2 MB ได้ไหมคะ
Date :
2013-08-22 15:57:56
By :
NToo
$_FILES['filename']['size']==2000
Date :
2013-08-22 16:10:01
By :
Dragons_first
ใช้$_FILES["file"]["size"] ครับ หน่วยมันจะเป็นไบต์ 2MB ประมาณ 2000000 byte
if($_FILES["file"]["name"]!="")
{
//ถ้ามี
if($_FILES["file"]["size"]<2000000){ //ให้ตรวจสอบขนาด
$file=basename($_FILES["file"]["name"]);
}else{ echo"ขนาดใหญ่เกิน"; }
//จบการตรวจสอบขนาด
}else{
//ถ้าไม่มี
$file='';
}
ประวัติการแก้ไข 2013-08-22 16:23:07
Date :
2013-08-22 16:21:04
By :
meannerss
พี่คะ ตรงนี้ มันขึ้นโชวืแล้ว ว่าไฟล์ใหญ่ไป แต่ว่ามันก็ยังบันทึกลงฐานได้ และสิ่งที่บันทึกเข้าไปคือ C:WindowsTempphp8B4.tmp คือตัวนี้เหมือนเดิมคะ เราต้องทำอย่างไรดีคะ เมื่อพบว่าไฟล์ใหญ่ ก็จะไม่บันทึก จะไปหน้าฟอร์มให้เราเลือกใหม่ รบกวนอีกนิดนะคะ
Date :
2013-08-23 12:40:06
By :
NToo
สั่งให้เช็ค ขนาดไฟร์ ก่อน ที่จะ INSERT ครับ เช่น
Code (PHP)
if($fileimage >= 200000)
{
echo "ไม่สามารถบันทึกได้ไฟร์ใหญ่เกินกำหนด";
echo "<script>history.back()</script>";
exit();
}else{
mysql_query("INSERT INTO ............");
}
Date :
2013-08-23 13:03:33
By :
yamcrocodile
ครับการที่จะบล็อคไม่ให้มันเช้าฐานข้อมูลทำตาม คห.11 (แต่ระวังถ้าไฟล์ไม่เข้าอย่างอื่นที่อยู่ในคำสั่งนี้เช่นพวกชื่อผู้ใ้ช้งาน รายละเอียดอื่นๆอันจะไม่เข้าไปด้วยนะครับ เหมือนกับเราบังคับให้ไฟล์อัพโหลดไม่ผ่านไม่ต้องใช้งาน)
ส่วนสิ่งที่เข้า
C:WindowsTempphp8B4.tmp เกิดจาก $_FILES["file"]["tmp_name"] <<< ตัวนี้จะนำไปใช้กับการ moveupload
ถ้าเราจะเอาชื่อเช่น xxx.jpg , yyy.png เราต้องตั้งค่า $file ที่จะเข้าฐานข้อมูลเท่ากับ $_FILES["file"]["name"]
แยกกันให้ออกนะครับ. . . อิอิ
Date :
2013-08-23 13:19:31
By :
meannerss
หรือ อาจจะเปลี่ยน จากคำสั่ง move_uupload_file("","") เป็น copy("","") แทนก็ได้นะ
Date :
2013-08-23 13:26:10
By :
yamcrocodile
แล้วต้องทำอย่างไรคะ เพื่อว่าให้ตรวจสอบไฟล์เกิน แล้วไม่เขาย้อนกลับไปแนบไฟล์ใหม่คะ
Date :
2013-08-23 13:32:39
By :
NToo
Code (PHP)
if($_FILES["file"]["name"]!="")
{
//ถ้ามี
if($_FILES["file"]["size"]<2000000){ //ให้ตรวจสอบขนาด
$file=basename($_FILES["file"]["name"]);
}else{
echo"ขนาดใหญ่เกินกรุณาไปแนบไฟล์มาให้";
echo "<meta http-equiv='refresh' content='0;URL=ฟอร์มก่อนหน้า.php?ตัวแปร=$ตัวแปร'>"; // หรืออาจจะใช้ java กล่องเตือน
}
//จบการตรวจสอบขนาด
}else{
//ถ้าไม่มี
$file='';
}
เสร็จแล้วปัญหาที่พบคือผู้ใช้งานต้องมากรอกค่ารายละเอียดอื่นๆที่เคยกรอกใหม่ ถ้าเราไม่อยากให้เค้ากรอกใหม่ เราก็ติดค่าตัวแปรจิปาทะอื่นๆ ที่รับมากลับไปด้วยหลัง ฟอร์มก่อนหน้า.php?xxx=$xxx&yyy=$yyy
และไปปรับหน้าฟอร์มรับข้อมุลให้ value ของกล่องรับ ตัวอย่างเช่นกล่อง textfield เราจะส่งค่าชื่อผู้อัำปโหลดกลับไปด้วยไม่ต้องให้เค้าพิมพ์ใหม่
Code (PHP)
<input type="text" name="textfield" id="textfield" value="<?=$_GET['username'];?>" />
ประวัติการแก้ไข 2013-08-23 13:47:46 2013-08-23 13:48:59
Date :
2013-08-23 13:47:01
By :
meannerss
ทำไมเวลาบนทึกแล้ว ยังอยู่หน้าบันทึก ไม่ไปไหนเลยคะ นี้โค๊ดคะ
Code (PHP)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<title>Untitled Document</title>
</head>
<body>
<?php
if (isset($_POST['save'])){
require_once "include/connectdb.php";
require_once "include/connect.php";
require_once "include/tdate.php";
//include "inc.all.php";
if($_FILES["file"]["name"]!="")
{
//ถ้ามี
if($_FILES["file"]["size"]<2000000){ //ให้ตรวจสอบขนาด
$file=basename($_FILES["file"]["name"]);
}else{
echo"ขนาดใหญ่เกินกรุณาไปแนบไฟล์มาให้";
echo "<meta http-equiv='refresh' content='0;URL=ฟอร์มก่อนหน้า.php?ตัวแปร=$ตัวแปร'>"; // หรืออาจจะใช้ java กล่องเตือน
}
//จบการตรวจสอบขนาด
}else{
//ถ้าไม่มี
$file='';
}
$name=$_POST['name'];
$idcard=$_POST['idcard'];
$address=$_POST['address'];
$pro_code=$_POST['pro_code'];
$tel=$_POST['tel'];
$email=$_POST['email'];
$subject=$_POST['subject'];
$scene=$_POST['scene'];
$subjecth=$_POST['subjecth'];
$sceneh=$_POST['sceneh'];
$complaint=$_POST['complaint'];
$complainth=$_POST['complainth'];
$you=$_POST['you'];
$detail_compl=$_POST['detail_compl'];
$ask=$_POST['ask'];
function alphanumeric_rand($num_require=8) {
$alphanumeric = array('A','b','C','d','E','f','G','h','I','j','K','l','M','n','O','p','Q','r','S','t','U','v','W','x','Y','z',0,1,2,3,4,5,6,7,8,9);
if($num_require > sizeof($alphanumeric)){
echo "Error alphanumeric_rand(\$num_require) : \$num_require must less than " . sizeof($alphanumeric) . ", $num_require given";
return;
}
$rand_key = array_rand($alphanumeric , $num_require);
for($i=0;$i<sizeof($rand_key);$i++) $randomstring .= $alphanumeric[$rand_key[$i]];
return $randomstring;
}
$alphanumeric_rand = alphanumeric_rand(12);
mysql_query("insert into detail (name,address,pro_code,tel,email,idcard, subject,scene,subjecth,complaint,complainth,you,detail_compl,ask,filename,status,dateregist,timeregist,ipaddress,password,date)
values ('$name','$address','$pro_code','$tel','$email','$idcard','$subject',
'$scene','$subjecth','$complaint','$complainth','$you','$detail_compl','$ask','$file','รอดำเนินการ','$e_date', '$etime','".$_SERVER['REMOTE_ADDR']."','".$alphanumeric_rand."',NOW()) ") or die(mysql_error());
$id = mysql_insert_id();
// header('location:emp_profiles.php');
?>
<script>
alert("บันทึกข้อมูลเรียบร้อยแล้ว ");
location.href="view_pass.php<?php echo '?id='.$id; ?>"
</script>
<?
}
?>
</body>
</html>
Date :
2013-08-23 14:50:59
By :
NToo
จากโค้ดจะมีความเป็นไปได้มี 2 กรณีหลักนะครับ
1. กรณีแนบไฟล์เข้ามา
1.1 ไฟล์ขนาดไม่เกิน 2 MB ทำงานไปจนสุดบรรทัดสุดท้ายจนถึง alert("บันทึกข้อมูลเรียบร้อยแล้ว "); และเปลี่ยนหน้า
1.2 ไฟล์ใหญ่กว่า 2 MB ทำงานให้กลับไปยัง ฟอร์มก่อนหน้า.php
2. กรณีไม่มีแนบไฟล์ >>> จะไม่กลับไปแต่จะบันทึกแบบไม่มีไฟล์แนบไปเลย
แต่ถ้าอยากให้กลับไปต้องเพิ่ม.. . กรณีบังคับว่าผู้ใช้งานต้องแนบไฟล์เข้ามาเท่านั้น ให้เพิ่ม
Code (PHP)
echo "<meta http-equiv='refresh' content='0;URL=ฟอร์มก่อนหน้า.php?ตัวแปร=$ตัวแปร'>";
ไว้หลัง $file=''; บรรทัดที่ 27
Date :
2013-08-23 15:03:18
By :
meannerss
คือมันทั้งไม่แนบ ไม่บันทึกลงคะ
Date :
2013-08-23 15:30:58
By :
NToo
Load balance : Server 04