替换上传的文件确认不起作用

时间:2013-07-31 11:45:02

标签: php javascript file-upload

我的要求如下: 当用户上传文件时,我应检查" 文件是否存在",如果文件存在,我必须显示确认框如果'确定'我必须替换,如果取消反向。 这是我的以下代码

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不允许。

4 个答案:

答案 0 :(得分:2)

你的问题是你混合了javascript和PHP。 PHP代码将在服务器上运行并生成HTML文档。此时,文件已被替换。

然后,这个文档(里面有javascript代码)将被发送给用户,然后运行javascript代码。在那一刻,即使文件已被替换,用户也可以看到确认对话框!

看一下你的php代码生成的源代码,你会看到我的意思。

解决方案是添加一个复选框以确认覆盖文件。然后在点击upload- / submit-button之后,你的php脚本会检查这个盒子是否被选中并且是否替换了该文件。

答案 1 :(得分:2)

@Gogul,老实说,这不是正确的方法。最好是使用AJAX请求处理文件提交,该请求从您的服务器接收响应(成功上载或文件存在),您可以正确处理。如果向用户提供替换文件的选项,请再次使用AJAX处理该操作。

您可以在原始JavaScript中执行AJAX请求(不需要jQuery) - 请参阅此处:http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp

答案 2 :(得分:2)

您正在将服务器端代码与客户端javascript混合使用。如果您不希望用户重新上载文档,则解决您的问题会更复杂:

  1. 将文件存储在随机文件名下的临时位置。向用户输出是/否表单,包括随机文件名和原始文件名。
  2. 如果用户回答“是”,则从临时位置移至$ path,否则从临时位置删除该文件。

答案 3 :(得分: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";
            }
  

confirm.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得到了这个火花。如果有任何人有更好的解决方案,请提供。

我没有足够的声誉来投票给你的答案抱歉。

非常感谢你的支持。