我希望能成功解释出什么问题。我有这样的表格:
<form class="p_form" name="form1" method="POST" action="./index.php?product=3&pn=1">
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="34" id="o34" name="options[]">
<label for="o34">Red</label></div>
<input type="text" value="" id="p34" name="opt_price[]"></div>
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="35" id="o35" name="options[]">
<label for="o35">Green</label></div>
<input type="text" value="" id="p35" name="opt_price[]"></div>
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="36" id="o36" name="options[]">
<label for="o36">Yellow</label></div>
<input type="text" value="" id="p36" name="opt_price[]"></div>
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="37" id="o37" name="options[]">
<label for="o37">Orange</label></div>
<input type="text" value="12" id="p37" name="opt_price[]"></div>
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="38" id="o38" name="options[]">
<label for="o38">Blue</label></div>
<input type="text" value="" id="p38" name="opt_price[]"></div>
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="39" id="o39" name="options[]">
<label for="o39">Pink</label></div>
<input type="text" value="" id="p39" name="opt_price[]"></div>
<input type="submit" value="Send"/>
</form>
以及以下php代码:
if(isset($_POST['options'])){
$options = $_POST['options'];
$opt_price = $_POST['opt_price'];
foreach( $options as $key => $n ) {
$optid=$n;
$price=$opt_price[$key];
}
}
Basicaly此表单表示带有颜色标签和输入文本的复选框,用户可在其中添加价格。 问题是,当我提交表单时,复选框仅在选中时发布数据,但输入文本在所有情况下都会发布数据 - 输入中有或没有价格。当我打印发布的数据时,我可以看到:
array(3) { [0]=> string(2) "37" [1]=> string(2) "38" [2]=> string(2) "39" } - only 3 checkboxes are checked
array(6) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(2) "12" [5]=> string(0) "" } - all 6 input texts..
我想仅为已选中的复选框获取数据及其价格如组 - 复选框+其价格..如何做?提前致谢
答案 0 :(得分:1)
不要使用opt_price[]
作为名称,只需使用ID作为名称,然后使用$price = $_POST['p'.$key];
,如下所示:
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="35" id="o35" name="options[]">
<label for="o35">Green</label></div>
<input type="text" value="" id="p35" name="p35"></div>
if(isset($_POST['options'])){
$options = $_POST['options'];
foreach( $options as $key => $n ) {
$optid=$n;
$price=$_POST['p'.$n];
}
}
答案 1 :(得分:1)
您的字段似乎有ID(34 - 39),因此您可以使用这些字段来确保字段始终匹配:
<div class="poptionholder">
<div class="poption"><input type="checkbox" value="34" id="o34" name="options[34]">
^^ here
<label for="o34">Red</label></div>
<input type="text" value="" id="p34" name="opt_price[34]"></div>
^^ here
等
现在,您可以循环设置复选框并使用密钥访问正确的文本字段:
foreach( $options as $key => $n ) {
$price=$opt_price[$key];
}
您当然也可以循环array_keys($options)
,因为您不使用值$n
。