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

时间:2009-01-24 18:12:35

标签: php html forms checkbox

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

但是,如果我提交带有空框,无线电组等的表单,我会收到一长串“未定义索引”错误消息。

我该如何解决这个问题?感谢。

8 个答案:

答案 0 :(得分:91)

我不时使用这种技术:

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

注意:这会在不同的服务器端语言中解释differently,因此必要时进行测试和调整。感谢SimonSimCity提示。

答案 1 :(得分:41)

未提交未选中的广告或复选框元素,因为它们不被视为successful。因此,您必须检查是否使用issetempty函数发送了这些内容。

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

答案 2 :(得分:7)

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

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

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

答案 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标签内。​​