我有一个包含多个复选框的表单,我想将其放入数组中。我按照此处提供的示例进行操作:http://www.kavoir.com/2009/01/php-checkbox-array-in-form-handling-multiple-checkbox-values-in-an-array.html
所以我准备好了文件:
checkboxes.php:
<form action="checkboxes2.php" method="post">
<input type="checkbox" name="tags[]" value="1" />1<br>
<input type="checkbox" name="tags[]" value="2" />2<br>
<input type="checkbox" name="tags[]" value="3" />3<br>
<input type="checkbox" name="tags[]" value="4" />4<br>
<input type="submit" value="Send" />
</form>
checkboxes2.php:
<?php
print_r($_POST["tags"]);
?>
非常简单......我意识到我应该只获取这些文本框的值,而不是它们是否被选中。但我仍然得到这个错误:
Undefined index: tags in checkboxes2.php on line 2
我完全不知道我在这里做错了什么。我通过上面的链接中的示例并完成了一切完全相同(主要是复制/粘贴和更改某些部分,如添加提交按钮)但我没有得到输出,如示例中所示。我应该至少得到每个复选框的值,对吗?
我想做什么:我想查看复选框数组,看看哪些已被选中,并在第二个数组中添加“是”或“否”,如下所示:
<?php
$number1 = $_POST["tags"];
$number2 = array();
foreach($number1 as $number1_output)
{
if(isset($number1_output))
{
$number2[] = "yes";
}
else
{
$number2[] = "no";
}
}
print_r($number2);
?>
嗯......它只有一半有效。只有已选中的复选框才会添加到数组中。所以,如果我选择“3”和“4”,我会得到这个:
Array ( [0] => yes [1] => yes )
处理数组中的复选框并验证它们的最佳方法是什么?
答案 0 :(得分:4)
在表单提交时未选中的复选框不发送任何内容。这意味着如果选中了tags
个tags
个复选框,则$ _POST数组中将没有<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['tags'])) {
print_r($_POST['tags']);
}
}
?>
属性。
因此,您的代码应该是
yes
第一行验证POST实际发生了,第二行验证实际上有任何数据要转出。
对于你的其余代码,isset是没有意义的......因为如果选中了一个复选框只存在于POST数据中,那么在你的foreach循环中执行isset()是没有意义的 - 那就是如果没有复选框,那就没事了,所以根据定义,foreach中的所有内容都是isset()== true。
因此,您的foreach循环只会生成no
个值,而不会生成<input type="checkbox" name="tags[1]" value="1" />
<input type="checkbox" name="tags[2]" value="2" />
etc...
。
更好的解决方法是在表单中指定数组键:
<?php
if (b blah blah blah verify post stuff) {
for ($i = 1; $i <= $max_tags_allowed; $i++) {
if (isset($_POST['tags'][$i])) {
$message2[] = 'yes';
} else {
$message2[] = 'no';
}
}
}
然后
{{1}}
答案 1 :(得分:2)
或者,如果您希望复选框在未选中时也发送值,则可以在复选框之前添加隐藏输入字段:
<input type="hidden" name="tag[1]" value="off" />
<input type="checkbox" name="tag[1]" value="on />
因为复选框仅在设置时发送,但它会覆盖隐藏在HTML后面的隐藏,现在您将始终将tag[1]
设置为“关闭”或“打开”,具体取决于是否是否检查了盒子。
答案 2 :(得分:0)
首先创建一个包含所有可能键的“no”的数组,如下所示:
$no = array(0 => "no", 1 => "no"); // or array("no", "no");
然后你可以得到你想要的数组:
$checkValues = array_flip($_POST["tags"]) + $no;
这样,$ _POST [“tags”]中的值将成为键,+运算符合并保留键的两个数组,如果它们存在于第一个数组中,也会省略第二个数组中的值。这样你就可以这样检查:
$fourthChecked = $checkValues[4] !== "no";
我认为它比其他答案简单得多。祝你好运!
答案 3 :(得分:0)
在checkboxes.php中:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>My form</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" languaje="javascript">
$(document).ready(function() {
$('.checkbox').click(function(){
var values="";
$('.checkbox:checked').each(function(index) {
values+=$(this).val();
$('#tagsVal').val(values);
});
});
});
</script>
</head>
<body>
<form action="checkboxes2.php" method="post">
<input type="checkbox" name="tags1" value="1" class="checkbox"/>1<br><!--Notice the class="checkbox" attribute is important for the jquery function-->
<input type="checkbox" name="tags2" value="2" class="checkbox"/>2<br>
<input type="checkbox" name="tags3" value="3" class="checkbox"/>3<br>
<input type="checkbox" name="tags4" value="4" class="checkbox"/>4<br>
<input type="hidden" name="tagsVal" id="tagsVal" value="" />
<input type="submit" value="Send" />
</form>
</body>
</html>
那么你将在你的$ _POST ['tagVal']中获得你的价值。如果选中复选框1,3和4,您将获得一个字符串134。 在checkboxes2.php中,如果需要,您只需将字符串拆分为数组。
$arr1 = str_split($_POST['tagVal']);
此致 路易斯