繁体   English   中英

how to save json model object to php mysql database

[英]how to save json model object to php mysql database

这是我的第一篇文章,所以如果我遗漏了什么,请耐心等待:)。

我使用来自GoJS的 go-debug.js 库在浏览器上制作一些图表,但我运行保存选项的问题。 This diagram produce a JavaScript object which you can converted to Json and pass it to the Database by this command myDiagram.model.toJson() . 当我按下保存按钮时,我想使用Ajax方法将图表保存到PhP ,然后保存到mySQL数据库中。

谢谢您的帮助!

这是我的保存脚本,但我不知道为什么它不起作用。

  window.onload = function(){


jQuery(document).ready(function(){
    $.ajax({
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    url: 'savemodel.php',
    data: {json: JSON.stringify(modelJson)},
    dataType: 'json'
})

.done( function( data ) {
    console.log('done');
    console.log(data);
})
.fail( function( data ) {
    console.log('fail');
    console.log(data);
})
});

    //return modelJson;



  }
  function load() {
    myDiagram.model = go.Model.fromJson(document.getElementById("mySavedModel").value);
    // loadDiagramProperties gets called later, upon the "InitialLayoutCompleted" DiagramEvent
  }


  function loadDiagramProperties(e) {
    var pos = myDiagram.model.modelData.position;
    if (pos) myDiagram.position = go.Point.parse(pos);
  }



  }

我的 php 代码是:

      <?php 

header('Content-Type: application/json');
include 'config.php';
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);

$session_id=$_SESSION['sess_user_id']; // User session id

$modelJson = $_POST['json'];




$sql = "INSERT INTO c_map 
       (ref_num, members_id, title, description, ingredients) 
        VALUES (NULL, '$session_id', 'title', 'description',
        '".mysql_real_escape_string($modelJson)."');";


mysqli_query($connection, $sql);





?>

例如。 命令 myDiagram.model.toJson() 的产生; 这是一个有 2 个孩子的树形图,如下所示:

{ "class": "go.GraphLinksModel",
  "modelData": {"position":"-545.114064532096 -44.69966023522102"},
  "nodeDataArray": [ 
{"key":"Alpha"},
{"key":"N"},
{"key":"N2"}
 ],
  "linkDataArray": [ 
{"from":"Alpha", "to":"N"},
{"from":"Alpha", "to":"N2"}
 ]}

我从 GoJs 站点引用 model 保存文档:

GoJS 不要求您以任何特定的介质或格式保存模型。 但是因为这是 JavaScript 和 JSON 是最流行的数据交换格式,所以我们确实可以轻松地将模型作为 JSON 格式的文本写入和读取。

只需调用 Model.toJson 即可生成代表您的 model 的字符串。 Call the static method Model.fromJson to construct and initialize a model given a string produced by Model.toJson. 许多示例都证明了这一点——搜索名为“save”和“load”的 JavaScript 函数。 大多数这些函数在页面本身上写入和读取 TextArea,以便您可以查看和修改 JSON 文本,然后加载它以获得新图表。 但编辑时请小心,因为 JSON 语法非常严格,任何语法错误都会导致那些“加载”功能失败。

JSON 格式的文本对您可以在没有额外假设的情况下表示的数据类型有严格的限制。 要保存和加载您在节点数据(或链接数据)上设置的任何数据属性,它们需要满足以下要求:

该属性是可枚举的,并且它的名称不以下划线开头(您可以使用以下划线开头的属性名称,但它们不会被保存)该属性值不是未定义的并且不是 function(JSON 不能忠实地保存functions) the model knows how to convert the property value to JSON format (numbers, strings, JavaScript Arrays, or plain JavaScript Objects) property values that are Objects or Arrays form a tree structure -- no shared or cyclical references Model.toJson and Model .fromJson 还将处理 Point、Size、Rect、Spot、Margin、Geometry 和非图案画笔的实例。 但是,我们建议您使用这些类的 parse 和 stringify static 函数将这些对象存储在它们的字符串表示中。

因为您使用的是 JavaScript,所以将数据属性添加到节点数据是微不足道的。 这允许您将所需的任何信息与每个节点相关联。 但是如果您需要将一些信息与 model 相关联,即使根本没有节点数据也会出现,您可以在 Model.modelData object 中添加属性。 该对象的属性将由 Model.toJson 写入并由 Model.fromJson 读取,就像写入和读取节点数据对象一样。

您不需要对该JSON进行json_decode ,因为它已成为对象。
删除此部分:

$directions = json_decode($_POST['json']);
var_dump(directions); // here's an error btw

并将其更改为:

$directions = $_POST['json'];

然后只需将其保存为文本模式即可。
别忘了逃脱它:

$sql = "INSERT INTO c_map 
       (ref_num, members_id, title, description, ingredients) 
        VALUES (NULL, '$session_id', 'title', 'description',
        '".mysql_real_escape_string($directions)."');";

当我使用表单中的 post 方法保存从输入(隐藏)标签传输的 JSON 字符串时,以下代码适用于我。

$data = $_REQUEST['data'];  // Get the data
// open connection
$conn = mysqli_connect("localhost","my_user","my_password","my_db");  
// Convert all characters to the correct saving string
// Important! the connection should be open!
$mdata = **mysqli_real_escape_string**($conn, $data);
// The SQL query requires a '...' when using a string
$query = "INSERT INTO mytable (info) VALUES ('$data')";
$result = $conn->query($query);

此过程将向您的存储字段添加一些字符。 好消息是当你阅读它(使用选择)时,一切都会很好,不需要做任何事情。

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM