使用PHP将JSON数据发送到数据库

时间:2018-04-10 08:07:46

标签: php json

我正在学习使用PHP的JSON,我遇到了一个问题

我正在尝试将我的尺寸合并字符串插入尺寸列下的数据库产品表 expected result

这就是我的尝试:

我有一个名为 saveChangesSizes 的函数 我尝试使用JSON.stringify()将JavaScript对象转换为字符串

$("#saveChangesSizes").click(function(){
    console.log("1");
    var velicine="";
    var niz=new Array();
    for(var i=1; i<=12;i++){
        if($("#size_" + i).val()!=""){
            niz.push({size: $("#size_" + i).val(), qty: $("#qty_" + i).val()});
            velicine+=$("#size_" + i).val() + ":" + $("#qty_" + i).val() + ",";
        }
    }
    console.log(niz);
    if(velicine.length>0){
        velicine=velicine.substring(0,velicine.length-1);
    }
    $("#qtyandsizes").val(JSON.stringify(niz));
    $("#sizes").val(velicine);
     $("#sizesModal").foundation("close");
     return false;
});

从modal提交尺寸后,它们存储在sizes and quantity preview标签中,格式正确,即字符串。

我的预览标签的ID为&#34;尺寸&#34;和#34; $ sizes&#34;的价值

使用 PHP  如果发布条件

,我已经定义了$ sizes
 if($_POST){
 $sizes = ((isset($_POST['qtyandsizes']) && $_POST['qtyandsizes'] !='')?sanitize($_POST['qtyandsizes']):'');

我查询插入到我的数据库:

$insertSql=$veza->prepare("INSERT INTO products (`sizes`) VALUES ('$sizes');");
 $insertSql->execute();

我进入我的数据库的是JSON对象,如下所示:

  

[{&#34;大小&#34;:&#34;介质&#34;&#34;数量&#34;:&#34; 2&#34;},{&#34;大小&#34 ;:&#34;大&#34;&#34;数量&#34;:&#34; 3&#34;}]

更新

我应该以某种方式回报&#34; velicine&#34;到一个php变量,因为它显示了console.log(velicine)

的预期格式和结果

我尝试将$_POST['qtyandsizes']替换为$_POST['sizes'],但它会覆盖我手动插入数据库大小列的任何内容,结果为空


要提供更多信息,这是我的完整代码结构:

包含PHP打开和 PDO 数据库配置文件

<?php
include_once "../config.php";
 if(isset($_GET['add']) || isset($_GET['edit'])){
   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');

 if(isset($_GET['edit'])){
   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] != '')?sanitize($_POST['sizes']):$product['sizes']);

 if($_POST)

   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');

之后我的查询插入到我上面发布的数据库中。我关闭了我的PHP标签。

  

打开FORM标签和内容:

<form action ="sizes.php?<?=((isset($_GET['edit']))?'edit='.$edit_id:'add=1');?>" method="POST" enctype="multipart/form-data" >

<div class="small-6 large-4 columns ">
   <label>Quantity & Sizes*: </label>
   <button class="button" id="ctl">Quantity & Sizes</button>
</div>
//Id = ctl is used to open my modal where I am inputting sizes

<div class="small-6 large-4 columns ">
  <label for ="sizes">Sizes & Qty Preview</label>
  <input type="text" class="form-control" name="size" id="sizes" value="<?php echo $sizes;?>"readonly> 
</div>

注意 $sizes变量,正在以正确的格式回显到Sizes和Quantaty预览标签是我想要插入数据库的内容,但由于某种原因,它并没有&#39;工作。

我的提交按钮以及我的表格结束的位置:

 <input type="submit" value="<?=((isset($_GET['edit']))?'Edit':'Add');?> Product" class="button">


<input type="hidden" name="qtyandsizes" id="qtyandsizes" />

</form>

在此之后,我的基础会显示使用按钮ID saveChangesSizes添加大小的模式,将结果输出到预览标签。

 <button class="button"  id="saveChangesSizes"> Save Changes

最后是javascript saveChangesSizes函数的位置。

2 个答案:

答案 0 :(得分:1)

<强>更新

function getSizes($json){

  $json = urldecode($json);

  $array = json_decode($json, true);

  foreach($array as $key){

  $sizes .= $key['size'] . ':' . $key['qty'] . ',';

  }

  $sizes = rtrim($sizes,',');

  return htmlentities($sizes, ENT_QUOTES, 'UTF-8');

}

echo getSizes($_POST['qtyandsizes']); 

答案 1 :(得分:0)

JS中有2个变量:

1. `niz` which is an `Array`
This `Array` is created in `key value` pair as
size: medium, qty: 2

2. `velicine` which is a `String`
This is created as a concatenated string
medium:2

niz然后将数组转换为JSON字符串并插入products表。 velicine仅用于向用户显示textbox

  

[{&#34;大小&#34;:&#34;介质&#34;&#34;数量&#34;:&#34; 2&#34;},{&#34;大小&#34 ;:&#34;大&#34;&#34;数量&#34;:&#34; 3&#34;}]

这是一个有效的JSON字符串。如果您不希望存储JSON,请在velicine时将其替换为insert

希望这有帮助!

更新1

根据您的评论,您希望将velicine插入数据库。

为此,请更改以下代码段

if($_POST){
    $sizes = ((isset($_POST['qtyandsizes']) && $_POST['qtyandsizes'] !='')?sanitize($_POST['qtyandsizes']):'');

if($_POST){
    $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');