0

我正在使用 formmail.php 中的一项功能,该功能允许我使用隐藏输入来重命名用户上传的文件。这样我可以保留真实公司名称的值,同时从组合文件名中删除非法字符。

我编写了一个函数,可以进行适当的替换并将新值分配给字符串变量,这样我就可以在隐藏的输入中使用。像这样:

<input type="text" id="CompanyName" name="CompanyName" size="60" maxlength="40" onchange="clean(this.value)" required>

<script type="text/javascript">
 cleanName = "";  // variable outside the function meant to be Global
 function clean()
 {
 cleanName = document.getElementById("CompanyName").value.replace(/[/\\/'"*&%$]/g, "");
 }
 </script>

然而,当我尝试使用那个“cleanName”变量时,它的值显示为空:

<input type="hidden" name="file_names" value="Proof=State.%2D%.cleanName.%'-Paymnt'%.%2D%.Proof" />

该文件以“NY--Paymnt-FileName.pdf”的形式上传。

我怎样才能使这项工作?

4

3 回答 3

2

您只是将文字cleanName放在属性值中,而不是带有该名称的变量的值。

您可以写入value隐藏输入的属性。

为此,您应该给隐藏的输入一个id, like id=file_names(same as name)。

然后将脚本更改为此(忘记全局变量):

function clean() {
     var cleanName = document.getElementById("CompanyName").value
                             .replace(/[/\\/'"*&%$]/g, "");
     cleanName = "Proof=State.%2D%." + cleanName + ".%'-Paymnt'%.%2D%.Proof";
     console.log(cleanName);
     document.getElementById("file_names").value = cleanName
 }

隐藏输入的 HTML 可以没有值:

<input type="hidden" name="file_names" id="file_names">

注意:我不知道你打算用这个值做什么。它看起来很奇怪,但我希望你知道你在服务器端做什么。

于 2016-08-23T18:28:30.133 回答
0

当您调用函数 clean() 时,您传入一个变量“this.value”,但函数本身不接受任何参数。要么引入一个参数,要么停止使用参数调用 clean()。

于 2016-08-23T18:28:49.190 回答
0

因为我发现了发生了什么,所以我为那些使用 formmail.php 可能遇到同样问题的人添加了这些信息。

当使用重命名将要上传的文件的功能时,您确实需要定义隐藏的输入“file_names”值作为formmail.php 将使用的参数。如:

<input type="hidden" name="file_names" value="Proof=State.%2D%.cleanName.%'-Paymnt'%.%2D%.Proof" />

问题是当用户键入不能在文件名中使用的非法字符(例如反斜杠)时。

因此,在我的示例中,为了从变量中去除这些非法字符并创建另一个我可以通过 javascript 函数在其他地方使用的变量,我刚刚定义了一个新的隐藏输入,例如:

<input type="hidden" name="cleanName" id="cleanName" />

然后,当用户键入要修改的值时,我调用了该函数:

<input type="text" id="CompanyName" name="CompanyName" size="60" maxlength="40" onchange="clean()" required>

这样,我可以使用 javascript 函数从唯一用户输入中获得两个值,如下所示(分配拆分):

<script type="text/javascript">
 function clean()
 {
 var newName = document.getElementById("CompanyName").value.replace(/[/\\/'"*&%$]/g, "");
 document.getElementById("cleanName").value = newName;
 }
</script>

我希望这对其他人有帮助。

于 2016-08-23T20:32:10.103 回答