提交表单无刷新页面时,图像不能使用javascript发送

时间:2015-02-28 16:29:43

标签: javascript php html

我有一个使用发送文字和照片的JavaScript,我的问题是我的目录文件夹中没有发送照片,数据库中的空列照片。

如何解决这个问题?我很困惑:(

这是我的屏幕截图结果

enter image description here

的index.php

<script>
      $(function () {

        $('#fr_testi').on('submit', function (e) {

          e.preventDefault();

          $.ajax({
            type: 'post',
            url: 'testi.php',
            data: $('#fr_testi').serialize(),
            success: function () {
              document.getElementById("sc_testi").innerHTML = "Succes :)";
                $('#nama_testi').val("");
                $('#status_testi').val("");
                $('#foto_testi').val("");
                $('#komentar_testi').val("");
            }
          });

        });

      });
    </script>


<form  method="POST"  id="fr_testi" enctype="multipart/form-data">
                      <div class="control-group">
                        <label class="control-label">Nama</label>
                        <div class="controls">
                          <input name="nama" id="nama_testi" maxlength="100" type="text" required>
                          <input type="hidden" value="<?php echo $sk->kode?>" name="kode">
                        </div>
                      </div> 
                      <div class="control-group">
                        <label class="control-label">Status</label>
                        <div class="controls">
                          <input id="status_testi" name="status" maxlength="100" type="text" required>
                        </div>
                      </div>
                      <div class="control-group">
                        <label class="control-label">Foto</label>
                        <div class="controls">
                          <input name="foto" id="foto_testi" type="file" required>
                        </div>
                      </div>
                      <div class="control-group type2">
                        <label class="control-label">Komentar</label>
                        <div class="controls">
                          <textarea maxlength="250"  id="komentar_testi"  name="komentar" required></textarea>
                        </div>
                      </div>
                      <center>
                      <button type="submit" class="button button_type_2 button_grey_light">Send</button><br/><br/>
                      <font color="green" id="sc_testi"></font>
                      </center>
                    </form>

testi.php

<?php 
include "element/koneksi.php";

$nama       = $_POST['nama'];
$kode       = $_POST['kode'];
if ($nama!=NULL or $kode!=NULL) {
date_default_timezone_set("Asia/Jakarta");
$tglnya = date("Y-m-d");

$status     = $_POST['status'];
$komentar   = $_POST['komentar'];
$warna      = "#52B3D9";
$kon        = "NO";

$namafile_tmp = $_FILES['foto']['tmp_name'];        
if($namafile_tmp){
$namafile = $_FILES['foto']['name'];
$file   = $kode."_".$tglnya."_".$namafile;
copy($namafile_tmp, "images/sekolah/testimoni/{$file}");            
unlink($namafile_tmp);
}

 $query= "INSERT INTO sekolah_testimoni VALUES(id_testi,'$kode','$nama','$komentar','$status','$file','$warna',now(),'$kon','$kon')";
 mysql_query($query);

 }

 else 
    {
      echo "<script language='JavaScript'>window.history.back() </script>";
    }
?>

1 个答案:

答案 0 :(得分:1)

jquery方法序列化不包含输入文件类型。

如果您只想在DB上注册文件名,可以像下面这样使用JS而不是序列化。

    sendData = "";
    $.each($("#formulario input, #formulario select"), function () {
        if ($(this).prop("type") == "submit") return;        
        sendData += sendData!=""?"&":"";
        sendData += $(this).prop("name") + "=" + $(this).val()
    });

但是如果你想上传文件,保存在服务器上然后在数据库上注册位置,你应该直接从HTML发布或使用FormData javascript对象来执行这项任务。

    fileInputElement = document.getElementById("yourFileInputID");    

    var formData = new FormData(); 
    formData.append("userfile", fileInputElement.files[0]); 
    // if you need to upload multiple files you should loop through the fileInputElement.files array, appending one by one

    var request = new XMLHttpRequest();
    request.open("POST", "http://yourURL/");
    request.send(formData);

不幸的是,这种方法不适用于旧浏览器。要上传这些内容,您应该使用iframe解决方案(将表单发布到不可见的iframe而不离开页面)。