即使未选中,复选框也会显示在$ _POST数组中

时间:2013-03-01 02:08:15

标签: php html forms

我在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 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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 :(得分: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;
    }
}

答案 3 :(得分:0)

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 />
}