【问题标题】:How to get JSON code into MYSQL database?如何将 JSON 代码导入 MYSQL 数据库?
【发布时间】:2012-03-30 10:55:04
【问题描述】:

我用 jQuery 自动完成功能创建了这个表单。从自动完成列表中选择的品牌需要使用 $.ajax 函数发送到 PHP 文件。我的代码似乎不起作用,但我找不到错误。我不知道为什么数据没有插入 MYSQL 数据库。这是我的代码:

JQUERY:

           $(document).ready(function() {

    $("#autocomplete").autocomplete({
        minLength: 2
    });

    $("#autocomplete").autocomplete({

        source: ["Adidas", "Airforce", "Alpha Industries", "Asics", "Bikkemberg", "Birkenstock", "Bjorn Borg", "Brunotti", "Calvin Klein", "Cars Jeans", "Chanel", "Chasin", "Diesel", "Dior", "DKNY", "Dolce &  Gabbana"]

    });

    $("#add-brand").click(function() {

        var merk = $("#autocomplete").val();

        $("#selected-brands").append(" <a class=\"deletemerk\" href=\"#\">" + merk + "</a>");

                //Add your parameters here        
                var param = JSON.stringify({
                    Brand: merk
                });

                $.ajax({
                    type: "POST",
                    async: true,
                    url: "scripttohandlejson.php",
                    contentType: "application/json",
                    data: param,
                    dataType: "json",
                    success: function (good){
                       //handle success

                       alert(good)
                    },
                    failure: function (bad){
                       //handle any errors

                       alert(bad)

                    }
                });


        return false;

    });

});

PHP 文件: scripttohandlejson.php

  <?PHP

     $getcontent = json_decode($json, true);

     $getcontent->{'Brand'};

     $vraag = "INSERT INTO kijken (merk) VALUES ('$data_s')";

     $voerin = mysql_query($vraag) or die("couldnt put into db");

  <?

【问题讨论】:

  • "$vraag ="INSERT INTO kijken (merk) VALUES ='$getcontent' ";" 你可能想读这个:en.wikipedia.org/wiki/SQL_injection 这个:xkcd.com/327
  • 为什么要以 JSON 格式发送所选项目?
  • 有人建议我,如果我想发送多个数据@once,我应该改用 JSON。
  • 在 php 脚本中,您使用 json_decode 函数将其转换为数组。在下一行中,您尝试访问类似对象。那可能是一个pblm。更好的是,打印每个语句中的值并尝试使用 firebug 跟踪它。如果您仍有澄清,请粘贴 ajax 响应并尝试通过设置 error_reporting(E_ALL); 进行调试然后是 ini_set(display_error,2);

标签: php jquery json


【解决方案1】:
$arr_content = json_decode($json, true);

$brand = $arr_content["Brand"];

$vraag = "INSERT INTO kijken (merk) VALUES ('" . $brand . "')";

编辑:

问题:在您的示例中,您的 json_decode 返回一个关联数组,因为您在函数调用中有参数“true”。但在下一行中,您试图通过访问“它的 'BRAND”属性来像对象一样使用结果。

您所要做的就是从 json_decode 函数调用中删除 true,或者使用我上面的代码。

注意:也编辑了 SQL 语句。

【讨论】:

  • 我已经尝试了这两种解决方案,但我的数据库中仍然出现空列
  • 您是否在 php 脚本中设置了 SQL 连接?
  • @the_boy_za:您现在的问题可能与数据库插入有关,而不是您收到的值。但是通过将echo $getcontent-&gt;{'Brand'};echo $brand; 放入您的php 脚本来检查该值,然后在Firefox->Tools->Web Developer->Firebug 中转到XHR 选项卡。然后运行您的应用程序并选择一个值,并在 Firebug 控制台中检查响应。
【解决方案2】:

json_decode 返回一个对象,而不是字符串,并且您正在尝试将其用作字符串,因此您可能正在数据库中插入类似“Object()”的内容。

也许你可以这样做 $data_s = mysql_escape_string($getcontent['Brand']);然后改用 $data_s 。

PHP 文件: scripttohandlejson.php

  <?PHP

     $getcontent = json_decode($json, true);

     $data_s = mysql_escape_string($getcontent['Brand']);

     $vraag ="INSERT INTO kijken (merk) VALUES ='$data_s' ";

     $voerin = mysql_query($vraag) or die("couldnt put into db");

  ?>

我还没有检查其他可能的错误(比如……如果这个 SQL 有效?)。

【讨论】:

  • 他在 json_decode() 中也有true...所以他没有尝试将其用作字符串...?
  • @Stefan Ooops... 是的,不是对象。但是是数组,所以还是不是他需要的字符串。
  • 是的,因为 $getcontent->{'Brand'} 不适用于关联数组,也不适用于您的代码。
  • @Tei 我更改了 mysql_query 部分代码确实无效。但是代码仍然无法正常工作。执行时,我的数据库中收到一个空列。
  • 好吧,首先打印您收到的内容。 var_export($getcontent)、var_export($data_s) 等等。找出您的数据丢失的位置。
【解决方案3】:

无需以 JSON 格式发送数据。

在 JS 中改变这个:

   //Add your parameters here        
   var param = JSON.stringify({
          Brand: merk
   });

到:

   var param ={Brand: merk};

在 php 中会收到:

 $brand= $_POST['Brand'];

【讨论】:

  • 我已经尝试过这个解决方案,但我的数据库中仍然出现空列。不知道是不是和utf-8有关系?
  • 是否有请求?可以在控制台中查看完整请求。尝试将帖子作为回复发回。 echo $_POST['Brand'] 并查看它是否在 ajax 中返回到页面。添加一些mysql错误处理,也可以用ajax发回
猜你喜欢
  • 2012-10-24
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 2016-10-12
  • 2022-01-05
  • 1970-01-01
  • 2011-01-30
相关资源
最近更新 更多