php - 使用 MySQL 和 Backbone JS 检索数据

标签 php mysql backbone.js

我希望你能帮助我。我正在尝试使用 mysql 和 backbone 从我的数据库中获取数据。 问题是我可以创建一个“用户”,我可以获得所有这些用户。但是当我尝试制作时:

var user = new User({id: 10});

无论给定 id,我总是有这种类型的结果:

Object {id: "10", nom: "", age: "", prenom: ""}

但是我从我的服务器得到了响应:

[{"id":"10","nom":"test","prenom":"test","age":"12"}]

因此,执行 GET 请求,并返回未保存在 « user » 变量中的内容。

更多解释,这是我的脚本

// The model
var User = Backbone.Model.extend({
    defaults: {
        id:"",
        nom:"",
        age:"",
        prenom:""
    },

    url: function(){
    if (this.isNew()){
      return "./users.php";
    } else {
      return "./users.php?id=" + this.id;
    }
  }
});

// The collection
var Users = Backbone.Collection.extend({
    models:"user",
    url:"./users.php"
});

// The view
var EditUser = Backbone.View.extend({
    el: ".page",
    render: function(options) {
        var that = this
        if (options.id) {
            var user = new User({id: options.id});
            console.log(user.toJSON());
            user.fetch({
                success: function(user){
                    var template = _.template($('#edit-user-template').html(), {user: user});                   
                    that.$el.html(template);
                }
            })
        } else {
            var template = _.template($('#edit-user-template').html(), {user:null});
            this.$el.html(template);
        }

    },
    events: {
        'submit .edit-user-form' : 'saveUser',
    },

    saveUser: function(ev){
        data = $(ev.currentTarget).serializeObject();
        var user = new User();
        user.save(data, {
            success: function(user) {
                router.navigate('', {trigger:true})
            }
        });
        return false;
    }
});

还有我的 users.php

<?php 

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


    switch($_SERVER['REQUEST_METHOD']){
        case 'POST':
        save();
        break;
        case 'GET':
        fetch();
        break;
        case 'PUT':
        save();
        break;
        case 'DELETE':
                    // delete item
        destroy();
        break;
    }


    function fetch() {
        $pdo=new PDO("mysql:dbname=nomade;host=localhost","","");
        $sql = "SELECT * FROM users";
        if (isset($_GET['id'])) $sql .= " WHERE id =".$_GET['id'];
        $statement=$pdo->prepare($sql);
        $statement->execute();
        $results=$statement->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($results);
    }


    function save() {
        $pdo=new PDO("mysql:dbname=nomade;host=localhost","","");
        $data = json_decode(file_get_contents('php://input'));
        $nom = $data->{'nom'};
        $prenom = $data->{'prenom'};
        $age = $data->{'age'};
        $statement=$pdo->prepare("INSERT INTO users (prenom, nom, age) VALUES ('".$nom."','".$prenom."',$age)");
        $statement->execute();
        $results=$statement->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($results);
    }
?>

编辑 当我做一个

var user = new User({id: options.id});
        user.fetch({
            success: function(user){
                console.log(user.attributes[0]);
                // var template = _.template($('#edit-user-template').html(), {});
                // that.$el.html(template);
            }
        });

我明白了:

 Object {id: "5", nom: "dsfsdfqds", prenom: "qsdfqsdf", age: "12"}

为什么?

最佳答案

我终于做到了。

如果你做一个

$results=$statement->fetchAll(PDO::FETCH_ASSOC); 

您将获得一个模型属性,其中包含一个对象,其中包含您需要的内容。你可以像这样解析它:

这是我的观点:

var EditUser = Backbone.View.extend({
    el: ".page",
    render: function(options) {
        var that = this
        if (options.id) {
            var user = new User({id: options.id});
            user.fetch({
                success: function(user){
                    var template = _.template($('#edit-user-template').html(), {user: user.attributes['0']});
                    that.$el.html(template);
                }
            });
        } else {
            var template = _.template($('#edit-user-template').html(), {user:null});
            this.$el.html(template);
        }

    },
    events: {
        'submit .edit-user-form' : 'saveUser',
    },

    saveUser: function(ev){
        data = $(ev.currentTarget).serializeObject();
        var user = new User();
        user.save(data, {
            success: function(user) {
                router.navigate('', {trigger:true})
            }
        });
        return false;
    }
});

和关联的模板:

<script type="text/template" id="edit-user-template">
<form  class="edit-user-form">
<legend><%= user ? "Créer" : "Mettre à jour" %> un user</legend>
<label>Prenom</label>
<input type="text" name="prenom" value="<%= user ? user['prenom'] : '' %>" placeholder="">

<label>Nom</label>
<input type="text" name="nom" value="<%= user ? user['nom'] : '' %>" placeholder="">

<label>Age</label>
<input type="text" name="age" value="<%= user ? user['age'] : '' %>" placeholder="">

<hr>
<input type="submit" name="submit" value="Envoyer" placeholder="" class="btn">

</form>
</script>

但是如果你让

$results=$statement->fetchObject();

它将返回用户。谢谢@WiredPrairie,我太傻了,更改了我的 « save » 功能而不是 « fetch » 功能。

关于php - 使用 MySQL 和 Backbone JS 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15820807/

相关文章:

php - Laravel 一对多关系不起作用 - 返回递归

php - SQLSTATE[01002] 仅在 PHP 上的 Adaptive Server 连接失败,我可以通过 CLI 连接

php - JSON 数据到 UL

mySQL 查询选择/连接未按预期工作

php - 尝试执行 CREATE 语句时出现 "Incorrect database name"错误

php - MySQL 连接时用户名和密码错误

php - 测试参数是否存在于函数中

backbone.js - 带有 mustache 模板的 Backbonejs。

javascript - Handlebars 有时不会在每个助手中打印 {{this}}

backbone.js - Kendo UI与 Backbone js