2016-05-14 68 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);为了这? –