我有一个HTML表单 - 使用PHP,我将表单的数据发送到MySQL数据库。表单上的问题的一些答案有复选框。显然,用户不必勾选一个问题的所有复选框。我还想让其他问题(包括广播组)可选。
但是,如果我提交带有空框,无线电组等的表单,我会收到一长串“未定义索引”错误消息。
我该如何解决这个问题?感谢。
答案 0 :(得分:91)
我不时使用这种技术:
<input type="hidden" name="the_checkbox" value="0" />
<input type="checkbox" name="the_checkbox" value="1" />
注意:这会在不同的服务器端语言中解释differently,因此必要时进行测试和调整。感谢SimonSimCity提示。
答案 1 :(得分:41)
未提交未选中的广告或复选框元素,因为它们不被视为successful。因此,您必须检查是否使用isset
或empty
函数发送了这些内容。
if (isset($_POST['checkbox'])) {
// checkbox has been checked
}
答案 2 :(得分:7)
未检查的复选框不会在POST数据中发送。 你应该检查它是否为空:
if (empty($_POST['myCheckbox']))
....
else
....
答案 3 :(得分:5)
以下是使用javascript的简单解决方法:
在提交包含复选框的表单之前,将“关闭”设置为0并检查它们以确保它们提交。例如,这适用于复选框数组。
///// example //////
给出一个id =“formId”的表单
<form id="formId" onSubmit="return formSubmit('formId');" method="POST" action="yourAction.php">
<!-- your checkboxes here . for example: -->
<input type="checkbox" name="cb[]" value="1" >R
<input type="checkbox" name="cb[]" value="1" >G
<input type="checkbox" name="cb[]" value="1" >B
</form>
<?php
if($_POST['cb'][$i] == 0) {
// empty
} elseif ($_POST['cb'][$i] == 1) {
// checked
} else {
// ????
}
?>
<script>
function formSubmit(formId){
var theForm = document.getElementById(formId); // get the form
var cb = theForm.getElementsByTagName('input'); // get the inputs
for(var i=0;i<cb.length;i++){
if(cb[i].type=='checkbox' && !cb[i].checked) // if this is an unchecked checkbox
{
cb[i].value = 0; // set the value to "off"
cb[i].checked = true; // make sure it submits
}
}
return true;
}
</script>
答案 4 :(得分:3)
要添加到fmsf的代码,在添加复选框时,我通过在名称中加上[]来使它们成为一个数组
<FORM METHOD=POST ACTION="statistics.jsp?q=1&g=1">
<input type="radio" name="gerais_radio" value="primeiras">Primeiras Consultas por medico<br/>
<input type="radio" name="gerais_radio" value="salas">Consultas por Sala <br/>
<input type="radio" name="gerais_radio" value="assistencia">Pacientes por assistencia<br/>
<input type="checkbox" name="option[]" value="Option1">Option1<br/>
<input type="checkbox" name="option[]" value="Option2">Option2<br/>
<input type="checkbox" name="option[]" value="Option3">Option3<br/>
<input type="submit" value="Ver">
答案 5 :(得分:2)
使用此
$myvalue = (isset($_POST['checkbox']) ? $_POST['checkbox'] : 0;
或者用0代替你没有价值的东西
答案 6 :(得分:2)
我们无法检测是否检查了哪一个。
如果要在for循环中填充表单,请使用value属性作为数据持有者:
<?php for($i=1;$i<6;$i++):?>
<input type="checkbox" name="active[]" value="<?php echo $i ?>"
<?endfor;?>
如果提交表单,您将获得已选中的复选框的订单号(在本例中我选中了第3个和第4个复选框):
array(1) {
["active"]=>
array(2) {
[0]=>
string(1) "3"
[1]=>
string(1) "4"
}
}
当您在循环中处理表单数据时,让我们说在post.php中,使用以下代码来检测是否选择了相关行:
if(in_array($_POST['active'] ,$i))
$answer_result = true;
else
$answer_result = false;
测试的最终代码:
<?php if (isset($_POST) && !empty($_POST)):
echo '<pre>';
var_dump($_POST);
echo '</pre>';
endif;
?>
<form action="test.php" method="post">
<?php for($i=1;$i<6;$i++):?>
<input type="checkbox" name="active[]" value="<?php echo $i; ?>" />
<?php endfor;?>
<button type="submit">Submit</button>
</form>
答案 7 :(得分:1)
虽然提交了很多答案,但由于我使用了自定义的复选框,因此我不得不即兴发挥自己的解决方案。换句话说,没有一个答案对我有用。
我想要的是一系列复选框,带有开启和关闭值。诀窍是为每个复选框打开/关闭值提交一个分隔符。让我们说分隔符是&#34 ;;&#34;所以你得到的字符串是
;, on,;,;,;
然后,一旦您收到帖子,只需使用&#34;,&#34;将数据拆分为数组。作为拆分的字符,然后如果数组元素包含&#34; on&#34;,则复选框处于打开状态,否则关闭。
对于每个复选框,更改ID,其他所有内容都相同......重复的语法是:
<div>
<input type="hidden" name="onoffswitch" class="onoffswitch-checkbox" value=";" />
...some other custom code here...
<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch1" checked>
</div>
编辑:而不是&#34 ;;&#34;,您可以使用一些KEY字符串值,这样一旦在服务器上获得POST,您就会知道您没有搞乱订单 - 那边......你可以轻松地创建一个Map,Hash等等。 PS:将它们保存在同一个div标签内。