doulu8537 2016-11-26 11:47
浏览 43

如何在单个表单字段中添加多个图像时通过AJAX传递下一页中的两个文件值

Here i have two form fields(file upload),first user select the logo and select one banner image means value is getting in next page (home.php).suppose user select one logo and select multiple banner image means i can not get the value in next page (home.php).how can do this ?

<script>
         var i=0;
         $(document).on("click",".add_banner",function() {
            i++;
           var htmlText = '';
           htmlText += '<div class="form-group"><label class="col-md-3 control-label">Project Banners</label><div class="col-md-6"><div class="fileupload fileupload-new" data-provides="fileupload"><div class="input-append"><div class="uneditable-input"><i class="fa fa-file fileupload-exists"></i><span class="fileupload-preview"></span></div><span class="btn btn-default btn-file"><span class="fileupload-exists">Change</span><span class="fileupload-new">Select file</span>';
            htmlText +='<input type="file" name="banners[]" id="banners' + i +'">';
            htmlText += '</span><span style="margin-left:10px"><button type="button" class="btn btn-default add_banner" id="add_banner">Add</button></span><a href="#" class="btn btn-default fileupload-exists" data-dismiss="fileupload">Remove</a></div></div></div></div>';
            $('#add_banner_append').append(htmlText);
         }); 
     
    </script> 
    
    <script>
  $(document).ready(function(){
            $('#btn-submit').click(function(){
                if($('#empForm').valid()){
                        var formData = new FormData();
                        var formData = new FormData($('#empForm')[0]);
                        formData.append('logo', $('input[type=file]')[0].files[0]);
                        formData.append('banners', $('input[type=file]')[1].files[1]);
                           $.ajax({
                             type:'POST',
                             url :"php/home.php",
                             data: formData,
                                cache: false,
                                contentType: false,
                                processData: false,
                                success: function(data) {
                                console.log(data);
                                 if(data == "Success"){
                                    $("#alert_success").show();
                                    $("#alert_success").fadeOut(3000);
                                    setTimeout(function () {
                                    window.location.href = "dashboard.php"; 
                                    }, 2000); //will call the function after 2 secs.
                                } 
                               },
                             error:function(exception){
                             alert('Exeption:'+exception);
                            }
                          });
                return false;
                }
            });
        });
        // Shorthand for $( document ).ready()

  </script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<form class="form-horizontal form-bordered" method="POST" id="empForm">
<div class="form-group">
        <label class="col-md-3 control-label">Project Logo</label>
        <div class="col-md-6">
            <div class="fileupload fileupload-new" data-provides="fileupload">
                <div class="input-append">
                    <div class="uneditable-input">
                        <i class="fa fa-file fileupload-exists"></i>
                        <span class="fileupload-preview"></span>
                    </div>
                    <span class="btn btn-default btn-file">
                        <span class="fileupload-exists">Change</span>
                        <span class="fileupload-new">Select file</span>
                        <input type="file" id="logo" name="logo" required="" data-msg-required="File" value="" aria-required="true">
                    </span>
                    
                </div>
            </div>
        </div>
    </div>
    
    <div class="form-group">
        <label class="col-md-3 control-label">Project Banners</label>
        <div class="col-md-6">
            <div class="fileupload fileupload-new" data-provides="fileupload">
                <div class="input-append">
                    <div class="uneditable-input">
                        <i class="fa fa-file fileupload-exists"></i>
                        <span class="fileupload-preview"></span>
                    </div>
                    <span class="btn btn-default btn-file">
                        <span class="fileupload-exists">Change</span>
                        <span class="fileupload-new">Select file</span>
                        <input type="file" id="banners" name="banners[]" required="" data-msg-required="File" value="" aria-required="true">
                    </span><span style="margin-left:10px">
                    <button type="button" class="btn btn-default add_banner" id="add_banner">Add</button></span>
                    
                </div>
            </div>
        </div>
    </div>
    
    <div id="add_banner_append"></div>
    
    <div class="form-group">
        <div class="col-md-3">
        </div>
            <div class="col-md-6">                                                
            <input type="button" class="btn btn-primary btn-block" id="btn-submit" name="submit" value="SUBMIT">
            </div>
    </div>
  </form


$postedBanners = array();
    /* foreach ($_FILES['banners']['name'] as $key => $value) {
        $postedBanners[$key] = array(
            'name' => $_FILES['banners']['name'][$key],
            'type' => $_FILES['banners']['type'][$key],
            'tmp_name' => $_FILES['banners']['tmp_name'][$key],
            'error' => $_FILES['banners']['error'][$key],
        );
    } */
    
    $uploads_dir = '/banners';
    foreach ($_FILES["banners"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["banners"]["tmp_name"][$key];
        // basename() may prevent filesystem traversal attacks;
        // further validation/sanitation of the filename may be appropriate
        $name = $_FILES["banners"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
        }
    }

</div>
  • 写回答

1条回答 默认 最新

  • duanmoen784988 2016-11-26 12:32
    关注

    You are missing enctype in both html form and ajax calling. You should add enctype in form like as <form class="form-horizontal form-bordered" method="post" id="empForm" enctype="multipart/form-data">.

    Aslo add enctype in ajax calling -

    $('#btn-submit').click(function(){
                    if($('#empForm').valid()){
                            var formData = new FormData();
                            var formData = new FormData($('#empForm')[0]);
                            formData.append('logo', $('input[type=file]')[0].files[0]);
                            formData.append('banners', $('input[type=file]')[1].files[1]);
                               $.ajax({
                                 type:'POST',
                                 url :"test.php",
                                 enctype: 'multipart/form-data',
                                 data: formData,
                                    cache: false,
                                    contentType: false,
                                    processData: false,
                                    success: function(data) {
                                    console.log(data);
                                     if(data == "Success"){
                                        $("#alert_success").show();
                                        $("#alert_success").fadeOut(3000);
                                        setTimeout(function () {
                                        window.location.href = "dashboard.php"; 
                                        }, 2000); //will call the function after 2 secs.
                                    } 
                                   },
                                 error:function(exception){
                                 alert('Exeption:'+exception);
                                }
                              });
                    return false;
                    }
                });
    

    I have added enctype: 'multipart/form-data' in ajax calling.

    At server end you need to get all multiple added banner image as following -

    if(!empty($_FILES['banners']['name'])){
        $postedBanners = array();
        foreach ($_FILES['banners']['name'] as $key => $value) {
            $postedBanners[$key] = array(
                'name' => $_FILES['banners']['name'][$key],
                'type' => $_FILES['banners']['type'][$key],
                'tmp_name' => $_FILES['banners']['tmp_name'][$key],
                'error' => $_FILES['banners']['error'][$key],
            );
        }
    
        echo '<pre>';
        print_r($postedBanners);
    }
    

    I will return output as following -

    Array
    (
        [0] => Array
            (
                [name] => preview.png
                [type] => image/png
                [tmp_name] => /private/var/tmp/php9Fyir9
                [error] => 0
            )
    
    )
    

    For Upload banner images in a folder.

    $uploads_dir = '/uploads';
    foreach ($_FILES["banners"]["error"] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES["banners"]["tmp_name"][$key];
            // basename() may prevent filesystem traversal attacks;
            // further validation/sanitation of the filename may be appropriate
            $name = basename($_FILES["banners"]["name"][$key]);
            move_uploaded_file($tmp_name, "$uploads_dir/$name");
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入