我的要求如下: 当用户上传文件时,我应检查" 文件是否存在",如果文件存在,我必须显示确认框如果'确定'我必须替换,如果取消反向。 这是我的以下代码
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 :(得分: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混合使用。如果您不希望用户重新上载文档,则解决您的问题会更复杂:
答案 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得到了这个火花。如果有任何人有更好的解决方案,请提供。
我没有足够的声誉来投票给你的答案抱歉。
非常感谢你的支持。