Forms php中未定义的默认复选框

Forms php中未定义的默认复选框,forms,checkbox,checked,php,Forms,Checkbox,Checked,Php,我在复选框方面遇到了问题。我正在做的是显示一个复选框列表,如果之前选中了,它们将显示复选标记,然后提交它们,另一个php应该识别哪些已选中,哪些未选中。我的脚本适用于之前未选中的框,如果您选中它们,php会识别它,但是对于已选中的框,我会收到框的通知-未定义变量(即使再次选中/未选中)。我似乎真的找不到解决这个问题的方法 我的代码是 $ind=0; //counting variable //generating checkboxes from an xml foreach($xml as $c

我在复选框方面遇到了问题。我正在做的是显示一个复选框列表,如果之前选中了,它们将显示复选标记,然后提交它们,另一个php应该识别哪些已选中,哪些未选中。我的脚本适用于之前未选中的框,如果您选中它们,php会识别它,但是对于已选中的框,我会收到框的通知-未定义变量(即使再次选中/未选中)。我似乎真的找不到解决这个问题的方法

我的代码是

$ind=0; //counting variable
//generating checkboxes from an xml
foreach($xml as $checkbox) 

{     
  $checks=$xml->checkbox[$ind]->active; //the active tag has a 0 or 1 stored.

echo "Activate ".$ind; // shows activate 0, activate 1, etc...

echo "<form name='checkb' action='show.php' method='post'>
  echo "<input type='checkbox' name='checks[]' class='act' value='".$ind."'";
  if($checks==0){ echo ">";} else{echo " checked ='checked'>";}
  echo "<input type='hidden' name='ind' value=".$ind.">"; 
$ind=$ind+1;
echo "<input type='submit' name='sub' value='Submit'/> </form>";  }
$ind=0//计数变量
//从xml生成复选框
foreach($xml作为$checkbox)
{     
$checks=$xml->checkbox[$ind]->active;//活动标记存储了0或1。
回显“激活”。$ind;//显示激活0、激活1等。。。
回声“
echo“”;}否则{echo“checked='checked'>”;}
回声“;
$ind=$ind+1;
回声“;}
关于我的行动,我有

$chks = $_POST['checks'];
 $N = count($chks);
 echo("Active checkboxes ");
 for($i=0; $i < $N; $i++)
 {
      echo($chks[$i] . " ");}
$chks=$\u POST['checks'];
$N=计数($chks);
echo(“活动复选框”);
对于($i=0;$i<$N;$i++)
{
echo($chks[$i]。“”);}
所有这些都很有效,直到我决定显示这些框之前是否被选中。所以我想问题是,为什么php不能将checked=checked识别为真值?或者还有其他方法可以做到这一点吗?
谢谢!

这里似乎有很多问题

  • 为什么要为每个复选框输出表单
  • 你的申请表在哪里
  • 您需要在
    checked='checked'
    的前面留一个空格,以便将其回显出来-
    echo“checked='checked'>”
  • 如果将表单输出移出循环,则还需要将递增的值添加到hidden input name属性(或将其设置为类似于
    checks
    的数组),否则将 仅获取字段的一个值

    • 我试图把它清理干净一点

      $ind = 0;
      echo "<form name='checkb' action='show.php' method='post'>";
      foreach($xml as $checkbox){
          echo "Activate $ind";
          echo "<input type='checkbox' name='checks[]' class='act' value='$ind' ".(($checks == 0) ? " />" : " checked='checked' />";
          echo "<input type='hidden' name='ind_$ind' value='$ind' />";
          $ind++
      }
      echo "</form>";
      
      $ind=0;
      回声“;
      foreach($xml作为$checkbox){
      回显“激活$ind”;
      echo“”:“checked='checked'/>”;
      回声“;
      $ind++
      }
      回声“;
      
      请注意,正如Mike之前所说,checked='checked'前面有空格,因此组件之间有分隔。此外,您隐藏的元素都有相同的名称,因此我添加了$ind量词


      希望这能有所帮助。

      XML不见了。根据您的描述,它不在这里。您确实意识到这段代码在每个复选框中循环,每次都使用相同的名称创建一个新表单。您是否尝试查看生成的HTML?@hakre,我没有包含XML,不认为有必要,因为这部分代码似乎有效,maybe我应该包括它吗?@jjs9534,是的,但是名称是一个数组,所以我认为这不是问题。echo($chks[$I]);在我尝试使用checked=checked部分之前识别出选中框的数量,但仍然识别,但仅限于以前未选中的框。谢谢,我刚刚添加了提交部分并添加了空格。我之所以输出各种表单,是因为每个表单都包含更多信息,我希望动作php返回增量特定于该表单的数字。为了简化问题,我决定不显示所有表单代码(因为其他一切都可以正常工作,直到我添加了checked=checked部分)。我才意识到我的代码复制错误,在foreach外部,而不是内部!谢谢