烨。这个正在撕毁我。我找到了很多关于这个特定主题的教程,但似乎没有什么对我有用。我一定错过了一些我找不到的东西。
如果表单中存在先前错误,我只是尝试选中复选框。我的验证在所有领域都完全正常,但我需要保留选中的复选框,我无法解决这个问题。
以下是我正在使用的片段:
检查$ 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 =“”是空的!所以在我上面的脚本中它应该回显“”,但那不起作用。
事实上,当我清除缓存并重新加载表单时,只需检查所有框!?
任何人都可以看到我做错了什么。也许我在这里翻过错误的石头..不知道,但是近四个小时,我正在放弃一面白旗。
答案 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" ' : '').'/>';
}