A-AA+then

upload ไฟล์ให้ไฟล์เก่าโดนลบทิ้ง แล้ว อัพไฟล์ใหม่ ขึ้นไปค่ะ

2,729
คือว่า ต้องการให้ user อัพโหลดไฟล์ทับ ไฟล์เก่าค่ะ โดยตัว user จะมีไฟล์อยู่แล้ว แต่เค้าต้องอัพไฟล์ใหม่ทุกวัน ต้องการให้ ไฟล์เดิมโดนลบทิ้งตอนเค้าอัพ แล้วไฟล์ใหม่ไปแทนที่อะค่ะ ตอนนี้ทำได้แค่ลบไฟล์เดิมแค่ แต่ ว่า มันไม่ยอม อัพไฟล์ใหม่ ค่ะ รบกวนพี่ๆหน่อยนะคะ รบขอดูโค้ดให้หน่อย หรือว่า มีข้อเสนอแนะอะไรก็ได้ค่ะ ขอบคุณค่ะ 

อันนี้โค้ดค่ะ 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?
include("connect.php");
$id=addslashes($_GET['ID']);
$strSQL = "SELECT * FROM sales ";
$strSQL .= "WHERE id ='".$id."' ";
    $objQuery = mysql_query($strSQL) or die (mysql_error());
    $objResult = mysql_fetch_array($objQuery);
    if($objResult){
        if($objResult["dailyreport"]!=""){
            @unlink("file/".$objResult["dailyreport"]);
        }
copy($_FILES["fileUpload"]["tmp_name"],"../sales/file/".$_FILES["fileUpload"]["name"]);
$upSQL = "UPDATE FROM sales SET dailyreport = '".$_FILES["fileUpload"]["name"]."'  ";
$upSQL .="WHERE id = '".$id."' ";
$objQuery = mysql_query($upSQL);
}
if($objQuery)
{
echo "<script language = 'javascript'>alert('อัพโหลดข้อมูลเรียบร้อยแล้วค่ะ');</script>";
echo "<script language = 'javascript'>history.go(-1);</script>";
}
else{
echo "<script language = 'javascript'>alert('ไม่สามารถอัพโหลดข้อมูลได้ค่ะ');</script>";
echo "<script language = 'javascript'>history.go(-1);</script>";
}
mysql_close();
?>

</body>
</html>

7 ความคิดเห็น

เป็นไปไม่ได้ครับ

ปกติแล้วสิทธ์ในการลบไฟล์จะเท่ากับสิทธิ์ในการเขียนไฟล์ ดังนั้น ถ้าลบได้ก็ต้อง้ขียนได้

และ โดยปกติแล้ว เราไม่จำเป็นต้องลบไฟล์เดิมก่อน ถ้าไฟล์ใหม่มีชื่อเดียวกับไฟล์เก่าไฟล์เก่าจะถูกแทนที่ด้วยไฟล์ใหม่โดยอัตโนมัติ

ปัญหาที่คาดว่าอาจจะเป็นไปได้

ไฟล์ที่อยู่บน Server เดิม เป็นแบบ Readonly คำสั่งลบไฟล์ อาจไม่ได้ลบไฟล์ออกไปจริงๆ เพียงแต่การลบ ไม่ได้แสดง Error เมื่อไฟล์ไม่ได้ถูกลบออก ก็อาจทำให้ไม่สามารถอัปโหลดไฟล์ใหม่ได้ ซึ่งอาจไม่แสดง Error เช่นเดียวกัน

ปัญหาอื่นๆ เช่น

ชื่อไฟล์ใหม่ และ เก่าอาจไม่ตรงกัน 100% เช่น ตัวอักษรพิมพ์ใหญ่และเล็ก Server ที่เป็น Linux จะมองว่าเป็นคนละไฟล์อาจทำให้หากันไม่เจอได้

อีกเรื่องคือการใช้ name ในการอัปโหลด ถ้าชื่อไฟล์ที่อัปโหลดเป็นภาษาไทยก็อาจทำให้หาไฟล์ไม่เจอได้ครับ
1

ไฟล์โดนลบไปจริงค่ะ แต่เมื่อลบแล้ว มันให้อัพโหลดไม่ได้ค่ะ เหอๆ งง เหมือนกัน ค่ะ แล้ว โค้ดเขียนถูกแล้วไหมคะ ส่วนสิทธิ์การเข้าถึง ก็เป็น 777 แล้วอะค่ะ ขอบคุณอาจารย์มากๆนะคะสำหรับคำตอบ จะพยายามดูอีกทีค่ะ 
2

ลองตรวจสอบโฟลเดอร์ที่เก็บไฟล์ครับ ควรเป็น 646 เป็นอย่างน้อย หรือไม่ก็เป้น 777

หรือ ถ้ามั่นใจว่าลบไฟล์ได้จริง และไฟล์นั้นไม่ใช่ readonly และ ไฟล์ใหม่จะมีชื่อเดียวกับไฟล์เดิมเสมอ ทดลองอัปโหลดโดยไม่ต้องลบของเดิมดูครับ

อื่นๆ ก็เขียนโค้ดอัปโหลดไม่ถูกต้อง เช่น ระบุ Path ปลายทางไม่ถูกต้อง ลองใช้ Path แบบเต็มๆ โดยดูจาก ftp ครับ
3

ลืมบอกไป ก่อนการอัปโหลดควรตรวจสอบไฟล์ก่อนก็ดีนะ ป้องกันการอัปโหลดไวรัส
4

ขอบคุณอาจารย์มากนะคะสำหรับคำแนะนำ 

ค่ะ แต่ตอนนี้ เปลี่ยนสิทธิ์แล้ว ตอนแรกมันเป็น 777 แต่หลังจากนั้นก็ กลายเป็น XXX มันเป็นไรค่ะ เปลี่ยนกี่ทีก็กลายเป็น XXX ทุกทีเลยค่ะ เกิดจากอะไรคะ  
5

เปลี่ยนที่ไหนเอ่ย

บาง โปรแกรม ftp จะทำการ backup ค่าเดิมของ ftp ไว้ เช่น filezilla เพื่อการ restore แต่จริงๆแล้วไฟล์ถูฏ chmod ไปแล้วครับ

ถ้ากังวล ให้ลองระบุตัวเลขที่ต้องการลงไปตรงๆแทนการเลือกครับ (หรือลองใช้โปรแกรมอื่น หรือ อาจใช้ CP ของ Server ในการจัดการ)
6

อ่อ ขอบคุณแต่ แต่ว่า เรื่องอัพโหลดยังไม่ได้ค่ะ แหะๆ ขอบคุณสำหรับคำแนะนำมากๆนะคะอาจารย์
7
^