2016-05-14 32 views
0

我已經提出了下面的post請求,這似乎工作正常。當我查看網絡中的開發人員工具時,一切似乎都奏效,我可以看到每個參數都已發佈。然而,當insert.php執行沒有被添加到數據庫,我沒有收到任何錯誤消息。我試圖將圖像保存到MySQL中的Blob中。發佈請求數據沒有被插入到mysql

POST請求

var description = $('#description').val(); 
var title = $('#title').val(); 

var fileInput = $("#image")[0]; 
var file = fileInput.files[0]; 
var dataResult = new FormData(); 
dataResult.append('image', file); 
dataResult.append('desc', description); 
dataResult.append('title', title); 
dataResult.append('longitude', currentMarker.lng()); 
dataResult.append('latitude', currentMarker.lat()); 

$.ajax({ 
    type: 'POST', 
    url: 'insert.php', 
    data: dataResult, 
    processData: false, 
    contentType: false, 
     success: function (answer) { 

     } 
    }) 

insert.php

include('config.php'); 

if (isset($_POST['title']) && isset($_POST['body']) && isset($_POST['longitude']) && isset($_POST['latitude'])){ 
    $title = $_POST['title']; 
    $body = $_POST['body']; 
    $longitude = (float)$_POST['longitude']; 
    $latitude = (float)$_POST['latitude']; 
    $file = file_get_contents($_FILES['image']['name']); 


    $strSQL = $db->query("INSERT INTO camps (title, body, longitude, latitude, image) VALUES ('$title', '$body', '$longitude','$latitude', '$file')"); 


} 

自卸

array(4) { 
    ["desc"]=> 
    string(6) "teeest" 
    ["title"]=> 
    string(11) "test" 
    ["longitude"]=> 
    string(18) "-74.17870044708252" 
    ["latitude"]=> 
    string(17) "40.73480350827126" 
} 
+0

也許你可以把你的'$ db-> query'放入一個try catch塊中,並捕獲Exception(如果有的話)。你是否已經檢查了Web服務器錯誤日誌和/或MySQL錯誤日誌?什麼是查詢的原始版本? – codedge

+0

'var_dump''$ _POST'來檢查您收到的內容。如果您使用的是Chrome,則可以使用Postman -rest客戶端進行ajax請求。 – dipesh

+0

在php開始標記之後,在開始處添加'error_reporting(E_ALL);'到您的'insert.php',然後重試並讓我們知道您是否有任何錯誤。 –

回答

0

有這裏有幾個問題:

  1. 沒有腳本的輸出,也沒有任何錯誤處理時,你得到的輸出回到answer變量,你不對它做任何事。您至少應該將其轉儲到控制檯以查看發生了什麼。
  2. 因爲有與body
  3. 的路徑文件的關鍵元素沒有不$_FILES['image']['name']$_FILES['image']['tmp_name']你將永遠不會進入你的if塊。
  4. 你有一個SQL注入問題。您應該使用帶有綁定變量的準備語句,而不是直接在查詢中注入變量。

可能還有更多,但是當您添加錯誤處理並使用腳本的輸出時,您至少能夠看到確切的錯誤。

除此之外,我建議您將文件作爲文件存儲在文件系統中,並將路徑添加到數據庫。

+0

所以我需要var_dump'$ strSQL'? –

+0

@PeterPik不僅如此,現在你不會輸入'if'條件,所以帶'$ _POST'轉儲的'else'也會有幫助。 – jeroen

+0

所以我用'var_dump($ _ POST);'添加了轉儲響應。這是否意味着該圖像沒有作爲post請求發送,或者我需要var_dump($ _ FILES);爲了這? –