【问题标题】:Input type file not uploading file with name as test (copy).csv输入类型文件未上传名称为 test (copy).csv 的文件
【发布时间】:2019-04-06 11:26:20
【问题描述】:

我在 PHP PDO 和 MySQL 中创建了一个导入/导出 (CSV) 应用程序。 一切正常。 但是当我尝试导入文件名为 FILENAME (copy).csv 的文件时,它没有上传。我认为表单不仅仅是提交。如果我导入文件名为 FILENAME.csv 的文件,它工作正常。

这是我的代码:

HTML:

<form class="form-horizontal" action="import.php" method="post" name="frmCSVImport" id="frmCSVImport" enctype="multipart/form-data">
     <div class="input-row">
        <input type="file" name="file" id="file">
        <input type="submit" id="submit" name="import" class="btn-submit btn btn-primary" value="Import">
     </div>
</form>

PHP(import.php):

if (isset($_POST["import"])) {

$fileName = $_FILES["file"]["tmp_name"];

if ($_FILES["file"]["size"] > 0) {

    $file = fopen($fileName, "r");
    $flag = true;

    while (($column = fgetcsv($file, 10000, ",")) !== FALSE) {

        if($flag) { $flag = false; continue; }

        $requiredHeaders = array('Name', 'Email', 'Event_name'); //headers we expect

        $f = fopen($fileName, 'r');
        $firstLine = fgets($f); //get first line of csv file
        fclose($f);

        $foundHeaders = str_getcsv(trim($firstLine), ',', '"'); //parse to array

        if ($foundHeaders !== $requiredHeaders) {
        echo 'Headers do not match: '.implode(', ', $foundHeaders);
        die();
        }else
        {


            echo $name = $column[0]."<br>";
            echo $email = $column[1]."<br>";
            echo $event_name = $column[2]."<br>";

        }
    }
}

}

我不知道为什么会这样。谁能告诉我原因?

【问题讨论】:

  • 该文件是否已存在于服务器上,因此无法上传?名称中带有空格的其他文件是否正确上传?我们需要用于上传处理的代码来提供进一步帮助。
  • @kerbholz 是的。名称中带有空格的其他文件正在正确上传。我已经在帖子中添加了 PHP 代码。

标签: php html forms csv input


【解决方案1】:

我真傻,下面有这个用于验证 csv 文件名的脚本。

<script type="text/javascript">
$(document).ready(function() {
    $("#frmCSVImport").on("submit", function () {

        $("#response").attr("class", "");
        $("#response").html("");
        var fileType = ".csv";
        var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(" + fileType + ")$");
        if (!regex.test($("#file").val().toLowerCase())) {
                $("#response").addClass("error");
                $("#response").addClass("display-block");
            $("#response").html("Invalid File. Upload : <b>" + fileType + "</b> Files.");
            return false;
        }
        return true;
    });

});
</script>

我删除了该代码并开始工作。明显地。 :D 对不起大家。我的错。

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 2014-10-23
    • 2020-07-31
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多