首页 > 解决方案 > PHP $_POST 没有看到附加到 FormData 的数据

问题描述

好的,所以我有一个自定义的上传脚本,效果很好。我还有 2 个步骤需要完成才能完成,这超出了我的范围,我已经阅读并尝试了很多东西,但仍然没有得到我想要的结果。

同样,只有与我的问题相关的代码才会发布,因为代码可以完美运行,除了尝试从 AJAX 到 PHP 获取值外,不需要任何更改。

完整的 JS 文件如下:

jQuery(document).ready(function () {
            var img_zone = document.getElementById('img-zone'),     
            collect = {
                filereader: typeof FileReader != 'undefined',
                zone: 'draggable' in document.createElement('span'),
                formdata: !!window.FormData
            }, 
            acceptedTypes = {
                'image/png': true,
                'image/jpeg': true,
                'image/jpg': true,
                'image/gif': true
            };
            
            // Function to show messages
            function ajax_msg(status, msg) {
                var the_msg = '<div class="alert alert-'+ (status ? 'success' : 'danger') +'">';
                the_msg += '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>';
                the_msg += msg;
                the_msg += '</div>';
                $(the_msg).insertBefore(img_zone);
            }
            
            // Function to upload image through AJAX
            function ajax_upload(files) {                   
                $('.progress').removeClass('hidden');
                $('.progress-bar').css({ "width": "0%" });
                $('.progress-bar span').html('0% complete');    
            
              
                var productTestID = "333746240";
                var formData = new FormData(this);
                formData.append('productTestID',productTestID);
                //formData.append('any_var', 'any value');
                    for (var i = 0; i < files.length; i++) {
                    //formData.append('img_file_' + i, files[i]); 
                    formData.append('img_file[]', files[i]);
                }                       
        
                $.ajax({
                    url : "upload.php", // Change name according to your php script to handle uploading on server
                    type : 'post',
                    data : formData,
                    dataType : 'json',                      
                    processData: false,
                    contentType: false,
                    error : function(request){
                        ajax_msg(false, 'An error has occured while uploading photo.');                                 
                    },
                    success : function(json){
                        var img_preview = $('#img-preview');
                        var col = '.col-sm-2';
                        $('.progress').addClass('hidden');  
                        var photos = $('<div class="photos"></div>');
                        $(photos).html(json.img);                               
                        var lt = $(col, photos).length;
                        $('col', photos).hide();
                        $(img_preview).prepend(photos.html());
                        $(col + ':lt('+lt+')', img_preview).fadeIn(2000);                                                               
                        if(json.error != '') 
                            ajax_msg(false, json.error);
                    },
                    progress: function(e) {
                        if(e.lengthComputable) {
                            var pct = (e.loaded / e.total) * 100;
                            $('.progress-bar').css({ "width": pct + "%" }); 
                            $('.progress-bar span').html(pct + '% complete');                           
                        }
                        else {
                            console.warn('Content Length not reported!');
                        }
                    }
                });                 
            }
            
            // Call AJAX upload function on drag and drop event
            function dragHandle(element) {
                element.ondragover = function () { return false; };
                element.ondragend = function () { return false; };
                element.ondrop = function (e) { 
                    e.preventDefault();
                    ajax_upload(e.dataTransfer.files);
                }       
            }
            
            if (collect.zone) {         
                dragHandle(img_zone);
            } 
            else {
                alert("Drag & Drop isn't supported, use Open File Browser to upload photos.");          
            }
        
            // Call AJAX upload function on image selection using file browser button
            $(document).on('change', '.btn-file :file', function() {
                ajax_upload(this.files);            
            });
            
            // File upload progress event listener
            (function($, window, undefined) {
                var hasOnProgress = ("onprogress" in $.ajaxSettings.xhr());
            
                if (!hasOnProgress) {
                    return;
                }
                
                var oldXHR = $.ajaxSettings.xhr;
                $.ajaxSettings.xhr = function() {
                    var xhr = oldXHR();
                    if(xhr instanceof window.XMLHttpRequest) {
                        xhr.addEventListener('progress', this.progress, false);
                    }
                    
                    if(xhr.upload) {
                        xhr.upload.addEventListener('progress', this.progress, false);
                    }
                    
                    return xhr;
                };
            })(jQuery, window); 
        });

所以上面的代码来自 .js 文件。该脚本上传多个选定的文件,效果很好。根据我的阅读,为了将附加值发送到 PHP,您必须使用.append(),这就是我在下面所做的。我创建了var productTestID并给了它一个值,然后formData使用append().

我的问题是如何在 PHP 中阅读它?

我试过$_POST[productTestID]了,根本没有结果。我什至试着做一个isset(),它回来没有设置。

那么我需要在我的 PHP 代码中做什么来读取或提取该值?下面是我文件的摘录upload.php,就像我说的文件上传工作,这就是他们被访问的方式。

if($_SERVER['REQUEST_METHOD'] == "POST")
{
$error = '';
$img = '';

$dir = dirname($_SERVER['SCRIPT_FILENAME'])."/". DIR_WS_IMAGES . "upload/";
$extensions = array("jpeg","jpg","png");
foreach($_FILES['img_file']['tmp_name'] as $key => $tmp_name )

在我的 upload.php 文件中进一步向下:

//MOVE TO FINAL LOCATION
          $uploaded_file = $dir.$file_name;
          if (rename($uploaded_file, $uniqueFileName))
          {
            $productTestID = $_POST['productTestID'];
          }
          
            
            $img .= '<div class="col-sm-2"><div class="thumbnail">';
            $img .= '<img src="'.$dir.$file_name.'" />'.$uploaded_file . '<br>' .$fileName.'<br>'.$uniqueFileName.'<br>This Product Id is:';
            $img .= $productTestID;
            $img .= '</div></div>';     
        }

谢谢你,肖恩穆里根

标签: phpjqueryajaxform-data

解决方案


推荐阅读