在服务器端,你没有得到有关其中文件位于客户端的计算机上的任何信息,所以在用户的情况下成功地上传图片,但用户未填写其余这些字段是正确的,你必须完全忽略input type="file"
字段,但要保存文件在服务器上的位置。有几种方法去这个问题,但它所有涉及服用上传文件的绝对位置和:
- 插入回为使用
<input type="hidden" name="uploadedFile" value="<?php echo $absPath; ?>" />
然后为$_POST['uploadedFile']
的生存确认,并适当地利用它隐藏的价值。但是,这并不是一个明确的想法,因为您现在正在向最终用户公开服务器路径(打开自己直到恶意攻击)。
- 启动会话并在
$_SESSION
变量中保存绝对路径,同时向用户显示一个简单的标志在他们的重新尝试形式。
我会坚持使用方法2,所以假设你已经做了所有的工作,以验证表单,并上传文件和文件位于$absFilePath
,你可以做到以下几点:
session_start(); // This needs to be at the very top of you PHP file
// ...
$formToken = md5(time());
$_SESSION['uploadedFile'][$formToken] = $absFilePath;
然后,使用呈现令牌作为隐藏变量:
if (!empty($_SESSION['uploadedFile'][$formToken]))
echo '<input type="hidden" name="formToken" value="'.$formToken.'" />';
和隐藏使用
文件上载部 的
formToken
值的存在,你的表单提交的代码检查的内部
终于尝试使用isset($_POST['formToken'])
加载$_FILES['image']
,并用处理前:
$absFilePath = $_SESSION['uploadedFile'][$_POST['formToken']];
巴姆!现在你已经有了你的绝对文件路径,就好像文件已经像以前一样上传了。
既然你没有给出足够的代码,我只能给你足够的指令来让你开始,但这应该是绰绰有余。
尝试使用隐藏的输入,当用户已经上传了图像,如”/>'再次检查用户提交的文件,如果没有,然后检查隐藏的输入字段。如果它有价值意味着他已经上传了其他用户没有附加图像yet.Hope你会明白。 – 2014-11-06 20:07:37