【问题标题】:checked no matter if value="" (is empty) in array of input checkboxes检查输入复选框数组中的 value=""(为空)是否
【发布时间】:2011-06-10 16:39:24
【问题描述】:

是的。这个让我心碎。我找到了很多关于这个特定主题的教程,但似乎没有什么对我有用。我一定错过了一些我找不到的东西。

如果表单中存在先前的错误,我只是试图保持选中的复选框处于选中状态。我的验证对所有字段都运行良好,但我需要保留选中的复选框,但我无法解决这个问题。

这是我正在使用的 sn-ps:

这会检查 $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="" 是空的!所以在我上面的脚本中它应该回显 "",但这不起作用。

事实上,当我清除缓存并重新加载表单时,所有框都被选中了!?

谁能看到我做错了什么。也许我在这里翻错了石头.. 不知道,但将近 4 个小时的下水道,我放弃了白旗。

【问题讨论】:

  • php 代码未显示。我想这是一个适度的事情:)
  • 您需要选择PHP并点击{}按钮使其正常显示。
  • 我刚刚修好了。为了显示代码,您只需将其缩进四个空格。
  • @OldWest:我希望它现在已修复并且没有遗漏任何内容。 crimson_penguin 对如何格式化它是正确的。
  • 对不起,什么? PHP 正在做正确的事情。你希望 PHP 输出什么?根据输出,设置 $data['id'] ,然后输出值 "" 并进行检查。

标签: php mysql arrays input checkbox


【解决方案1】:

我发现了一些可能导致您的问题的错误。

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

例子:

<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" ' : '').'/>';
}

【讨论】:

  • 迈克尔,你的评论很有帮助:)。这就是我所做的,现在一切正常: >。 ,但是当我尝试使用(现有代码)插入我的表时,这不再有效: if($seminar) { foreach ($seminar as $s ) $interest .= "$s"; }。知道如何基于 foreach() 处理这个新的数组结构吗?
  • 很高兴能帮上忙。一件事,您不需要在isset($_POST['seminar']["$a"]) 中的$a 周围加上双引号。只需isset($_POST['seminar'][$a])
  • 酷。感谢您添加的提示 :-) .. 我将为我的另一个问题创建一个新线程,因为它是一个不同的主题。
猜你喜欢
  • 2022-12-04
  • 2016-04-19
  • 1970-01-01
  • 2013-03-05
  • 2018-04-18
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多