Insérer le modèle Backbone.js dans la base de données MySQL

J'ai un modèle backbone.js avec quelques valeurs par défaut et une URL:

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

Ensuite, j'ai une instance de ce modèle et je le sauvegarde:

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

Maintenant, je veux enregistrer ce modèle dans une base de données MySQL en utilisant un script PHP "save.php", ça va comme ceci:

 <?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!"; 

J'ai essayé de lire de nombreux tutoriels, mais je ne peux pas obtenir ce modèle simple, sauf pour travailler. Pourquoi mon code ne fonctionne pas? Des idées sur la façon dont cela peut être résolu?

Merci

EDIT: QUICK SOLUTION

Dans le script php, la bonne façon d'obtenir l'information de l'objet JSON envoyé est la suivante:

 $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'}; 

Et à stocker dans la base de données:

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

De cette façon, une ligne sera insérée dans la table «cases» avec l'information de chacun des attributs de la boîte modèle de l'arrière-plan. Le mode de demande du serveur dans ce cas est POST et l'identifiant dans la table "cases" est configuré pour augmenter automatiquement.

Backbone est basé sur une API REST: lors de la sauvegarde / mise à jour d'un modèle sur le serveur, Backbone enverra la sérialisation en tant que JSON dans le corps de requête avec POST notre demande PUT . De la documentation Backbone.sync

Avec l'implémentation par défaut, lorsque Backbone.sync envoie une demande pour enregistrer un modèle, ses attributs seront transmis, sérialisés comme JSON et envoyés dans le corps HTTP avec application / json de type contenu.

Cela signifie que le serveur vous devez

  • Déterminer le type de demande
  • Décoder le JSON sérialisé

Quelque chose comme ça devrait vous aider à démarrer

 $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(); 

Consultez cette page pour une mise en œuvre plus complète d'une API REST en PHP http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

Vous avez oublié d'envoyer une pièce d'identité.

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

Entrez la description de l'image ici

Créez Id à AUTO_INCREMENT et supprimez du code:

$ Id = $ _POST ['cid'];

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