使用jquery ajax模式窗体上传文件并保存文件名失败

时间:2017-09-27 02:56:56

标签: php mysql ajax jquery-ui file-upload

我尝试上传文件然后将文件名保存到mysql,方法与upload & save file to mysql相同。 但我的问题仍然存在。错误消息为uploadedfile is undefined

HTML:

<form id="flowlist">
   <div class="form-group">
     <label for="idcar" class="control-label">ID CAR</label>
     <input type="text" name="idcar" id="idcar" class="text_field form-control" required>
  </div>
   <div class="form-group">
      <label for="upload">Upload Minute Of Meeting</label>
      <input type="hidden" name="MAX_FILE_SIZE" value="20000000">
      <input id="upload" name="uploadedfile" type="file">
      <input type="hidden" id="filenm" name="filenm" required>
      <input type="hidden" name="action" value="updateflow">
   </div>
</form>

JS Script(cms.js):

dialog = $( "#flow" ).dialog({
         buttons: {
            "Update Data":function() {
                  var params=$('#flowlist').serialize();
                  $.ajax({
                     type:"post",
                     url:"doserver.php",
                     data:params,
                     cache :false,
                     async :false,
                     success : function() {
                        $('input').val("");
                        $('textarea').val("");
                        table.row('.selected').draw(false);
                        location.reload();
                        return this;
                     },
                     error : function() {
                        alert("Data failed to input.");
                     }

PHP代码(doserver.php):

case 'updateflow':
   /* catch variable parameter */
   $idcar = mysqli_real_escape_string($dbc,$_POST['idcar']);
   $file= mysqli_real_escape_string($dbc,$_POST['filenm']);

   $target_path = "mom/";
   $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
   if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
   {
      echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
      /* UPDATE */
      $sql ="UPDATE monitor SET Mom = '".$file."'";
      $sql.=" WHERE id_car LIKE '".$idcar."'";
      $res =mysqli_query($dbc,$sql) or die(_ERROR30.":".mysqli_error($dbc));
   }
      else { echo "There was an error uploading the file, please try again!"; }
break;

修改

添加enctype="multipart/form-data"

<form id="flowlist" enctype="multipart/form-data">
</form>

然后对ajax函数进行一些更改:

"Update Data":function() {
   var formData = new FormData(this);
   $.ajax({
      type:"post",
      url:"doserver.php",
      processData:false,
      contentType:false,
      data:formData,
   ....
});

我没有错误,但idcar未更新且文件未上传。

1 个答案:

答案 0 :(得分:0)

如果您使用$('#flowlist')[0]代替this更好地使用jquery。我用以下方法解决了这个问题:

"Update Data":function() {
   if(window.FormData !== undefined)
   {
      var formData = new FormData($('#flowlist')[0]);
      $.ajax({
         type:"post",
         url:"doserver.php",
         processData:false,
         contentType:false,
         mimeType:"multipart/form-data",
         data:formData,
         ...
      });
   }
}