Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用输入类型文件AJAX/PHP_Php_Ajax - Fatal编程技术网

使用输入类型文件AJAX/PHP

使用输入类型文件AJAX/PHP,php,ajax,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=exp

我在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>
connect.php

    if (isset($_GET['Text'])) {
        $Text=htmlspecialchars($_GET['Text'],ENT_QUOTES);
        $file=htmlspecialchars($_GET['file'],ENT_QUOTES);
        echo $Text." ".$_SESSION['fileP_new_name'];
}
但当我提交表单时,它会返回(警报) “取消定义索引”“文件名”“新名称”
有没有其他方法可以获取我的connect.php中文件的所有信息?

问题是

当您点击提交按钮时,表单不会被提交,这意味着当您点击提交按钮时,没有设置任何会话变量。相反,当您点击submit按钮时,jQuery脚本会立即运行,这就是为什么会出现此错误

取消定义索引:fileP\u new\u名称

从你的问题来看

是否有其他方法可以获取my connect.php中文件的所有信息

因此解决方案如下所示。您必须更改代码中的一些内容,例如:

  • 元素中添加
    名称
    属性,如下所示:

    <textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
    
    $(".UploadMSub").click(function(event){
        event.preventDefault();
    
        // your code
    });
    
    <?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;
    
        }   
    
    ?>
    
  • 如果您是通过AJAX上传文件,请使用object。但请记住,旧浏览器不支持FormData对象。FormData支持从以下桌面浏览器版本开始:IE 10+、Firefox 4.0+、Chrome 7+、Safari 5+、Opera 12+

  • 在AJAX请求中设置以下选项,
    processData:false
    contentType:false
    。请参考了解这些功能
因此,您的代码应该如下所示:

<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
$(".UploadMSub").click(function(event){
    event.preventDefault();

    // your code
});
<?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;

    }   

?>
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>
$(".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上,按如下方式处理表单数据:

<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
$(".UploadMSub").click(function(event){
    event.preventDefault();

    // your code
});
<?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;

    }   

?>


Fink您需要将fileP_new_name更改为fileP_name或正确定义fileP_new_name我上传输入在index.php not connect.php中,因此connect无法看到input@TomOdell你说连接看不到输入是什么意思?您是否使用这些代码片段测试了您的应用程序?@TomOdell是的,我知道Upload\u f input位于index.php页面中。在这里,您实际上是在提交表单,而没有使用AJAX重新加载页面。是的,但是您没有将任何内容从Upload\u f发送到connect.php,因此它无法知道$fileP=$\u文件['Upload\u f']@TomOdell请参见此语句
var form_data=new FormData($('form')[0]),这会将文件和文本数据发送到connect.php页面。你现在面临什么问题?