表单不发布数据

时间:2014-12-28 08:28:30

标签: php jquery ajax dropzone.js

我有以下HTML代码:

<form class="dropzone" id="msform" enctype="multipart/form-data">                                   <!-- multistep form -->


    <!-- progressbar -->
    <ul id="progressbar">
        <li class="active">Account Setup</li>
        <li>Post an Image</li>
    </ul>
    <!-- fieldsets -->
    <fieldset>
        <h2 class="fs-title">Fill in Some General Details</h2>
        <h3 class="fs-subtitle">As Simple As This</h3>
        <input type="text" name="update" id="title" placeholder="Update Title" />
        <textarea name="description" id="description" placeholder="Short Description/Add On"></textarea>    
         <input type="date" name="expire" id="expire" placeholder="Expire By" value="Expire By" />
        <input type="button" name="next" class="next action-button" value="Next" />

    </fieldset>
    <fieldset>
        <h2 class="fs-title">Upload Image</h2>
        <h3 class="fs-subtitle">We currently only support images.</h3>
        <div class="dropzone-previews dz-message" id="dropzonePreview">

        </div>

        <input type="button" name="previous" class="previous action-button" value="Previous" />
        <input type="submit"  name="submit" class="submit action-button" value="Submit"/>
    </fieldset>

</form>
</div>
</div>

<script>
    Dropzone.options.msform = { // The camelized version of the ID of the form element

  // The configuration we've talked about above
  url: "filepostupload.php",
  autoProcessQueue: false,
  autoDiscover: false,
  addRemoveLinks: true,
  uploadMultiple: false,
  parallelUploads: 5,
  maxFiles: 5,
  paramName: "file",
   previewsContainer: '.dropzone-previews',
   clickable:'#dropzonePreview', //used for specifying the previews div
   //used this but now i cannot click on previews div to showup the file select dialog box


  // The setting up of the dropzone
  init: function() {
    var myDropzone = this;
     this.element.querySelector("input[type=submit]").addEventListener("click", function(e) {
      // Make sure that the form isn't actually being sent.
      e.preventDefault();
      e.stopPropagation();
       if (myDropzone.getQueuedFiles().length === 0) {
           var update =  $('#title').val(); 
        var description =  $('#description').val(); 
        var expiry =  $('#expire').val();
        var groupid =  <?php echo $groupid ?>;
     var request = $.ajax({
                        url: "updatesnofile.php",
                        type: "POST",
                        data: { update:update, description:description, expiry:expiry, groupid:groupid},
                        dataType:"text",

                   success: function(data) { 
                   if (data=="success") {
                    alert('success');


                   } else  {

                    alert(data);

                   }  
                   },
                   error: function(request, err){ 


                  alert(err);



                   }
                 });    
       }else {
      myDropzone.processQueue();

       }
    });



    // Listen to the sendingmultiple event. In this case, it's the sendingmultiple event instead
    // of the sending event because uploadMultiple is set to true.
    this.on("sending", function() {
      // Gets triggered when the form is actually being sent.
      // Hide the success button or the complete form.
    });
    this.on("success", function(files, response) {
      // Gets triggered when the files have successfully been sent.
      // Redirect user or notify of success.
      alert(response);
    });
    this.on("error", function(files, response) {
     alert("error");
    });
  }

}
    </script>

我执行文件上传的php脚本是:

<?php  
session_start();
 require 'config.php';
 //I'm using mysql_ as an example, it should be PDO

$ds = DIRECTORY_SEPARATOR;
$foldername = "updatefiles/";
if (isset($_POST['update']) && isset($_POST['description']) && isset($_POST['expiry']) && isset($_POST['groupid'])){
    $title= mysqli_real_escape_string($mysqli,trim($_POST['update']));
    $description= mysqli_real_escape_string($mysqli,trim($_POST['description']));
    $expire= mysqli_real_escape_string($mysqli,trim($_POST['expiry']));
    $groupid= mysqli_real_escape_string($mysqli,trim($_POST['groupid']));

    $fileupload = basename($_FILES['file']['name']);
    $fileType = $_FILES['file']['type'];
    $fileSize = $_FILES['file']['size'];

    $tempFile = $_FILES['file']['tmp_name'];
    $targetPath = dirname( __FILE__ ) . $ds. $foldername . $ds;
    $targetFile =  $targetPath. $fileupload;
    move_uploaded_file($tempFile,$targetFile);

    $fileupload = mysqli_real_escape_string($mysqli,basename($_FILES['file']['name']));
    $fileType = mysqli_real_escape_string($mysqli,$_FILES['file']['type']);
    $fileSize = mysqli_real_escape_string($mysqli,$_FILES['file']['size']);
    mysqli_query($mysqli,"START TRANSACTION;");
  $ins = mysqli_query($mysqli,"INSERT INTO posts (category, description, posttitle, userid, expire, group_id) VALUES ('updates','".$description."', '".$title."','{$_SESSION['userid']}', '".$expire."','".$groupid."' )");
  if (!$ins) {
    // fail
    mysqli_query($mysqli,"ROLLBACK");
    echo"error with first insert";
    return FALSE;

  }

  $upd = mysqli_query($mysqli,"SET @post_id_in_posts = LAST_INSERT_ID()");
  if (!$upd) {
    // fail
    mysqli_query($mysqli,"ROLLBACK");
    echo"error with setting postid";
    return FALSE;
  }

  $del = mysqli_query($mysqli, "INSERT INTO files (post_id,f_name, f_type, f_size) VALUES (@post_id_in_posts,'".$fileupload."', '".$fileType."', '".$fileSize."')");
  if (!$del) {
    // fail
    mysqli_query($mysqli,"ROLLBACK"); 
    echo "Error with Second Insert!";
    return FALSE;
  }

  // All succeeded
  mysqli_query($mysqli,"COMMIT"); 
  echo"success";
    return TRUE;

}else {
echo"formwasnotsubmitted";  


}

?>

然而,它一直告诉我表单没有提交(这意味着删除表单的表单发布失败,因此当有文件时数据不会发布,ajax在那里工作时有效是没有文件),谁能找到原因?谢谢!

我设法找到了错误,这与Dropzone发送表单数据的方式有关!

0 个答案:

没有答案