0

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

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

4 回答 4

2

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

然后,该文档(其中包含 javascript 代码)将被发送给用户,并在那里运行 javascript 代码。在那一刻,用户可以看到确认对话框,即使文件已经被替换!

看看你的 php 代码生成的源代码,你就会明白我的意思。

一种解决方案是添加一个复选框以确认覆盖文件。然后在点击上传/提交按钮后,您的 php 脚本将检查是否选中了此框并替换文件。

于 2013-07-31T11:59:33.153 回答
2

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

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

于 2013-07-31T12:01:03.833 回答
2

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

  1. 将文件存储在随机文件名下的临时位置。向用户输出一个是/否形式,包括随机文件名和原始文件名。
  2. 如果用户回答是,则从临时位置移动到 $path,否则从临时位置删除文件。
于 2013-07-31T12:01:12.063 回答
0

伙计们,我附带了以下解决方案上传

上传文件.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 那里得到了这个火花。如果有人有更好的解决方案,请提供。

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

非常感谢您的支持。

于 2013-08-01T04:59:52.360 回答