简体   繁体   English

表单提交以使用ajax上传文件以及其他字段

[英]Form submit to upload file and also other fields using ajax

I have tested every question here and have also googled alot, but did not find the something that work. 我已经在这里测试了每个问题,并在Google上进行了大量搜索,但是没有找到有效的方法。

Here is my HTML: 这是我的HTML:

<div id="createarea">
    <form id="createform" action="index/create/createcontrols.php" method="post" enctype="multipart/form-data">
      <input id="title" type="text" name="title" size="30" value="Title"><br><br>
      <input id="description" type="text" name="description" size="30" value="Description"><br><br>
      <input id="keywords" type="text" name="keywords" size="30" value="Keywords"><br><br>
      <input id="link" type="text" name="link" size="30" value="Link"><br><br>
      <input id="file" type="file" name="file"><br><br>
      <input id="submit" type="button" name='submit' value="Create" onclick="myFunction()">
    </form>
    <div id="createformresults">
    </div>
</div>  

And here is the javascript: 这是javascript:

function myFunction() {
  $(function () {
    $('#createform').on('submit', function (e) {
      $.ajax({
        type: 'post',
        url: 'index/create/createcontrols.php',
        data: $('#createform').serialize(),
        success: function () {
          document.getElementById('createarea').innerHTML = "SUCCESS";
        }
      });
      e.preventDefault();
    });
  });
}

MY PHP CODE: 我的PHP代码:

 <?php





$db=mysql_connect('','','') or die(mysql_error());
mysql_select_db("", $db) or die(mysql_error());




$title = $_POST["title"];
$description = $_POST["description"];
$keywords = $_POST["keywords"];
$link = $_POST["link"];
        $image=$_FILES["file"]["name"];


        $allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/pjpeg") || ($_FILES["file"]["type"] == "image/x-png") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts)) {

    if ($_FILES["file"]["error"] > 0) {

        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";

        }

        else {

                if (file_exists("temp/" . $_FILES["file"]["name"])) {
                echo $_FILES["file"]["name"] . " already exists. ";
                }

            else {
                move_uploaded_file($_FILES["file"]["tmp_name"], "temp/" . $_FILES["file"]["name"]);
            }
        }
}

else { 

    echo "Invalid file"; 

             }


            $qry="insert createcontent values('null','$title','$description','$keywords','$link','$image')";

            $res=  mysql_query($qry) or die(mysql_error());

            if(mysql_affected_rows()==1) {

                    echo "Success"; 

            }  

else {

    echo "Not Saved";                    

}



 ?> 

PHP code is working fine the issue is somewhere in js file. PHP代码运行正常,问题出在js文件中。

I would use FormData for this task. 我将FormData用于此任务。

Here is an example of your code using FormData : 这是使用FormData的代码示例:

$(function () { //On dom ready:

$("#createform").submit(function (e) { //will be triggered on submit:

     e.preventDefault();

     if( window.FormData !== undefined ) 
     //make sure that we can use FormData ie>9, chrome > 7, opera > 12 safari >5, android > 3  gecko mobile > 2, opera mobile >12 <- wil support XHR too
     {

         var formData = new FormData($('#createform')[0]); // use "[0]" <- important
    // you can append aditional values (regular text): formData.append("be","some value");
         $.ajax({
                 url: 'index/create/createcontrols.php',  //Server script to process data
                 type: 'POST',
                 data: formData,
                 xhr: function() {  },
                 success: function(response){ $("#createformresults").text("SUCCESS"); },
                 error: function (jqXHR, textStatus, errorThrown) { $("#createformresults").text(errorThrown); },
                 //Options to tell jQuery not to process data or worry about content-type.
                 cache: false,
                 contentType: false,
                 processData: false
          });
      } else {

          //Fallback

      }

      return false;
});

});

FormData will support multi file upload! FormData将支持多文件上传!

Add to your Form tag the attribute: enctype="multipart/form-data" 将属性添加到您的Form标记: enctype="multipart/form-data"

NOTE : You may find that the $_FILES array is empty on server side page - In this case you need to make sure your server configuration allows file uploads, size limit of file upload is enough, post time is enough etc.... 注意 :您可能会在服务器端页面上发现$_FILES数组为空-在这种情况下,您需要确保服务器配置允许文件上传,文件上传的大小限制足够,发布时间足够等。

The best way to begin is to make sure that file uploads is allowed and then testing with very small files to be sure everything in your code is OK. 最好的开始方法是确保允许上传文件,然后使用很小的文件进行测试以确保代码中的所有内容都可以。

Finally it is done!! 终于完成了!!

Add this source to x.html 将此源添加到x.html

//Program a custom submit function for the form
$("form#data").submit(function(event){

  //disable the default form submission
  event.preventDefault();

  //grab all form data  
  var formData = new FormData($(this)[0]);

  $.ajax({
    url: 'formprocessing.php',
    type: 'POST',
    data: formData,
    async: false,
    cache: false,
    contentType: false,
    processData: false,
    success: function (returndata) {
      alert(returndata);
    }
  });

  return false;
});
<form id="data">
  <input type="hidden" name="id" value="123" readonly="readonly">
  User Name: <input type="text" name="username" value=""><br />
  Profile Image: <input name="profileImg[]" type="file" /><br />
  Display Image: <input name="displayImg[]" type="file" /><br />
  <input type="submit" value="Submit">
</form>

And this to a PHP file (formprocessing.php): 并将其保存到一个PHP文件(formprocessing.php):

$id = $_POST['id'];
$username = $_POST['username'];
$profileImg = $_FILES['profileImg'];
$displayImg = $_FILES['displayImg'];

I did it with the help this link http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax 我在此链接http://digipiph.com/blog/submitting-multipartform-data-using-jquery-and-ajax的帮助下做到了

ajax doesn't support file uploading at all. ajax根本不支持文件上传。 However, there are work-arounds. 但是,有变通办法。 One of them is a jQuery plugin called Iframe Post Form, read more from: 其中之一是名为Iframe Post Form的jQuery插件,更多内容请参见:

http://plugins.jquery.com/iframe-post-form/ http://plugins.jquery.com/iframe-post-form/

$('form').iframePostForm({
      complete : function (response) {
           $('#createarea').text("SUCCESS");
    }
});

Apparently, you will have to specify the url action and enctype="multipart/form-data" in the form tag. 显然,您将必须在form标记中指定url操作和enctype="multipart/form-data"

Hope this helps! 希望这可以帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM