0

我在使用复选框时遇到问题。我正在做的是显示一个复选框列表,如果之前选中它们将显示复选标记,然后你提交它们,另一个 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>";  }

在我的行动 php 我有

$chks = $_POST['checks'];
 $N = count($chks);
 echo("Active checkboxes ");
 for($i=0; $i < $N; $i++)
 {
      echo($chks[$i] . " ");}

所有这一切都运作良好,直到我决定显示这些框之前是否已被选中。所以我想问题是,为什么 php 不能将 checked=checked 识别为真值?或者有没有其他方法可以做到这一点?谢谢!

4

2 回答 2

0

这里似乎有很多问题。

  • 为什么要为每个复选框输出一个表单?
  • 您在哪里提交表单?
  • checked='checked'你需要在你回声的地方前面有一个空间-echo " checked='checked'>"
  • 如果将表单输出移出循环,则还需要将增量值添加到隐藏的输入名称属性(或将其设置为类似 的数组checks,否则您将只能获得该字段的一个值。
于 2012-11-02T19:26:06.630 回答
0

我尝试尝试清理一下。

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

请注意,就像 Mike 之前所说的,checked='checked' 之前有空格,因此组件之间存在分隔。此外,您的隐藏元素都具有相同的名称,因此我添加了 $ind 量词。

希望这可以帮助。

于 2012-11-02T19:36:43.420 回答