2013-03-13 52 views
1

以下两个问题阐明了由于安全原因无法更改input file的值。更改输入文件的值

在PHP中,验证一个形式中,通常的方法之一时是重新填补被点击submit按钮之前提供在input text输入的数值,所以客户知道他插入了什么,或者只是将值保存在字段中,这是客户期望的。 (每次出现特定错误时,他都不必重新填写表格)。

所以我们使用以下命令:

<input type="text" name="title" id="title" maxlength="100" value="<?php echo htmlspecialchars($title);?>" /> 

因此,既然我不能改变input file的价值,所以与所提供的路径$image['tmp_name']我可以重新填充它,这意味着客户将不得不重新上传(或重新浏览)图像,每次验证出错时,是否有任何可能的方法来保持该值?

+0

嗯,首先,验证之前提交(但不可靠,所以不信任它),然后在“禁运”下载您* *收到并保留对该文件的引用,告诉用户您将在重新提交时维护该文件。然后,每隔一段时间,删除从未移动到适当位置的文件。 – 2013-03-13 00:48:09

+0

你可以使用JavaScript验证,防止表单发布,直到它有效。 – bleuscyther 2013-03-13 00:48:11

+0

或... base64对文件源进行编码,将其发送回表单中的“隐藏”字段,并在返回时将其解码。显然,对于非常大的文件来说不是一个好主意,所以需要进行一些理智检查。 – 2013-03-13 00:50:04

回答

0

无论表单中存在其他验证错误(显然只有在文件本身有效时),然后用文件详细信息(例如列出文件名和大小)来替换文件上传字段,您才可以存储该文件。

实际上,如果他们愿意,而不是替换字段,我建议给他们上传不同文件的选项。

+0

如果其他输入无效,我不想存储文件(如果他没有注册 - 如果其他输入无效,我不想插入新用户的配置文件图片)。 – 2013-03-13 00:48:57

+0

您可以将文件存储在临时位置,直到注册完成,然后将其移至常用位置,并设置一个任务以定期从该临时目录中删除文件。但要做到你所要求的 - 只是把路径放回现场 - 是不可能的。 – 2013-03-13 00:55:07

0

将上传的文件存储在服务器上。

使用引用与该文件关联的ID的值生成复选框。使其默认被选中。

如果用户不想重复使用同一个文件,请取消选中它。

+0

存储文件并不是一件非常紧迫的事情,如果其他输入未经过验证,我不想存储它,这只是将路径保留在输入文件中的问题。但看起来像“输入文件”就像captcha,它会在回传后重新生成(变为空)。 – 2013-03-13 00:54:31

+0

您无法在文件输入中保留路径,这就是您将文件存储在服务器上的原因。这样,不仅保留了价值(以四舍五入的方式),而且文件不需要重复上传。 – Quentin 2013-03-13 07:31:07

0

使用JavaScript,您可以防止表单被提交,直到所有字段被验证。

我建议使用jQuery Validation Engine教程。 demos

您还可以使用jQuery file upload为图片上传器添加一些样式。

当然,一些领域必须在服务器上进行验证,这就是为什么您可以发布带验证引擎的ajax请求。

"ajaxUserCall": { 
    "url": "ajaxValidateFieldUser", 
    "extraData": "name=eric", 
    "alertText": "* This user is already taken", 
    "alertTextOk": " * User is valid", 
    "alertTextLoad": "* Validating, please wait" 
}, 

与服务器端验证不用其他的一些例如重定向或刷新:Demo

+0

问题不在于验证,问题是当我在服务器上进行验证时(检查数据库是否已使用电子邮件 - 检查用户名是否可用),并返回错误消息(此用户名不可用) ,“输入文件”中的路径消失了,我无法保留它的值。 – 2013-03-13 01:06:43

+0

当页面刷新? – bleuscyther 2013-03-13 01:10:56

+0

是的,当页面刷新。 – 2013-03-13 01:11:53