0

我正在使用多张图片上传社交网络应用程序。我将 a$_session['file_id']作为数组索引分配给每个上传的文件(文件 id 来自 db)。但我只希望用户每篇文章最多上传 4 张图片。所以我在计算images.length之前的上传,如果是== 4,则提醒用户他不能同时上传更多文件,否则会正常上传。出于安全目的,我有一个unset($_session['file_id'])用于确保 4 个文件不会因错误或用户更改 javascript(for每次上传时循环,以计数$_session['file_id']). 我遇到的问题是 js 本身不足以确保文件没有上传 4 次,我猜 ajax 上传留在队列中,并在第 4 个文件上传之前检查文件号。有没有其他方法可以直接在php上使用,记住我不能为普通用户取消设置文件(4个文件已经上传并等待发送按钮),但如果用户刷新或退出页面,我需要加上取消设置文件? 谢谢你的时间。

JavaScript

var checkfilecount = 0;
$('#file').change(function() {
    checkfilecount++;
    checkfile = $("#images).length;
    if (checkfile < 4 && checkfilecount < 4) {
        $("#filesend").submit();
    }
    else {
        setTimeout(function(){
            alert("Sorry, You can`t upload too many files at once")
        },3000)
    }
})  

在#postsend 上:

checkfilecount = 0;

PHP

if (isset($_SESSION['files_id'])) {
    $counting = 0; 
    foreach($_SESSION['files_id'] as $key => $val)
    {
        $counting++;
        if ($counting == 4) {
            unset($_SESSION['files_id']);       
            exit("error on session array"); 
        }   
    }   
}
4

1 回答 1

1

为 s 分配一个随机类名<input>,例如:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file[]" class="fileuploadCounter">
    <input type="file" name="file[]" class="fileuploadCounter">
    <input type="file" name="file[]" class="fileuploadCounter">
    <input type="file" name="file[]" class="fileuploadCounter">
</form>

在 init 之后,$('.fileuploadCounter').length()将返回该类的元素数量,在本例中为四个。请参阅jQuery 文档


下面的旧答案

<input>将标签上的名称更改为images[], 并计算$_POST['images']服务器端。

例如:

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file[]">
    <input type="file" name="file[]">
    <input type="file" name="file[]">
    <input type="file" name="file[]">
</form>

<?php
    if($_SERVER['REQUEST_METHOD'] == "POST"){
        if(isset($_FILES['file'])){

            // Because we added [] in the name tag and they match names, $_FILES['file'] is now an array containing the images. 

            if(count($_FILES['file']) > 4){

                // More than 4 files

            }
            else
            {

                // Less then four!

                foreach($_FILES['file'] as $file){
                    move_uploaded_file($file["file"]["tmp_name"], "uploads/" . $files["file"]["name"]);
                }
            }
        }
    }
?>
于 2013-09-26T16:30:20.983 回答