检查无论输入复选框数组中的值=“”(是否为空)

时间:2011-01-17 20:30:53

标签: php mysql arrays input checkbox

烨。这个正在撕毁我。我找到了很多关于这个特定主题的教程,但似乎没有什么对我有用。我一定错过了一些我找不到的东西。

如果表单中存在先前错误,我只是尝试选中复选框。我的验证在所有领域都完全正常,但我需要保留选中的复选框,我无法解决这个问题。

以下是我正在使用的片段:

检查$ data [id] isset()

<input name="seminar[]" type="checkbox" id="seminar[]" 
value="
<?php
if(isset($data['id'])) {
         $checked = "checked=\"checked\"";
      } else {

        echo "";
      }
?>
" <?php echo "$checked"; ?>>

我甚至检查了我的html源代码,这是提交后显示的内容:

<input name="seminar[]" type="checkbox" id="seminar[]" value="" checked="checked"> 

正如你所看到的,value =“”是空的!所以在我上面的脚本中它应该回显“”,但那不起作用。

事实上,当我清除缓存并重新加载表单时,只需检查所有框!?

任何人都可以看到我做错了什么。也许我在这里翻过错误的石头..不知道,但是近四个小时,我正在放弃一面白旗。

1 个答案:

答案 0 :(得分:3)

我发现有些错误可能会导致您的问题。

首先,您已为name复选框分配了seminar[]。这将创建一个数组,其中包含使用该名称的所有复选框中的值。由于您未在[]之间指定密钥,因此它会自动为您执行此操作。您应该自己指定某种键,以便以后可以匹配它们。

示例:

<input type="checkbox" name="seminar[0]" id="seminar_0" value="" />

然后你可以通过这样做来检查它是否已设定:

if(isset($_POST['seminiar'][0])) {
  echo "checked=\"checked\"";
}

其次,您无法将seminar[]用于复选框的ID。看看我上面的例子,你可以选择另一种方法。 ID必须在页面上是唯一的;您不能在一个页面上使用相同的ID两次。

第三,这$data['id']究竟是什么?您应该检查$_POST值以获取项目的确切名称。再看看我的第一个例子。

我会重新格式化你的代码看起来像这样:

$checkboxes = array(0 => "Value 1", 1 => "Value 2", 2 => "Value 3");
foreach($checkboxes as $k => $v) {
  echo '<label for="seminar_'.$k.'">'.$v.'</label><input type="checkbox" name="seminar['.$k.']" id="seminar_'.$k.'" value="'.htmlentities($v).'" '.(isset($_POST['seminar'][$k]) ? 'checked="checked" ' : '').'/>';
}