HTML表单、JSON和PHP

HTML表单、JSON和PHP,php,json,Php,Json,我有一个HTML表单,它使用stringify解析为JSON,然后与mysqli数据库通信 我遇到的问题是,表单包含了很多复选框,当相关时会选中这些复选框,只有选中的复选框才能在表单提交操作中得到输出。这意味着,当我在后面阅读JSON时,我永远无法确定它的结构,这使得访问解码JSON数组的特定元素变得不可能 表单复选框部分如下所示: ​ <!-- Couriers section --> <div clas

我有一个HTML表单,它使用stringify解析为JSON,然后与mysqli数据库通信

我遇到的问题是,表单包含了很多复选框,当相关时会选中这些复选框,只有选中的复选框才能在表单提交操作中得到输出。这意味着,当我在后面阅读JSON时,我永远无法确定它的结构,这使得访问解码JSON数组的特定元素变得不可能

表单复选框部分如下所示:

​                    <!-- Couriers section --> 
                <div class="form-group row">
                        <label for="ppd" class="col-sm-5 col-form-label">Courier Select</label>
                     <div class="col-sm-6">
                         <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierAmazon" value="amazon">
                            <label class="form-check-label" for="courierAmazon">Amazon Logistics</label>
                        </div>

                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierDHL" value="dhl">
                            <label class="form-check-label" for="courierCheck">DHL</label>
                        </div>

                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierDPD" value="dpd">
                            <label class="form-check-label" for="courierDPD">DPD</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierFedex" value="fedex">
                            <label class="form-check-label" for="courierFedex">FedEx</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierGFS" value="gfs">
                            <label class="form-check-label" for="courierGFS">GFS</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierHermes" value="hermes">
                            <label class="form-check-label" for="courierHermes">Hermes</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierInterlink" value="interlink">
                            <label class="form-check-label" for="courierInterlink">Interlink</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierIntersoft" value="intersoft">
                            <label class="form-check-label" for="courierIntersoft">Intersoft</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierMetapack" value="metapack">
                            <label class="form-check-label" for="courierMetapack">MetaPack</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierNetdespatch" value="netdespatch">
                            <label class="form-check-label" for="courierNetdespatch">NetDespatch</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierNightfreight" value="nightfreight">
                            <label class="form-check-label" for="courierNightfreight">NightFreight</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierParcelforce" value="parcelforce">
                            <label class="form-check-label" for="courierParcelforce">ParcelForce</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierRoyalmail" value="royalmail">
                            <label class="form-check-label" for="courierRoyalmail">RoyalMail</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierTNT" value="tnt">
                            <label class="form-check-label" for="courierTNT">TNT</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierTuffnells" value="tuffnells">
                            <label class="form-check-label" for="courierTuffnells">Tuffnells</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierUPS" value="ups">
                            <label class="form-check-label" for="courierUPS">UPS</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierXDP" value="xdp">
                            <label class="form-check-label" for="courierXDP">XDP</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierYodel" value="yodel">
                            <label class="form-check-label" for="courierYodel">Yodel</label>
                        </div>
                    </div>
                </div> 
[
  {
    "name": "contactNameInput",
    "value": "Name"
  },
  {
    "name": "companyNameInput",
    "value": "Company"
  },
  {
    "name": "companyRegNumberInput",
    "value": "23456"
  },
  {
    "name": "quoteNumberInput",
    "value": "Q4356"
  },
  {
    "name": "version",
    "value": "Professional Edition"
  },
  {
    "name": "userInput",
    "value": "12"
  },
  {
    "name": "kpafUserInput",
    "value": "1"
  },
  {
    "name": "hhtUserInput",
    "value": "n/a"
  },
  {
    "name": "ppdUserInput",
    "value": "n/a"
  },
  {
    "name": "eposUserInput",
    "value": "n/a"
  },
  {
    "name": "courierCheck",
    "value": "interlink"
  },
  {
    "name": "courierCheck",
    "value": "intersoft"
  },
  {
    "name": "courierCheck",
    "value": "nightfreight"
  },
  {
    "name": "trainingCheck",
    "value": "accounts"
  },
  {
    "name": "trainingCheck",
    "value": "channels"
  },
  {
    "name": "dataDays",
    "value": "2"
  },
  {
    "name": "dataCheck",
    "value": "stock"
  },
  {
    "name": "dataCheck",
    "value": "customer"
  }
]
        $row = mysqli_fetch_array($result);
        $quotationData = json_decode($row["json"], true);

        $qname = $quotationData[0]['value'];
        $qnumber = $quotationData[3]['value'];
我的要求是读入这个JSON字符串并将其解码成一个数组,然后使用这些元素填充一个基于HTML的文档。我当前访问元素的方式如下所示:

​                    <!-- Couriers section --> 
                <div class="form-group row">
                        <label for="ppd" class="col-sm-5 col-form-label">Courier Select</label>
                     <div class="col-sm-6">
                         <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierAmazon" value="amazon">
                            <label class="form-check-label" for="courierAmazon">Amazon Logistics</label>
                        </div>

                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierDHL" value="dhl">
                            <label class="form-check-label" for="courierCheck">DHL</label>
                        </div>

                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierDPD" value="dpd">
                            <label class="form-check-label" for="courierDPD">DPD</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierFedex" value="fedex">
                            <label class="form-check-label" for="courierFedex">FedEx</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierGFS" value="gfs">
                            <label class="form-check-label" for="courierGFS">GFS</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierHermes" value="hermes">
                            <label class="form-check-label" for="courierHermes">Hermes</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierInterlink" value="interlink">
                            <label class="form-check-label" for="courierInterlink">Interlink</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierIntersoft" value="intersoft">
                            <label class="form-check-label" for="courierIntersoft">Intersoft</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierMetapack" value="metapack">
                            <label class="form-check-label" for="courierMetapack">MetaPack</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierNetdespatch" value="netdespatch">
                            <label class="form-check-label" for="courierNetdespatch">NetDespatch</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierNightfreight" value="nightfreight">
                            <label class="form-check-label" for="courierNightfreight">NightFreight</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierParcelforce" value="parcelforce">
                            <label class="form-check-label" for="courierParcelforce">ParcelForce</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierRoyalmail" value="royalmail">
                            <label class="form-check-label" for="courierRoyalmail">RoyalMail</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierTNT" value="tnt">
                            <label class="form-check-label" for="courierTNT">TNT</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierTuffnells" value="tuffnells">
                            <label class="form-check-label" for="courierTuffnells">Tuffnells</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierUPS" value="ups">
                            <label class="form-check-label" for="courierUPS">UPS</label>
                        </div>
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierXDP" value="xdp">
                            <label class="form-check-label" for="courierXDP">XDP</label>
                        </div> 
                        <div class="form-check">
                            <input class="form-check-input" type="checkbox" name="courierCheck" id="courierYodel" value="yodel">
                            <label class="form-check-label" for="courierYodel">Yodel</label>
                        </div>
                    </div>
                </div> 
[
  {
    "name": "contactNameInput",
    "value": "Name"
  },
  {
    "name": "companyNameInput",
    "value": "Company"
  },
  {
    "name": "companyRegNumberInput",
    "value": "23456"
  },
  {
    "name": "quoteNumberInput",
    "value": "Q4356"
  },
  {
    "name": "version",
    "value": "Professional Edition"
  },
  {
    "name": "userInput",
    "value": "12"
  },
  {
    "name": "kpafUserInput",
    "value": "1"
  },
  {
    "name": "hhtUserInput",
    "value": "n/a"
  },
  {
    "name": "ppdUserInput",
    "value": "n/a"
  },
  {
    "name": "eposUserInput",
    "value": "n/a"
  },
  {
    "name": "courierCheck",
    "value": "interlink"
  },
  {
    "name": "courierCheck",
    "value": "intersoft"
  },
  {
    "name": "courierCheck",
    "value": "nightfreight"
  },
  {
    "name": "trainingCheck",
    "value": "accounts"
  },
  {
    "name": "trainingCheck",
    "value": "channels"
  },
  {
    "name": "dataDays",
    "value": "2"
  },
  {
    "name": "dataCheck",
    "value": "stock"
  },
  {
    "name": "dataCheck",
    "value": "customer"
  }
]
        $row = mysqli_fetch_array($result);
        $quotationData = json_decode($row["json"], true);

        $qname = $quotationData[0]['value'];
        $qnumber = $quotationData[3]['value'];
但是当用户选择courier integration复选框选项时,数组中的值明显增加,因此无法针对我需要的信息


有人能回顾一下,让我知道正确的方法来获得我正在努力争取的结果和可用性吗?

尝试在名称中添加括号,这会使您的复选框变成一个值数组

name="courierCheck[]"

如果我正确理解了您的问题,您可以使用resultype“MYSQLI_ASSOC”:“返回一个字符串的关联数组,该数组表示结果集中提取的行,其中数组中的每个键表示结果集中一个列的名称,如果结果集中没有更多行,则为NULL。”或者使用MYSQLI_fetch_ASSOC():这将使您的键成为您的列名,您可以直接访问它们的值,而不必担心索引的移动。谢谢@Rami,我想我可能需要从数据库中更好地控制这一点。目前,数据库只有3列—ID、quoteNumber、JSON—编码的JSON字符串被转储到最后一列,然后在以后检索。这很有趣,我从未使用关系数据库将原始JSON存储到列中,以便以后从所述列提取和解析数据。我相信,如果有特定的列并存储它们各自的值,您会得到更好的服务。我相信这会简化你的工作。或者,我会想象像mongo这样的文档库更适合JSON的存储/处理。我本想提高效率,但却给自己造成了限制。谢谢你的建议嗨,我试过了,JSON返回为{“名称”:“courierCheck[],“值”:“interlink”},{“名称”:“courierCheck[],“值”:“intersoft”},{“名称”:“courierCheck[],“值”:“夜间货运”