如果未设置,则将一大组复选框的值设置为“0”

时间:2012-01-16 00:41:21

标签: php

有更好的方法吗?

我有一个带有30个复选框的简单表单。 如果没有检查它们,就PHP而言它们不存在(未设置),所以我将值设置为0,因为我正在直接在此代码下面更新数据库:

if(!isset($_POST['checkbox1'])) {
   $_POST['checkbox1'] = '0';
}

if(!isset($_POST['checkbox2'])) {
   $_POST['checkbox2'] = '0';
}

if(!isset($_POST['checkbox3'])) {
   $_POST['checkbox3'] = '0';
}

如果选中它们,则值为1,以便该部分正常。

我尝试过玩这个但无济于事:

foreach($_POST AS $key=>$value) {
    if($value != '1') { $_POST[$key] = '0'; }
}

4 个答案:

答案 0 :(得分:1)

怎么样

foreach (array('checkbox1', 'checkbox2', 'checkbox3') as $k) {
    if (!isset($_POST[$k])) {
        $_POST[$k] = '0';
    }
}

答案 1 :(得分:1)

我认为你的更大问题在于你的表格。如果您有一组需要验证的复选框,那么您应该将它们分组到名称中的数组中,如下所示:

<input type="checkbox" name="myCheckBoxes[]" value="A" />Checkbox A<br />
<input type="checkbox" name="myCheckBoxes[]" value="B" />Checkbox B<br />
<input type="checkbox" name="myCheckBoxes[]" value="C" />Checkbox C<br />

<?php
   if(!empty($_POST['myCheckBoxes'])) {
      foreach ($_POST['myCheckBoxes'] as $checkBoxValue) {
         echo $checkBoxValue;
      }
   }
?>

答案 2 :(得分:0)

你可以随时:

$MAX_CHECKS = 30;

for( $i=1; $i<=$MAX_CHECKS; $i++ )
{
  if( !isset( $_POST['checkbox' . $i] ) )
  {
    $_POST['checkbox' . $i] = '0';
  }
}

但似乎这里可能存在更深层次的问题。你真的想做什么?

答案 3 :(得分:0)

如果您创建表单的方式是复选框前面有一个隐藏字段,其名称与复选框字段相同,并在该隐藏字段中设置值0,那么您无需在PHP中检查它是否已设置或不

这里我举一个例子。

<form name="test" method="POST" action="your_action.php">
    <input type="hidden" name="my_checkbox_1" value="0" />
    <input type="checkbox" name="my_checkbox_1" /><label>One</label>
    <input type="hidden" name="my_checkbox_2" value="0" />  
    <input type="checkbox" name="my_checkbox_2" /><label>Two</label>
    <input type="hidden" name="my_checkbox_3" value="0" />
    <input type="checkbox" name="my_checkbox_3" /><label>Three</label>
    <input type="submit" name="submit" value="OK"/>

在上面的表格中,如果您在不勾选任何复选框的情况下提交,您将获得他们的$ POST ['my_checkbox_x']值被设置为0.但如果您选中其中任何一个,那么它将覆盖之前的隐藏值并且您获得它的$ POST ['my_checkbox_x']值设置为1。

然后您无需为表更新额外检入循环。我认为它比循环检查更快。

由于