3

我在 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 添加空发票行,并且不知道如何增加数组键。

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

4

4 回答 4

1

对此没有直接的 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;
    }
}
于 2013-03-01T02:21:07.113 回答
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;
}
于 2013-03-01T02:23:48.670 回答
0

为什么不做这样的事情?

<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;
    }
}
于 2013-03-01T04:46:48.950 回答
0

Java免费解决方案:

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

soldout提交后,如果和之间出现差异hsoldout,则表示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 />
} 
于 2013-10-21T13:23:13.953 回答