7

いくつかのデフォルトと URL を持つ backbone.js モデルがあります。

var Box = Backbone.Model.extend({
    url: "./save.php",
    defaults: {
        x: 0,
        y: 0,
        w: 1,
        h: 1
    }
});

次に、このモデルのインスタンスがあり、保存に進みます。

var box = new Box({ x:10, y:10, w:200, h:200 });
box.save();

ここで、PHP スクリプト「save.php」を使用して、このモデルを MySQL データベースに保存します。次のようになります。

<?php 
    include('connection.php');

    $id = $_POST['cid'];
    $x = $_POST['x'];
    $y = $_POST['y'];
    $w = $_POST['w'];
    $h = $_POST['h'];

    mysql_query("INSERT INTO boxes (id, x, y, w, h)
                         VALUES('$id', '$x', '$y', '$w', '$h')
                       ") or die(mysql_error());
?>
echo "Data Inserted!";

多くのチュートリアルを読んでみましたが、この単純なモデルの保存を機能させることができません。コードが機能しないのはなぜですか? これをどのように解決できるかについてのアイデアはありますか?

ありがとう

編集:クイックソリューション

php スクリプトで、送信された JSON オブジェクトから情報を取得する正しい方法は次のとおりです。

$box_data = json_decode(file_get_contents('php://input'));
$x = $box_data->{'x'};
$y = $box_data->{'y'};
$w = $box_data->{'w'};
$h = $box_data->{'h'};

そしてデータベースに保存するには:

mysql_query("INSERT INTO boxes(id, x, y, w, h)
            VALUES('', '$x', '$y', '$w', '$h') ") 
or die(mysql_error());

このようにして、バックボーン モデル ボックスの各属性の情報を含む 1 つの行がテーブル「ボックス」に挿入されます。この場合のサーバー要求メソッドは POST で、テーブル「ボックス」の ID は自動インクリメントに設定されています。

4

2 に答える 2

18

Backbone は REST API に基づいています。モデルをサーバーに保存/更新するとき、Backbone はリクエスト本文で JSON としてシリアライズして送信しPOSTますPUTBackbone.sync のドキュメントから

デフォルトの実装では、Backbone.sync がモデルを保存するリクエストを送信すると、その属性が渡され、JSON としてシリアル化され、コンテンツ タイプが application/json の HTTP 本文で送信されます。

これは、サーバー側でする必要があることを意味します

  • リクエストのタイプを決定する
  • シリアル化された JSON をデコードする

このような何かがあなたを始めるべきです

$request_method = strtolower($_SERVER['REQUEST_METHOD']);
$data = null;

switch ($request_method) {
    case 'post':
    case 'put':
        $data = json_decode(file_get_contents('php://input'));
    break;
}

// print_r($data);

// note that mysql_* functions are deprecated
// http://php.net/manual/en/function.mysql-query.php
// inserting with a PDO object, assuming an auto incremented id
$sql = "INSERT INTO boxes (x, y, w, h) VALUES(?, ?, ?, ?)";
$sth = $dbh->prepare($sql);
$sth->execute(array(
    $data->x,
    $data->y,
    $data->w,
    $data->h
));
$id = $dbh->lastInsertId();

PHP での REST API のより完全な実装については、このページを確認してくださいhttp://www.gen-x-design.com/archives/create-a-rest-api-with-php/

于 2012-06-07T11:41:14.447 に答える
0

IDを送信するのを忘れました。

//$id = $_POST['cid'];

ここに画像の説明を入力

Id を AUTO_INCREMENT にして、コードから削除します。

$id = $_POST['cid'];

mysql_query("INSERT INTO boxes (x, y, w, h)
                         VALUES('$x', '$y', '$w', '$h')
                       ") or die(mysql_error());
于 2012-06-07T11:33:31.000 に答える