我的表格如下:
<form action="" method="post">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
</form>
当我选中所有复选框并发布表单时,结果如下:
Array ([status_3] => 1 [status_2] => 1 [status_1] => 1 )
然后我取消选中第二个复选框并发布表单,结果如下:
Array ( [status_3] => 1 [status_1] => 1 )
当我取消选中第二个复选框时,是否可以制作如下所示的结果:
Array ( [status_3] => 1 [status_2] => 0 [status_1] => 1 )
有想法吗?
感谢您的帮助。
答案 0 :(得分:47)
第一种方式 - 隐藏字段(缺点:用户可以操纵字段的值(但是也可以操纵复选框的值,所以它不是真正的问题,如果你只期望1或0))
<form action="" method="post">
<input type="hidden" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
<input type="submit" />
</form>
<?php
var_dump($_POST);
/*
* checking only the second box outputs:
*
* array (size=3)
'status_1' => string '0' (length=1)
'status_2' => string '1' (length=1)
'status_3' => string '0' (length=1)
*/
第二种方式 - 为非设定索引分配默认值:
<form action="" method="post">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
<input type="submit" />
</form>
<?php
for($i = 1; $i<=count($_POST); $i++) {
$_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0;
}
var_dump($_POST);
/**
* Here we will be checking only the third checkbox:
*
* array (size=3)
'status_3' => string '1' (length=1)
'status_1' => int 0
'status_2' => int 0
*/
答案 1 :(得分:8)
我认为添加这样的隐藏字段会起作用
<input type="hidden" id="status_1_" name="status_1" value="0">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" id="status_2_" name="status_2" value="0">
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" id="status_3_" name="status_3" value="0">
<input type="checkbox" id="status_3" name="status_3" value="1" />
答案 2 :(得分:2)
我认为从html表单中获取你想要的数组是不可能的。但是可以使用这些技巧:
$defaultForm = array(
'status_1' => 0,
'status_2' => 0,
'status_3' => 0,
);
// example array from $_POST
$form = array(
'status_1' => 1,
'status_3' => 1,
);
$form = array_merge($defaultForm, $form);
结果:
array(3){
&#39; STATUS_1&#39; =&GT; INT(1)
&#39; status_2&#39; =&GT; INT(0)
&#39; status_3&#39; =&GT; int(1)}
答案 3 :(得分:2)
试试这个。如果未选中该复选框,则会传递具有相同名称的隐藏字段。
<form action="" method="post">
<input type="hidden" id="hidden_status_1" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" id="hidden_status_2" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" id="hidden_status_3" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
</form>
答案 4 :(得分:1)
谢谢大家。感谢@RoyalBg给我解决方案。像这样:
<input type="hidden" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" /> Check 1 <br />
<input type="hidden" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" /> Check 2 <br />
<input type="hidden" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" /> Check 3 <br />
完美的工作.. :))
答案 5 :(得分:1)
这个问题可能已经得到解答,但我只是想对它进行一次尝试......服务器端唯一解决方案:
$p = $_POST;
$a = array();
$a['status_3'] = (int) ($p['status_3'] === 1);
$a['status_2'] = (int) ($p['status_2'] === 1);
$a['status_1'] = (int) ($p['status_1'] === 1);
测试
// if input is Array("status_1"=>1) output will be
Array ( [status_1] => 1 [status_3] => 0 [status_2] => 0 )
// if input is Array("status_1"=>1, "status_2"=>1) output will be
Array ( [status_1] => 1 [status_3] => 0 [status_2] => 1)
答案 6 :(得分:1)
<!--html code-->
<input type="checkbox" name="correct" value="1">Option 1
<input type="checkbox" name="correct" value="2">Option 2
<input type="checkbox" name="correct" value="3">Option 3
<input type="checkbox" name="correct" value="4">Option 4
//php code in function called on form submit
public function addOptions(Request $request)
{
$option = array('1' => 0,'2'=>0,'3'=>0,'4'=>0 );
$option[$request->correct] = 1;
return $option;
}
答案 7 :(得分:0)
为什么你把它放在一个数组中? 您可以使用“isset”
将未选中的框设为0 if(!isset($_POST['status_2'])
{
//Set status_2 parameter as 0
}
答案 8 :(得分:0)
尝试以下代码
$myresult = array();
if(!isset($_POST['status_1'])){
$myresult['status_1'] = 0;
}
if(!isset($_POST['status_2'])){
$myresult['status_2'] = 0;
}
if(!isset($_POST['status_3'])){
$myresult['status_3'] = 0;
}
echo "<pre>";
print_r($myresult);
echo "</pre>";
exit;
答案 9 :(得分:0)
试试这个:
for ($i = 1; $i<=3; $i++) {
$_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0; // 0 if not set
}
var_dump($_POST);
答案 10 :(得分:0)
假设我们使用带有零或一的复选框......
使用带有零值的隐藏复选框只是一种解决方法。另一种解决方法是在接收帖子或获取时将值加0。
示例:
$ chkbx1 = $ _POST [&#39; chckbx1&#39;]; $ chkbx1 + = 0;
这将获取一个NULL值并将其变为零,但如果该值为1,则在其选中时,该值保持不变。
这里真正的问题不是发明一种解决方法。它理解为什么会这样。旧版本的mySQL采用空值并将它们转换为零。在较新的版本中,您必须禁用严格模式,然后不需要解决方法。