我正在学习使用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函数的位置。
答案 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']):'');