【问题标题】:Make checkbox appear in $_POST array even if unchecked即使未选中,也使复选框出现在 $_POST 数组中
【发布时间】:2013-03-01 02:08:14
【问题描述】:

我在 HTML 表格中有一张发票。您选择项目名称,然后选择项目批次和项目编号。最后有一个复选框来标记是否已售罄。

<input type="checkbox" name="soldout[]">

当我处理表单时,复选框的 $_POST 数组显然不包含未选中的框。在将复选框与项目匹配时,这会导致我遇到问题

foreach($productID as $key=>$id){
    $p = $id;
    if(isset($soldout[$key])){
        $so = true;
    }
}

因此,如果我有三个订单项,并且第一个和最后一个被标记为已售罄,它会处理为前 2 个已售罄,最后一个未售罄。

我觉得我做不到:

<input type="checkbox" name="soldout[<?php echo $i; ?>]">

因为我在需要时使用 javascript 添加空发票行,并且不知道如何增加数组键。

关于如何处理这个问题的任何想法?

【问题讨论】:

  • 新添加的行(通过 JavaScript)是否也有 productID?如果是这样,并且它们每行都是唯一的,我会使用productID 作为soldout[] 的键,即soldout[&lt;?php echo $productId; ?&gt;]。显然,使用 JavaScript,您必须分析新创建的行的 productID,然后添加 is 作为复选框名称的键。
  • 不,它们不一定是唯一的。

标签: php html forms


【解决方案1】:

当你使用JS增加数组时,只需将名称更改为soldout_new,然后增加一个变量。

类似这样的:

var soldout_new = 0;

function add()
{
'<input type="checkbox" name="soldout_new[' + soldout_new + ']">';

soldout_new += 1;
}

或者您也可以将变量设置为 php 中的 id:

var soldout = <?php echo $i; ?>;

function add()
{
'<input type="checkbox" name="soldout[' + soldout + ']">';

soldout += 1;
}

【讨论】:

    【解决方案2】:

    对此没有直接的 HTML 解决方案。如果 Javascript 是一个选项,您可以查看那里,但如果您想要一个直接的 HTML 解决方案,未选中的复选框不会出现在 PHP 中,但单选按钮会出现。

    <input type="radio" name="soldout[<?php echo $i; ?>]" value="true"> Yes
    <input type="radio" name="soldout[<?php echo $i; ?>]" value="false"> No
    

    然后在PHP中你可以像访问它

    foreach($productID as $key=>$id){
        $p = $id;
        if($soldout[$key] == "true"){
            $so = true;
        }
        else {
            $so = false;
        }
    }
    

    记住 "true" 周围的引号,因为它是一个字符串


    再一次,如果您在服务器端填充复选框,您还应该知道应该存在哪些值,如果它们不存在于 $_POST 中,则假定它们未选中。

    foreach ($availableProductIDs as $id) {
        if(isset($_POST['soldout'][$id]){
            $so = true;
        }
        else {
            $so = false;
        }
    }
    

    【讨论】:

      【解决方案3】:

      为什么不这样做呢?

      <input type="checkbox" name="soldout[]" value="<?= $productID[0] ?>">
      <input type="checkbox" name="soldout[]" value="<?= $productID[1] ?>">
      

      然后在 PHP 中

      foreach($productID as $key=>$id) {
          $p = $id;
          if(in_array($id, $soldout) {
              $so = true;
          }
      }
      

      【讨论】:

        【解决方案4】:

        Java免费解决方案:

        &lt;input type="hidden" name="hsoldout[]" value="$value"&gt;
        &lt;input type="checkbox" name="soldout[]" value="$value"&gt;<br />
        

        提交后,如果出现soldouthsoldout之间的差异,则表示checkbox已订婚。实际上,每个表单只需要一个隐藏键:

        if(array_key_exists($_POST[hsoldout],$i)) { <br/>
            $_POST[soldout][$i] = $_POST[soldout][$i];   // makes sure it is set as a 
            $_POST var <br />
            .... <br />
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-02
          • 1970-01-01
          • 2018-04-02
          • 1970-01-01
          • 2019-03-06
          • 1970-01-01
          • 2016-06-25
          • 1970-01-01
          相关资源
          最近更新 更多