单击提交按钮时为什么我丢失了文件名值

时间:2016-02-06 23:59:21

标签: javascript php

我已经制作了一个表单来传递服务器上的xml文件。虽然当它正确地将文件发送到服务器时,似乎页面重新加载并且文件名的值丢失并且我的javascript代码没有返回任何内容。 但是,如果我删除该行

    <input type="submit"  />  

从下面的代码中将文件名保存在变量x中,但它不会将文件发送到服务器。 我想在服务器上发送文件并将其名称保存到变量中,以便在任何其他javascript函数中使用。

<?php
$uploads_dir='/web/stud/external/scomvs2/epicurus';

if(isset($_FILES['xml_file1'])){
    $errors= array();
    $file_name = $_FILES['xml_file1']['name'];
    $file_size =$_FILES['xml_file1']['size'];
    $file_tmp =$_FILES['xml_file1']['tmp_name'];
    $file_type=$_FILES['xml_file1']['type'];
    $file_ext=strtolower(end(explode('.',$_FILES['xml_file1']['name'])));
    $expensions= array("xml","XML");

    if(in_array($file_ext,$expensions)== false){
        $errors[]="extension not allowed, please choose an xml file.";
    }

    if($file_size > 2097152){
        $errors[]='File size must be excately 2 MB';
    }

    if(empty($errors)==true){
        move_uploaded_file($file_tmp,"$uploads_dir/$file_name");
        echo "Success";
    }else{
        print_r($errors);
    }
}
?>

<html>
<body>
    <form  action="" method="POST" enctype="multipart/form-data">
        <input type="file" id="uploading"  name="xml_file1"/>
        <input type="submit"  />  
    </form>
    <button type="button" onclick="myFunction()">Try it</button>    
    <p id="demo"></p>
    <script>
        function myFunction() {
            var x = document.getElementById("uploading").value;
            document.getElementById("demo").innerHTML = x;

        }
    </script>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您可以在我们的Javascript部分添加以下内容:

<script>
    function myFunction() {
        var x = <?=json_encode($file_name)?>;
        document.getElementById("demo").textContent = x;
    }
</script>

现在,当您在Javascript中调用该函数时, demo 元素将显示文件名。请注意,最好使用 textContent 而不是 innerHTML ,但使用文件名时,您不会有使用HTML会解释的特殊字符(<>&)的风险。

现在您还应该确保始终定义 $ file_name 。因此,在PHP代码的顶部,添加:

$file_name = '';

您可以直接在 demo 标记中注入文件名,而不是在Javascript代码中注入文件名,如下所示:

<p id="demo"><?=htmlspecialchars($file_name)?></p>

然后你不需要Javascript来填写它,如果这就是你想做的。