2016-02-18 65 views
0

我有一個表單來上傳一個新的頭像,但我現在正嘗試使用AJAX在同一頁面上給用戶一個錯誤消息(如果有的話)。目前,AJAX沒有從單獨的文件中的PHP接收任何內容。我是否刪除了表單操作?將PHP返回到Ajax

AJAX:

$("#avatar_form").submit(function(){ 
     $.ajax({url: "photo_system.php", success: function(result){ 
      //Print the error message here 
      $("#status").html(result); 
     }}); 
    }); 

FORM:

$avatar_form =<div class="bhoechie-tab-content" id="uploadphoto">'; 
$avatar_form .= '<center>'; 
$avatar_form .= '<form id="avatar_form"" method="post" enctype="multipart/form-data">'; 
$avatar_form .= '<h1>Change avatar</h1>'; 
$avatar_form .= '<input type="file" name="avatar" required>'; 
$avatar_form .= '<p><input type="submit" value="Upload"></p>'; 
$avatar_form .= '<p id="status"></p>'; 
$avatar_form .= '</form>'; 
$avatar_form .= '</center></div>'; 

PHP:

<?php 
include_once("check_login_status.php"); 
if($user_ok != true || $log_username == "") { 
    exit(); 
} 
?><?php 
$result = ""; 
if (isset($_FILES["avatar"]["name"]) && $_FILES["avatar"]["tmp_name"] != ""){ 
    $fileName = $_FILES["avatar"]["name"]; 
    $fileTmpLoc = $_FILES["avatar"]["tmp_name"]; 
    $fileType = $_FILES["avatar"]["type"]; 
    $fileSize = $_FILES["avatar"]["size"]; 
    $fileErrorMsg = $_FILES["avatar"]["error"]; 
    $kaboom = explode(".", $fileName); 
    $fileExt = end($kaboom); 
    list($width, $height) = getimagesize($fileTmpLoc); 
    if($width < 10 || $height < 10){ 
     $result = "That image has no dimensions"; 
     echo $result; 
     exit(); 
    } 
    $db_file_name = rand(100000000000,999999999999).".".$fileExt; 
    if($fileSize > 1048576) { 
     $result = "Your image file was larger than 1mb"; 
     echo $result; 
     exit(); 
    } else if (!preg_match("/\.(gif|jpg|png)$/i", $fileName)) { 
     $result = "Please only JPG, GIF or PNG images"; 
     echo $result; 
     exit(); 
    } else if ($fileErrorMsg == 1) { 
     $result = "An unknown error occurred"; 
     echo $result; 
     exit(); 
    } 
    $sql = "SELECT profilePicture FROM User WHERE username='$log_username' LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    $row = mysqli_fetch_row($query); 
    $avatar = $row[0]; 

     //delete old pic if set 
    if($avatar != ""){ 
     $picurl = "users/$log_username/$avatar"; 
     if (file_exists($picurl)) { unlink($picurl); } 
    } 
     //move file from temp folder to users folder 
    $moveResult = move_uploaded_file($fileTmpLoc, "users/$log_username/$db_file_name"); 
    if ($moveResult != true) { 
     $result = "File upload failed"; 
     echo $result; 
     exit(); 
    } 
    include_once("image_resize.php"); 
     //replace original file with resized version 
    $target_file = "users/$log_username/$db_file_name"; 
    $resized_file = "users/$log_username/$db_file_name"; 
    $wmax = 400; 
    $hmax = 600; 
    img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt); 
    $sql = "UPDATE User SET profilePicture='$db_file_name' WHERE username='$log_username' LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    mysqli_close($db_conx); 
    //header("location: user.php?u=$log_username"); 
     $result = "upload_success"; 
     echo $result; 

    exit(); 
} 
?> 

只是爲了確認照片uploa d過程在添加AJAX之前做了工作,但現在它不上傳照片。那是因爲我已經刪除了表單操作

+0

點擊提交它訪問photo_system.php頁面? – AJAY

+0

你的「FORM代碼」中有一個語法錯誤:'''''''''''''''' –

+0

@AJAY我怎麼能做到這一點?通過var_dumping結果變量? – Joey93

回答

0

您需要使用event.preventDefault()停止表單提交,因爲文件是越來越粉刷,你必須設置contentTypeprocessDatafalse阿賈克斯上傳:你以後再

$("#avatar_form").submit(function(e){ 
    e.preventDefault(); //<-----add this 
    $.ajax({ 
     url   : "photo_system.php", 
     contentType : false, // <---------here 
     processData : false, // <---------and here 
     success  : function(result){ 
      $("#status").html(result); 
     } 
    }); 
});