Php 将Backbone.js模型插入MySQL数据库

Php 将Backbone.js模型插入MySQL数据库,php,javascript,mysql,backbone.js,Php,Javascript,Mysql,Backbone.js,我有一个backbone.js模型,带有一些默认值和一个url: 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.sav

我有一个backbone.js模型,带有一些默认值和一个url:

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!";
并存储在数据库中:

mysql_query("INSERT INTO boxes(id, x, y, w, h)
            VALUES('', '$x', '$y', '$w', '$h') ") 
or die(mysql_error());
这样,将在表“框”中插入一行,其中包含主干模型框的每个属性的信息。 本例中的服务器请求方法是POST,表“box”中的id设置为自动递增。

您忘记发送id

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

使Id自动递增并从代码中删除:

$id=$_POST['cid']


主干网基于RESTAPI:当将模型保存/更新到服务器时,主干网将在请求正文中以JSON的形式通过
POST
our
PUT
请求将其序列化。从

在默认实现中,当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

为什么不将其保存为JSON到一个字段中?将是可扩展的。或者更好的方法是使用基于文档的数据库,如CouchDB或MongoDB,其中数据已经保存为JSON?你能看到对php文件的请求正在发出吗?你有任何回应吗?谢谢@nikoshr,但是我仍然无法将模型保存到数据库中。我至少尝试过使用将case转换为request_方法并将结果存储在变量中来查看服务器接收到的内容,但我没有看到任何内容,我只知道request方法是GET。您能否提供一个简单的代码,至少我可以在其中访问JSON发送的对象?谢谢。@rpabon
box.save()
发送一个
GET
请求?很奇怪。您可以使用
file\u get\u contents('php://input)
但这对
GET
不起作用。你能用Firebug或Chrome Inspector检查一下你的浏览器发送了什么(查询参数、发布参数、请求正文)?我现在所做的是使用我在问题上发布并添加的相同代码,这样我就可以在浏览器中看到请求方法和JSON,我不知道这是否会影响结果。@rpabon
header('Location:./save.php')
重定向请求,丢失请求类型和JSON,这就是为什么您有一个
GET
而没有其他内容。返回到以前的版本,用我的代码修改它,然后检查响应。这对于主干来说是无效的,但至少你会看到一些东西。
mysql_query("INSERT INTO boxes (x, y, w, h)
                         VALUES('$x', '$y', '$w', '$h')
                       ") or die(mysql_error());
$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();