【发布时间】: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 函数所在的地方。
【问题讨论】:
-
您希望您的数据库示例是什么样的?
-
查看预期结果链接。预计会合并为字符串