提交一个带有空白checkbox的HTML表单

我有一个HTML表单 – 使用PHP,我将表单的数据发送到MySQL数据库。 对表单上的问题的一些答案有checkbox。 显然,用户不必勾选一个问题的所有checkbox。 我也想提出其他问题(包括广播组)可选。

但是,如果我提交空格,广播组等等的表格,我收到了他们每个人的“未定义索引”错误消息的长长的清单。

我怎样才能解决这个问题? 谢谢。

未经检查的无线电或checkbox元素未被提交,因为它们不被认为是成功的 。 所以你必须检查它们是否使用issetempty函数发送。

 if (isset($_POST['checkbox'])) { // checkbox has been checked } 

我不时地使用这个技术:

 <input type="hidden" name="the_checkbox" value="0" /> <input type="checkbox" name="the_checkbox" value="1" /> 

注意:这会在不同的服务器端语言中得到不同的解释,所以如有必要,请进行testing和调整。 感谢SimonSimCity的提示。

未检查的checkbox不会在POST数据中发送。 你应该检查它是否是空的:

 if (empty($_POST['myCheckbox'])) .... else .... 

在PHP中, empty()isset()不会生成通知。

这是一个简单的解决方法,使用JavaScript:

在提交包含checkbox的表单之前,将“closures”的表单设置为0并检查它们以确保提交。 这适用于checkbox数组。

/////例子//////

给定一个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> 

要添加到fmsf的代码,当添加checkbox,我使他们的名字中有[]的数组

 <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"> 

用这个

 $myvalue = (isset($_POST['checkbox']) ? $_POST['checkbox'] : 0; 

或者用0代替任何你没有的价值

我们很难检测到哪一个被检查。

如果您在for循环中填写表单,请使用value属性作为数据持有者:

  <?php for($i=1;$i<6;$i++):?> <input type="checkbox" name="active[]" value="<?php echo $i ?>" <?endfor;?> 

如果提交表格,你会得到选中的checkbox的订单号码(在这种情况下,我检查了第三和第四个checkbox):

  array(1) { ["active"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "4" } } 

当你在循环中处理表单数据时,比如说在post.php中,使用下面的代码来检测是否select了相关的行:

  if(in_array($_POST['active'] ,$i)) $answer_result = true; else $answer_result = false; 

最终的testing代码:

  <?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> 

虽然提交了很多答案,但我不得不为自己的解决scheme而凑合,因为我使用了定制的checkbox。 换句话说,没有答案为我工作。

我想得到的是一组checkbox,带有开关值。 诀窍是提交每个checkbox开/关值分隔符。 可以说分隔符是“;” 所以你得到的string是

;, 上, ;, ;, ;

然后,一旦你得到你的post,只需将数据分割成数组,使用“,”作为分割的字符,然后如果数组元素包含“开”,checkbox打开,否则closures。

对于每个checkbox,更改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> 

编辑:而不是“;”,你可以使用一些KEYstring值,这样你就会知道,你没有弄乱顺序,一旦POST是在服务器端获得…这样你可以很容易地创build一个Map,Hash或者其他的东西。 PS:保持它们在同一个div标签内。