这是我的HTML标记:
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
<p><input type="file" name="file[]" id="file" /></p>
当我提交表单时,表单正在提交空文件。这是它发送的数组的print_r
:
Array
(
[name] => Array
(
[0] => thumb.jpg
[1] =>
[2] =>
[3] =>
[4] =>
)
[type] => Array
(
[0] => image/jpeg
[1] =>
[2] =>
[3] =>
[4] =>
)
[tmp_name] => Array
(
[0] => C:\xampp\tmp\phpEE16.tmp
[1] =>
[2] =>
[3] =>
[4] =>
)
[error] => Array
(
[0] => 0
[1] => 4
[2] => 4
[3] => 4
[4] => 4
)
[size] => Array
(
[0] => 5130
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)
)
有没有办法阻止发送所有这些空白文件?因为我有一种感觉,它会让我在剧本后面感到头痛。我以为我可以查看每个文件的错误代码(如果没有文件,则为4)然后从数组中取消设置,你怎么看?
答案 0 :(得分:1)
吻它。只需检查错误代码即可完成
没有一个简单的方法,因为用户(他们是愚蠢的,你知道)将尝试上传,有时只在最后一个位置,或者可能在第一和第三位置...你得到我的漂移。
B.T.W有许多现成的课程,可以为你处理。
答案 1 :(得分:0)
一种方法是只有一个文件上传输入和一个调用JavaScript函数的+
按钮,该函数会添加另一个(和另一个......)文件上传输入。
我不明白为什么额外的数组值会给你带来问题,只需使用如下的通用上传函数,你应该没问题:
function Upload($source, $destination)
{
$result = array();
if (array_key_exists($source, $_FILES) === true)
{
$destination = str_replace('\\', '/', realpath($destination));
if (is_array($_FILES[$source]['error']) === true)
{
foreach ($_FILES[$source]['error'] as $key => $value)
{
if ($value == UPLOAD_ERR_OK)
{
if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . basename($_FILES[$source]['name'][$key])) === true)
{
$result[] = $destination . basename($_FILES[$source]['name'][$key]);
}
}
}
}
else
{
if (move_uploaded_file($_FILES[$source]['tmp_name'], $destination . basename($_FILES[$source]['name'])) === true)
{
$result[] = $destination . basename($_FILES[$source]['name']);
}
}
}
return $result;
}
答案 2 :(得分:0)
也许您可以在提交表单之前检查字段值(input.value != ""
),如果为空则从DOM中删除它们。
或者,在服务器端,检查针对UPLOAD_ERR_NO_FILE
常量的错误代码。
答案 3 :(得分:0)
您可以从硬编码到html中的一个文件输入开始,然后允许用户单击调用javascript函数的按钮,为他们想要上传的每个附加文件添加额外的输入。这样就不应该有任何不必要的文件输入。类似地,您可以在提交表单时使用javascript测试空输入并将其删除。