【问题标题】:dropzone - php upload create new filename with form field inputdropzone - php 上传使用表单字段输入创建新文件名
【发布时间】:2016-10-31 17:36:18
【问题描述】:

我创建了一个带有普通输入字段的表单和一个 dropzone(与 previewzone 相同)

<form  class="upload" method="post" action="galerie_upload.php">
<input id="vorname" name="vorname" type="text" placeholder="Ihr Vorname"/>
<div id="previews" class="dropzone"></div>
<input type="submit" name="button1" id="button1" value="Weiter" class="button" />

</form>

Drozone 脚本:

    new Dropzone("div#previews", {

init: function() {
  var myDropzone = this;

  this.on("maxfilesexceeded", function(file){
    myDropzone.removeFile(file);
  });  }});

拖放区配置

  url: "/galerie_upload.php",
  method: "post",
  withCredentials: true,
  parallelUploads: 10,
  uploadMultiple: false,
  maxFilesize: 10,
  paramName: "file",
  createImageThumbnails: true,
  maxThumbnailFilesize: 10,
  thumbnailWidth: 100,
  thumbnailHeight: 100,
  maxFiles: 3,
  params: {},
  clickable: "#previews",
  ignoreHiddenFiles: true,
  acceptedFiles: ".png, .jpg, .jepg, .tiff, .gif, .jpeg, .pdf",
  acceptedMimeTypes: null,
  autoProcessQueue: true,
  addRemoveLinks: true,
  previewsContainer: "#previews",

galerie_upload.php

$storeFolder = 'uploads/';
    $tempFile = $_FILES['file']['tmp_name'];          
    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder ; 
    $newFileName = $_FILES['file']['name'];
    $targetFile = $targetPath.$newFileName;  
    move_uploaded_file($tempFile,$targetFile); 

工作正常!所有删除的文件都移动到“上传”目录(max3,只有图像等)。例如:pdf.jpg

现在,我想要一个个性化的文件名。使用文本输入字段中的输入值创建(填充)原始文件名。

一个带有日期工作的测试:

    $time_short= date("d-m-Y");
$newFileName = $time_short.$_FILES['file']['name'];

上传文件夹中的结果

31-10-2016pdf.jpg

(稍后我可以使用“_”作为分隔符)

但这不起作用:

$newFileName = $vorname.$time_short.$_FILES['file']['name'];

结果与 31-10-2016pdf.jpg 相同。 $vorname 以“Stephan”为动力

一个echo $newFileName; 显示正确的文件名“Stephan31-10-2016”

让我(用于测试)一个像这样$vorname = 'stepgh';文件名也可以的php填充/"stepgh31-10-2016pdf.jpg"

问题出在哪里,解决方案如何?

谢谢

【问题讨论】:

  • 不要那样做。 [name] 可以包含路径信息,因为它是用户提供的数据。您允许用户在系统中的任何目录中乱写文件,例如['name'] = '../../../../../../../../../etc/passwd'
  • 谢谢,但我的表单中有很多验证测试。使用和不使用 jquery

标签: php file-upload dropzone.js


【解决方案1】:

除非您创建了$vorname 变量,否则不存在此类变量。如果您进行错误显示,这将显示出来。您必须像这样创建$vorname$vorname = $_POST['vorname'] 或在$newFilename 变量中使用$_POST['vorname']

【讨论】:

  • 谢谢,但我这样做了(否则回声测试无法工作)。但我不想发布我的完整 php,因为它太长了。这包括 "$vorname = $_POST ["vorname"];"我用 "$newFileName = $_POST ["vorname"].$time_short.$_FILES['file']['name']; 进行测试
  • 好吧,显然 $vorname 不包含任何内容(或至少包含映射到空字符串的内容),否则您会在文件名中看到它。所以回溯并找出它在哪里失去了这个价值。
  • 我做了一个“echo $vorname.”
    “;”在前面的一行中,看到包含“STEPHAN”,以及 $newFileName 的回声。“
    ”;在文件名中也显示“STEPHAN”。只有 move_uploaded_file 忽略这个(和复制/删除)..
  • 是的,他做到了:回声 $newFileName。"
    ";并回显 $vorname."
    "; (在同一行)显示包含“STEPHAN”只有 move_uploaded_file 过程忽略输入
  • 我认为 move_uploaded_file 过程认为输入不安全或无效。我使用双 POST(一个是我的 for,一个是 dropzone.jr)。我觉得有妙处
猜你喜欢
  • 2018-10-01
  • 2011-09-08
  • 1970-01-01
  • 2022-11-30
  • 2021-12-07
  • 2014-06-13
  • 2012-06-06
  • 2021-02-26
  • 1970-01-01
相关资源
最近更新 更多