使用输入类型文件AJAX / PHP

时间:2016-05-17 13:19:12

标签: php ajax

我的index.php中有这个html / php

if (isset($_POST['UploadMSub'])) {
    $fileP=$_FILES['Upload_f'];
    $fileP_name=$fileP['name'];
    $fileP_tmp=$fileP['tmp_name'];
    $fileP_size=$fileP['size'];
    $fileP_error=$fileP['error'];
    $fileP_extension=explode('.', $fileP_name);
    $fileP_extension=strtolower(end($fileP_extension));
    $allowed=array('jpg','png');
          if (in_array($fileP_extension, $allowed)) {
            if ($fileP_error===0) {
              if ($fileP_size<=2097152) {
                $fileP_new_name=uniqid().'.'.$fileP_extension;  
        }
      }
    }
    $_SESSION['fileP']=$fileP;
    $_SESSION['fileP_name']=$fileP_name;
    $_SESSION['fileP_tmp']=$fileP_tmp;
    $_SESSION['fileP_size']=$fileP_size;
    $_SESSION['fileP_error']=$fileP_error;
    $_SESSION['fileP_extension']=$fileP_extension;
    $_SESSION['fileP_new_name']=$fileP_new_name;
}

<form method="post" enctype="multipart/form-data" class='SubmUploadFu'>
                  <textarea maxlength="400" type="text" class='Text' placeholder="New post"></textarea>
                  <input type="file" name="Upload_f" style="display:none;" id="Nameupload">
                  <label for="Nameupload" class='LabelCamerUp'>
                    <img src="../img/camera.png" class='CamerUp'>
                  </label>
                  <input type="submit" class="UploadMSub">
   </form>

这个ajax

$(".UploadMSub").click(function() {
        var text=$(".Text").val();
        var file=$("#Nameupload").val();            
            $.ajax({
                type: "GET",
                url: '../connect.php',
                data: "Text=" + text+"&&file="+file,
                success: function(data)
                {
                        alert(data);
                }
            });
                return false;
    });

connect.php

    if (isset($_GET['Text'])) {
        $Text=htmlspecialchars($_GET['Text'],ENT_QUOTES);
        $file=htmlspecialchars($_GET['file'],ENT_QUOTES);
        echo $Text." ".$_SESSION['fileP_new_name'];
}

但是当我提交表格时,它会返回(提醒) &#34;取消定义索引&#39;&#39; fileP_new_name&#39;&#34; 有没有其他方法可以在我的connect.php中获取有关文件的所有信息?

1 个答案:

答案 0 :(得分:1)

问题是,

当您点击提交按钮时,表单不会被提交,这意味着当您点击提交按钮时,没有设置任何会话变量。相反,当您点击提交按钮时,jQuery脚本会立即运行,这就是您收到此错误的原因,

  

取消定义索引:fileP_new_name

从你的问题,

  

有没有其他方法可以在我的connect.php中获取有关文件的所有信息?

所以解决方案如下。您必须在代码中更改一些内容,例如:

  • name元素中添加<textarea>属性,如下所示:

    <textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
    
  • 不要从jQuery脚本返回false,而是使用preventDefault()方法阻止首先提交表单,如下所示:

    $(".UploadMSub").click(function(event){
        event.preventDefault();
    
        // your code
    });
    
  • 如果您是通过AJAX上传文件,请使用FormData对象。但请记住,旧浏览器不支持FormData对象。 FormData支持从以下桌面浏览器版本开始:IE 10 +,Firefox 4.0 +,Chrome 7 +,Safari 5 +,Opera 12 +。

  • 在AJAX请求中设置以下选项processData: falsecontentType: false。请参考the documentation了解这些操作。

所以你的代码应该是这样的:

<强> HTML:

<form method="post" enctype="multipart/form-data" class='SubmUploadFu'>
    <textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
    <input type="file" name="Upload_f" style="display:none;" id="Nameupload">
    <label for="Nameupload" class='LabelCamerUp'>
        <img src="../img/camera.png" class='CamerUp'>
    </label>
    <input type="submit" class="UploadMSub">
</form>

<强>的jQuery / AJAX:

$(".UploadMSub").click(function(event){
    event.preventDefault();
    var form_data = new FormData($('form')[0]);

    $.ajax({
        url: '../connect.php',
        type: 'post',
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        success: function(data){
            alert(data);
        }
    });
});

connect.php 上,处理您的表单数据:

<?php

    if(is_uploaded_file($_FILES['Upload_f']['tmp_name']) && isset($_POST['new_post'])){
        // both file and text input is submitted

        $new_post = $_POST['new_post'];

        $fileP=$_FILES['Upload_f'];
        $fileP_name=$fileP['name'];
        $fileP_tmp=$fileP['tmp_name'];
        $fileP_size=$fileP['size'];
        $fileP_error=$fileP['error'];
        $fileP_extension=explode('.', $fileP_name);
        $fileP_extension=strtolower(end($fileP_extension));
        $allowed=array('jpg','png');
        if (in_array($fileP_extension, $allowed)){
            if ($fileP_error===0) {
                if ($fileP_size<=2097152){
                    $fileP_new_name=uniqid().'.'.$fileP_extension;  
                }
            }
        }

        // your code
        //echo $fileP_new_name;

    }   

?>