提交带有空复选框的HTML表单

Tra*_*ray 41 html php forms checkbox

我有一个HTML表单 - 使用PHP,我将表单的数据发送到MySQL数据库.表单上的问题的一些答案有复选框.显然,用户不必勾选一个问题的所有复选框.我还想让其他问题(包括无线电组)可选.

但是,如果我提交带有空框,无线电组等的表单,我会收到一个很长的"未定义索引"错误消息列表.

我怎么能绕过这个?谢谢.

cee*_*yoz 93

我不时使用这种技术:

<input type="hidden" name="the_checkbox" value="0" />
<input type="checkbox" name="the_checkbox" value="1" />
Run Code Online (Sandbox Code Playgroud)

注意:这被解释不同在不同的服务器端语言,所以测试,必要时调整.感谢SimonSimCity的提示.

  • 你应该得到更好的评价.我们做一些研究吧!从HTML 4.01规范中可以看到"17.13.3处理表单数据"第二步:构建表单数据集."表单数据集是一系列控制名称/当前值对......".序列意味着逻辑顺序(您可以在任何地方查找),因此您的目的甚至可能是标准的用途.虽然它并非没有缺陷,但我很乐意立即开始使用它. (10认同)
  • 依靠Web浏览器来表达对页面上成功表单元素的排序,以及服务器端脚本也尊重它是在寻找麻烦. (8认同)

Gum*_*mbo 41

未提供未选中的广播或复选框元素,因为它们不被视为成功.所以你必须检查它们是否是使用issetempty函数发送的.

if (isset($_POST['checkbox'])) {
    // checkbox has been checked
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 7

未检查的复选框不会在POST数据中发送.你应该检查它是否为空:

if (empty($_POST['myCheckbox']))
     ....
else
     ....
Run Code Online (Sandbox Code Playgroud)

在PHP empty()isset()不生成通知.


小智 5

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

在提交包含复选框的表单之前,将"关闭"设置为0并检查它们以确保它们提交.例如,这适用于复选框数组.

/////示例//////

给出一个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>
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)