我的表单上有以下复选框的代码:
<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”(不好)。
我做错了什么?
感谢。
答案 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也很容易。