发布复选框的值

时间:2013-12-09 22:35:31

标签: php post checkbox

我的表单上有以下复选框的代码:

<input type="hidden" name="option_desc[]" value="option 1"/>
<label><input type="checkbox" name="option_price[]" value="10" class="option_checkbox"/>option 1</label>

<input type="hidden" name="option_desc[]" value="option 2"/>
<label><input type="checkbox" name="option_price[]" value="20" class="option_checkbox"/>option 2</label>

<input type="hidden" name="option_desc[]" value="option 3"/>
<label><input type="checkbox" name="option_price[]" value="30" class="option_checkbox"/>option 3</label>

我正在尝试获取用户选中的复选框的POST值(例如,如果他选中了第二个复选框:“option 2”+“20”)并存储它们:

    $articleDetails['options'] = array();
$count = 0;
if(is_array($_POST['option_price'])){
    foreach($_POST['option_price'] as $key => $value){
        if($value){
            $articleDetails['options'][$count]['option_price'] = $_POST['option_price'][$key];
            $articleDetails['options'][$count]['option_desc'] = $_POST['option_desc'][$key];
            $count++;
        }
    }
}

当用户选中其中一个复选框时,正确存储了相应的'option_price',但'option_desc'不是属于CHECKED复选框的那个(例如:当选中第二个复选框时,我的值为I得到“20”(好)和“选项1”(不好)。

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:0)

您遇到的问题是,如果未选中复选框,则在您的隐藏输入始终发布时,数据将不会被POST。坦率地说,我看不出你的隐藏输入在这里给你什么价值。他们完全没有告诉你关于服务器上你还不知道的发布数据。

您应该在数组表示法中使用已定义的索引作为复选框字段,如下所示:

<input type="checkbox" name="option_price[1]" value="10" class="option_checkbox"/>option 1</label>
<input type="checkbox" name="option_price[2]" value="20" class="option_checkbox"/>option 2</label>
<input type="checkbox" name="option_price[3]" value="30" class="option_checkbox"/>option 3</label>

注意:我没有在这里使用零索引数组,因为我认为你可能想直接将$_POST['option_price'][1]与“选项1”联系起来。

在下面的评论中添加与讨论相关的一些示例。比如说你想要输出一些option_price个复选框,它们来自一些动态来源。生成复选框的代码可能如下所示:

$price_options = array(
    array(
        'description' => 'eBook',
        'value' => 10
    ),
    array(
        'description' => 'articles',
        'value' => 20
    ),
    // and so on
);

$count = count($price_options)
for($i = 1; $i<= $count; $i++) {
?>
<input type="checkbox" name="option_price[<?php echo $i; ?>]" value="<?php echo $price_options[$i]['value']; ?>" class="option_checkbox"/><?php echo $price_options[$i]['description']; ?></label>
<?php
} // end for

发布时,您知道每个$_POST['option_price'][x]都会对应$price_options[x]处的项目。

您可以简单地迭代$_POST['option_price']以查看选择了哪些项目:

if(!empty($_POST['option_price']) {
    foreach ($_POST['option_price'] as $index => $value) {
        // verify value hasn't been tampered with
        if ((int) $value === $price_options[$index]['value']) {
            // set description
            $description = $price_options[$index]['description'];
            var_dump($description, $value);
        }
    }
}

答案 1 :(得分:0)

我建议输入名称来输入

<input type=hidden name="option[1][desc]"/> 
<input type=hidden name="option[1][price]"/>

然后我认为运行forreach也很容易。