PHP无法从AJAX

时间:2016-05-13 02:06:04

标签: javascript php jquery ajax

我关注this post提到的上传文件的内容。稍有不同是我在表单上添加了一个文本输入字段。图像文件已成功上载到服务器,但似乎输入字段中的值未传递给PHP以进行数据库更新。触发了数据库函数并添加了数据库记录,但缺少表单中的值。

有人能指出我错过了什么吗?感谢。



$.validate({
  form: '#frmSlide',
  modules: 'file, html5',
  validateOnBlur: false,
  errorMessagePosition: 'top', // Instead of 'element' which is default
  scrollToTopOnError: false, // Set this property to true if you have a long form
  onSuccess: function($form) {
    var file_data = $('#a_imgfile').prop('files')[0];
    var form_data = new FormData();
    form_data.append('file', file_data);
    $.ajax({
      url: 'slide_upd.php', // point to server-side PHP script
      dataType: 'text', // what to expect back from the PHP script, if anything
      cache: false,
      contentType: false,
      processData: false,
      data: form_data,
      type: 'post',
      success: function(data) {
        alert(data);
      }
    });
  }
});

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" class="form-horizontal" id="frmSlide">
  <div class="form-group">
    <label class="col-sm-4 control-label" for="imgfile">Image file</label>
    <div class="col-sm-8">
      <input type="file" id="a_imgfile" data-validation="required mime size" data-validation-allowing="jpg, png, gif" data-validation-ratio="1:1" data-validation-max-size="1M" data-validation-error-msg="An image file is mandatory." />
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-8 col-md-offset-4" id="image-holder">
    </div>
  </div>
  <div class="form-group">
    <label class="col-sm-4 control-label" for="seq">Sequence</label>
    <div class="col-sm-8">
      <input class="form-control server" name="a_seq" id="a_seq" type="number" min="1" max="4" value="" placeholder="Enter display sequence of this slide" data-validation-error-msg="Only 1 to 4 is allowed." />
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-4 col-sm-8">
      <button name="btnUpd" id="btnUpd" type="submit" class="clsUpd btn btn-primary"><i class="fa fa-floppy-o"></i>&nbsp;Update</button>
    </div>
  </div>

</form>
&#13;
&#13;
&#13;

&#13;
&#13;
<?php
	$image_name = $_FILES['file']['name'];
	$image_size = $_FILES['file']['size'];
	$image_temp = $_FILES['file']['tmp_name'];
	
	move_uploaded_file($image_temp, 'img/'.$image_name);

	$seq = $_POST['a_seq'];
	addSlide($seq);
?>
&#13;
&#13;
&#13;
&#13;
&#13;
function addSlide($seq) {
	$seq = (int)$seq;
	mysql_query("INSERT INTO slide (seq, lastchgat) 
		VALUES ('$seq', now())")  or die(mysql_error());
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

  1. a_seq未附加到form_data。
  2. 添加var a_seq = $('#a_seq').val();
  3. form_data.append(&#39; a_seq&#39;,a_seq);
  4. 应该好好去

答案 1 :(得分:0)

我认为这会解决您的问题

$.validate({
  form: '#frmSlide',
  modules: 'file, html5',
  validateOnBlur: false,
  errorMessagePosition: 'top', // Instead of 'element' which is default
  scrollToTopOnError: false, // Set this property to true if you have a long form
  onSuccess: function($form) {
    //var file_data = $('#a_imgfile').prop('files')[0];
    //var form_data = new FormData();
    //form_data.append('file', file_data);
    //------ instead of three lines i just did this and works fine for me -------
    var formData=new FormData($('#frmSlide')[0]);
    $.ajax({
      url: 'slide_upd.php', // point to server-side PHP script
      cache: false,
      contentType: false,
      processData: false,
      data: formData,
      type: 'post',
      success: function(data) {
        alert(data);
      }
    });
  }
});