JSON解码到MYSQL数据库

时间:2016-07-16 11:36:01

标签: php mysql json

我正在接受这样的JSON POST。

{"item_sku":["016","APL","017"],"item_quantity":[2,4,1]}

我想将其插入到mysql数据库表和名为“item_sku”和“item_quantity”的列中。我想这会插入三行。

HTML页面:

  <form id="form1" class="p-md col-md-6" ng-submit="addOrder()">

  <ul class="list-group m-b-sm md-whiteframe-z0" ng-repeat="item in cart.items">
    <li class="list-group-item">
      <a ui-sref="app.product({productSku: item.sku})" class="pull-right w-56"><img ng-src="http://192.168.0.228/app/{{ item.image || 'img/default_product.jpg' }}" alt="{{item.sku}}" class="img-responsive"></a>
      <div class="clear">
        <b>{{item.name}}</b><br>
        <span style="color:#666;font-size:12px;">{{item.description}}</span><br>
        <span style="color:#666;font-size:12px;">SKU# {{item.sku}}</span>
        <input type="text" ng-model="sku[$index]" ng-init="sku[$index]=item.sku">
        <br><br>            
      </div>
      <div>
        <!-- use type=tel instead of  to prevent spinners -->
        <button
            class="form-control btn btn-grey" type="button" style="width:34px;background-color:#ddd;"
            ng-disabled="item.quantity <= 1"
            ng-click="cart.addItem(item.sku, item.name, item.price, -1)">-</button>
        <input
            class="form-control btn btn-grey" size="2" style="width:44px" type="tel"
            ng-model="item.quantity"
            ng-change="cart.saveItems()" />
        <button
            class="form-control btn btn-grey" type="button" style="width:34px;background-color:#ddd;"
            ng-disabled="item.quantity >= 100"
            ng-click="cart.addItem(item.sku, item.name, item.price, +1, $index)" >+</button>
            <input type="text" ng-model="quantity[$index]" ng-init="quantity[$index]=item.quantity">
      </div>    
    </li>

        <div class="p b-t b-t-2x">
            <a style="color:#666;" ng-click="cart.addItem(item.sku, item.name, item.price, -10000000)" >
            <i class="icon mdi-action-delete i-20" style="color:#666;"></i>Remove</a> 
            <span class="pull-right">{{item.price * item.quantity | currency:' &#8377; ':2}}</span>
        </div>  

  </ul>                 


   <button type="submit" class="btn btn-info m-t" >Submit</button>
  </form>

控制器:

app.controller('OrderCtrl', function($scope, $location, $http ) {
$scope.sku = [];
$scope.quantity = [];
    $scope.addOrder = function(){
        $http.post(serviceURL+'submit_order.php', {
                        'item_sku':$scope.sku,
                        'item_quantity':$scope.quantity
        })

        .success(function(data,status,headers,config){
        $location.path('app/feedbackthankyou');
        });
    };  
});

PHP代码:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");

include "db.php";
// Using Static Data from POST -- Just for testing
$a='{"item_sku":["016","APL","017"],"item_quantity":[2,4,1]}';
$data = json_decode($a);
var_dump($data);

    foreach ($data as  $value)
    {
        echo $value->item_sku;
        echo $value->item_quantity;
    }
?> 

我猜现在细节已经足够了。顺便说一句,我正在使用AngularJS来创建CART。请帮忙。

1 个答案:

答案 0 :(得分:0)

数据的形状使数据库插入有点复杂化。应该位于同一行的数据分为两个单独的对象:$data->item_sku$data->item_quantity

如果一行中的所有内容都放在一个变量或一个数组元素中会更简单。我会改变我提交的数据的形状。我只会提交item_sku

而不是item_quantityitems

<强>的Javascript

var items=[];
for(var i=0; i<$scope.sku.length; i++){
   items.push({'sku':$scope.sku[i], 'qty':$scope.quantity[i]});
}
$http.post(serviceURL+'submit_order.php', {items:items})

然后在 PHP方面

$data = json_decode($_POST['items'],true);

现在$data是一个具有以下形状的项目数组:

[
    ['sku'=>'016','qty'=>2],
    ['sku'=>'APL','qty'=>4],
];

这可以更容易地插入到您的数据库中,因为数据已经按行组织。你说你已经知道如何进行数据库插入,所以我会让你解决这个问题。