2015-01-19 3 views
2

это мое первое сообщение, так что если я пропустил что-нибудь, пожалуйста, будьте терпеливы :).Как сохранить объект модели json в базу данных php mysql

im, используя библиотеку go-debug.js от GoJS, чтобы сделать некоторые диаграммы в браузере, но im запускает проблему с возможностью сохранения. Эта диаграмма создает объект JavaScript, который вы можете преобразовать в Json и передать его в базу данных по этой команде 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:

GoJS does not require you to save models in any particular medium or format. But because this is JavaScript and JSON is the most popular data-interchange format, we do make it easy to write and read models as text in JSON format.

Just call Model.toJson to generate a string representing your model. Call the static method Model.fromJson to construct and initialize a model given a string produced by Model.toJson. Many of the samples demonstrate this -- search for JavaScript functions named "save" and "load". Most of those functions write and read a TextArea on the page itself, so that you can see and modify the JSON text and then load it to get a new diagram. But please be cautious when editing because JSON syntax is very strict, and any syntax errors will cause those "load" functions to fail.

JSON formatted text has strict limits on the kinds of data that you can represent without additional assumptions. To save and load any data properties that you set on your node data (or link data), they need to meet the following requirements:

the property is enumerable and its name does not start with an underscore (you can use property names that do start with an underscore, but they won't be saved) the property value is not undefined and is not a function (JSON cannot faithfully hold 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 will also handle instances of Point, Size, Rect, Spot, Margin, Geometry, and non-pattern Brushes. However we recommend that you store those objects in their string representations, using those classes' parse and stringify static functions.

Because you are using JavaScript, it is trivial for you to add data properties to your node data. This allows you to associate whatever information you need with each node. But if you need to associate some information with the model, which will be present even if there is no node data at all, you can add properties to the Model.modelData object. This object's properties will be written by Model.toJson and read by Model.fromJson, just as node data objects are written and read.

+0

Похоже, вы просто stingifying буквального значения '«modelJson»' а я полагаю, что вы хотели stringify значения модели из вашего приложения? – RobV

+0

Я не знаю, нужно ли его указывать на это, и если да, то передать его на php – Steven

+0

Если у вас есть дополнительные сведения, чтобы добавить свой вопрос, пожалуйста, используйте ссылку «edit» под своим вопросом, комментарии не являются хорошим форматом для добавление дополнительного кода – RobV

ответ

3

Вам не нужно json_decode это JSON, потому что это становясь Объектом.
Удалить эту часть:

$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)."');"; 
+0

ok, но как php знает, что это $ direction = $ _POST ['json']; происходит из сообщения ajax? – Steven

+0

Что значит? Это не так. Если безопасность вызывает беспокойство, возможно, вам придется добавить еще несколько переменных и т. Д. Это другая тема, я думаю, –

+0

ну, я изменил ее, но она все еще не работает. Как я могу увидеть ошибки? Это новый код php: '$ modelJson = $ _POST ['json']; $ modelJson = $ str_json; \t // $ pcs = $ _ POST ['modelJson']; \t $ SQL = "INSERT INTO c_map (ref_num, members_id, название, описание, ингредиенты) ЗНАЧЕНИЯ (NULL, '$ session_id', 'Название', 'описание', «" .mysql_real_escape_string ($ modelJson). "');"; mysqli_query ($ connection, $ sql); ' – Steven

Смежные вопросы