2013-07-31 170 views
0

我的要求如下: 當用戶上傳一個文件,我應該檢查「文件已經存在」,如果文件存在,我必須表明確認框,如果「OK」我有取代,如果取消反向。 這是我下面的代碼更換上確認上傳的文件不能正常工作

if (file_exists($path . $documentName)) { 
       $msg = $documentName . " already exists. "; 
       ?> 
       <script type="text/javascript"> 
        var res = confirm('File already exists Do you want to replace?'); 
        if (res == false) { 
       <?php 
       $msg = 'File Upload cancelled'; 
       ?> 
        } else { 


       <?php 
       if (move_uploaded_file($_FILES["document"]["tmp_name"], $path . $documentName)) { 
        $msg = $documentName . " File Replaced Successfully"; 
        $successURL = $document_path . $documentName; 
       } 
       else 
        $msg = $documentName . "Upload Failed"; 
       ?> 
        } 
       </script>"; 
       <? 
      } 

我的問題是,即使我給取消的文件是越來越取代。 只是讓我知道我錯了或有其他方法? 請幫我解決這個問題 注意:jquery不允許。

回答

0

傢伙,我想出了這個解決方案之後上傳

uploaddocument.php

  $documentName = preg_replace('/[^a-zA-Z0-9.]/s', '_', $_FILES["document"]["name"]); 
      if (file_exists($path . $documentName)) { 
       move_uploaded_file($_FILES["document"]["tmp_name"], "F:\\Content\\enews_files\\temp\\" . $documentName); 
       $msg = $documentName . " already exists. <a href='confirm.php?confirm=1&filename=" . $documentName . "&language=" . $lang . "'>Replace</a>||<a href='confirm.php?confirm=0&filename=" . $documentName . "'>Cancel</a>"; 
      } else { 
       if (move_uploaded_file($_FILES["document"]["tmp_name"], $path . $documentName)) { 
        $msg = $documentName . " Upload Success"; 
        $successURL = $document_path . $lang . '/' . $documentName; 
       } 
       else 
        $msg = $documentName . " Upload Failed"; 
      } 

確認。PHP

include("config_enews.php"); 
$lang = $_GET['language']; 
$path = "F:\\Content\\enews_files\\" . $lang . "\\"; 
//$path = "D:\\test\\test\\" . $lang . "\\"; 
$documentName = preg_replace('/[^a-zA-Z0-9.]/s', '_', $_GET["filename"]); 
if ($_GET['confirm'] == 1) { 

//echo sys_get_temp_dir();die; 
    if (copy("F:\\Content\\enews_files\\temp\\" . $_GET["filename"], $path . $documentName)) { 
     unlink("F:\\Content\\enews_files\\temp\\" . $_GET["filename"]); 
     header("Location: uploaddocument.php?message=success&fname=$documentName&lang=$lang"); 
    } else { 
     echo $res = move_uploaded_file($_GET["tempname"], $path . $documentName); 
     echo $msg = $documentName . " Upload Failed"; 
     header("Location: uploaddocument.php?message=failed&fname=$documentName"); 
    } 
} else { 
    unlink("F:\\Content\\enews_files\\temp\\" . $_GET["filename"]); 
    header("Location: uploaddocument.php?message=cancelled&fname=$documentName"); 
} 

我從@Marek得到這個火花。如果有人提供更好的解決方案。

我沒有足夠的聲譽投票你的答案抱歉。

非常感謝您的支持。

2

你的問題是,你混的JavaScript和PHP。 PHP代碼將在服務器上運行並生成HTML文檔。此時,文件已被替換。

然後,將該文件(使用JavaScript代碼內)將被髮送給用戶和在那裏的JavaScript的代碼運行。在那一刻,用戶可以看到確認對話框,即使文件已被替換!

看看你的PHP代碼生成的源代碼,你會明白我的意思。

一個解決辦法是增加一個複選框,確認是否覆蓋文件。然後在點擊上傳/提交按鈕後,你的php腳本會檢查這個盒子是否被選中並且替換文件。

2

@Gogul,說實話,這不是正確的道路要走。更好的辦法是使用AJAX請求處理文件提交,該請求接收來自服務器的迴應(成功上傳或文件存在),您可以正確處理。如果向用戶提供替換文件的選項,請再次使用AJAX處理該操作。

你可以做原料的JavaScript AJAX請求(jQuery的不要求) - 在這裏看到:http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp

2

您與客戶端的JavaScript混合服務器端代碼。

  1. 存儲在隨機的文件名的臨時位置的文件:如果您不希望用戶重新上傳文檔你的問題的解決更加複雜。向用戶輸出是/否表格,包括隨機文件名和原始文件名。
  2. 如果用戶回答是,則從臨時位置移至$ path,否則將文件從臨時位置移除。
+0

所以你問我使用窗體警報? – Gogul

+0

謝謝,現在我明白了。將完成它並張貼我的答案 – Gogul