【问题标题】:Sending JSON data to database with PHP使用 PHP 将 JSON 数据发送到数据库
【发布时间】:2018-09-19 18:28:57
【问题描述】:

我正在使用 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 为“sizes”,值为“$sizes”

使用 PHP 我在 if 后置条件中定义了 $sizes

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

我有 insert 查询到我的数据库:

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

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

[{"size":"medium","qty":"2"},{"size":"large","qty":"3"}]


更新

我应该以某种方式将“velicine”的值返回给 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 变量,以正确格式回显到尺寸和数量预览标签是我想要插入数据库的内容,但由于某种原因它不起作用。


还有我的提交按钮和表单的结束位置:

 <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 函数所在的地方。

【问题讨论】:

  • 您希望您的数据库示例是什么样的?
  • 查看预期结果链接。预计会合并为字符串

标签: php json


【解决方案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']); 

【讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 嗯 linter 给了我 php 错误,实际上它指的是我在 atom 上打开开发工具,我可以在正文中看到这个错误:platform linux is bluuried
【解决方案2】:

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

[{"size":"medium","qty":"2"},{"size":"large","qty":"3"}]

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

希望这会有所帮助!

更新 1

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

为此,请更改以下 sn -p

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

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

【讨论】:

  • 是的,这是正确的。但是我找不到关于如何将“velicine”的javascript值放入帖子并将其替换为当前插入的解决方案,现在我有变量$sizes
  • 更新了我的答案。
  • 这不会向数据库输出任何内容,我在发布问题之前已经尝试过了
猜你喜欢
  • 2013-11-03
  • 2014-09-26
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多