我正在使用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”。
我该如何做到这一点?
答案 0 :(得分:2)
您刚刚将文字value
放在属性值中,而不是带有该名称的变量的值。
您可以写入隐藏输入的id
属性。
为此,您应该为隐藏的输入提供id=file_names
,例如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
}
相同)。
然后将脚本更改为此(忘记全局变量):
<input type="hidden" name="file_names" id="file_names">
隐藏输入的HTML可以没有值:
<img src="trend_g.php?element_3=$queue&month=$std_mm&year=$std_yy" />
<img src="trend_g.php?element_3=Apple&month=06&year=2016" />
注意:我不知道你将如何处理这个价值;它看起来很奇怪,但我希望你知道你在服务器端做了什么。
答案 1 :(得分:0)
当你调用函数clean()时,你传入一个变量“this.value”,但函数本身不带任何参数。引入参数或停止使用参数调用clean()。
答案 2 :(得分:0)
由于我发现了正在发生的事情,因此我将使用formmail.php为那些可能遇到同样问题的人添加此信息。
当使用重命名将要上传的文件的工具时,你真的需要定义隐藏的输入&#34; file_names&#34;值为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函数的唯一用户输入中获得两个值,就像这样(assignement splited):
<script type="text/javascript">
function clean()
{
var newName = document.getElementById("CompanyName").value.replace(/[/\\/'"*&%$]/g, "");
document.getElementById("cleanName").value = newName;
}
</script>
我希望这可以对其他人有所帮助。