【问题标题】:Limit number of selected files限制所选文件的数量
【发布时间】:2011-09-28 07:14:02
【问题描述】:

我有一个脚本可以让用户在按住 CTRL 的同时选择多个图像,然后将它们上传到服务器。我需要限制选择的图片数量为 10,所以当用户提交表单时,如果超过 10 张图片会报错。

我该怎么做?

P.S:我有一个看起来像这样的 foreach 循环:

foreach ($_FILES['file']['tmp_name'] as $key => $tmp_name)

欢迎使用 PHP 解决方案。因为我不信任 javascript 和 jquery。

编辑:

这是我的脚本:http://pastebin.com/76NiNB6D

【问题讨论】:

  • 我看到的仅使用 PHP 的解决方案的问题是,如果他们选择了 11 个项目并且他们没有收到即时通知,它可能会惹恼用户,使用 JS(无论是否为 jQuery)你可以发出警报第二个第 11 个项目被选中,这意味着用户可以在提交无效项目集之前根据需要更改他们的选择,然后您可以放置​​一个 PHP 后备脚本来验证提交是否正确服务器端。真正的两全其美
  • 你说的有道理,我必须同意。 PHP 和 JavaScript(或 jQuery)都会让事情看起来更好。我是否需要提出另一个问题来寻求 JavaScript 解决方案,或者我可以使用这个问题来获得新的答案...?

标签: php html file select


【解决方案1】:

您的循环正在尝试遍历字符串。也许你的意思是:

$number_of_files = 0;
foreach ($_FILES as $file)
{
    if ($file['error'] == 0)
    {
        // file uploaded successfully
        $number_of_files++;
    }
}

if ($number_of_files > 10)
{
    die('You uploaded too many files!');
} else {
    foreach ($_FILES as $file)
    {
        if ($file['error'] == 0)
        {
             copy_the_file_to_destination(); // left as an excercise for the reader ;-)
        }
    }
}

您可以只使用count($_FILES);,但它会计算所有文件输入,即使是那些为空的。

【讨论】:

  • 你知道 count(!empty($_FILES)) 是否有效吗?如果是这样,那么这只会计算非空的文件输入
  • 不,它不起作用,因为empty 查找空数据并返回一个布尔值。 $_FILES 不会为空,因此它会返回 true(空是不够明智的,无法查看每个 $_FILES['*']['error'] 并检查它是否为 0。此外,您可以在非数组表达式上使用 count。跨度>
  • 美女,谢谢你,不确定这种用法,所以我想我会问而不是建议:-)
  • 当我在 file input 中使用了 multiple 属性时,您在上面向我展示的 foreach 循环不起作用。我花了很长时间来写我在问题中展示的foreach循环,在此之前我想了很多并尝试了很多其他方法(包括你的方法),除了我展示的那个之外,它们都没有奏效。
【解决方案2】:

我找到了我现在正在寻找的 PHP 答案! :D。我所做的如下:

我检查了 Carlos 的答案,并将一个值为 0 的变量放在循环之外。然后我像 Carlos 一样创建了错误检查:if ($file['error'] == 0) 然后我又做了 Carlos 在 IF 语句中所做的事情 $number_of_files++;

现在我跳出循环并这样做了:

if ($uploaded > 10)
{
    unlink($image);
    unlink($thumb);
    if ($resize) { unlink($res); }
 }

这会自动删除第 11 张图片,并在我的服务器中仅保留 10 张图片。

感谢卡洛斯提供的所有信息,我认为我将其结合得很好:P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多