Php 取消选中时使复选框返回false
我有一张表格,看起来像:Php 取消选中时使复选框返回false,php,html,checkbox,Php,Html,Checkbox,我有一张表格,看起来像: <form> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checked[(unique_id)]"> <input type"checkbox" name="checke
<form>
<input type"checkbox" name="checked[(unique_id)]">
<input type"checkbox" name="checked[(unique_id)]">
<input type"checkbox" name="checked[(unique_id)]">
<input type"checkbox" name="checked[(unique_id)]">
</form>
复选框的数量会不时变化,因此当使用PHP处理这些数据时,我必须循环\u POST['checked']
数组
我的问题是,我想在选中复选框和不选中复选框时都采取行动。但是只有选中的复选框才会添加到\u POST['checked']
数组。将value=“true”
添加到每个复选框输入元素。
并将PHP代码更改为:
$checked_arr = [];
foreach($_POST["checked"] as $checked){
if($checked == "true"){
// do what you want to do
}
}
它将发送两个选项,但如果选中复选框,它将覆盖第一个选项
但它不是100%可靠,它将向服务器发送更多数据
阅读更多关于这方面的文章
因此,如果您想使用没有js的简单解决方案,请使用“仅限html”
如果您想要100%可靠的解决方案,请使用“js”以下是我以前见过的一种技术:
<input type="hidden" name="check" value="false">
<input type="checkbox" name="check" value="true">
这样做的原因是,当具有相同名称的值被多次发送时,只接受最后一个值
在我看来,更好的方法是简单地使用
isset($\u POST['…')
或在数组中($\u POST['…'))
另一种解决方案是服务器端解决方案,我认为它太快太简单了
客户端:
只需使用新鲜的HTML:
<input type="checkbox" name="checked1" value="value_checked" ... />
然后,在您想要读取一些您不知道是否设置了的值的地方使用。
像这样:
function getVal(&$var, $default = '') {
if (!isset($var) || empty($var) || is_null($var))
$var = $default;
return $var;
}
$checked_value = getVal($_POST["checked1"],false);
或
我希望对另一个有用。你不能使用html,所以你有2个选项1使用javascript,2使用下拉列表而不是复选框为什么不把它添加到你的php中:$checked=isset(_POST['checked'])&&&u POST['checked']=1@robert我也很怀疑,在这种情况下,下拉列表不是一种替代方案,但我更愿意接受基于JS的解决方案。我将如何使用JS来进行此操作?(我对JS的经验非常有限)如果我错了,请纠正我,但是
$\u POST[“checked”]
是否仍然包含复选框?非常感谢,这个问题困扰了我好几天,我甚至理解了你在那里做的事情:Phahaha:D非常欢迎你,我很高兴你理解这一点,你必须学习js和jquery,这对web开发非常重要我的回答不需要JavaScript你不应该使用prop
作为复选框吗?而且key=“”
不是有效的HTML。为此,您应该使用data key=“”
和$(this).data('key')
。+1这是一个很好的解决方案,但有一个问题是此解决方案不可靠,因为某些浏览器可能会发送第一个value@robert你有关于哪些浏览器发送第一个值的数据吗?我不知道是否有一些浏览器这样做,但举例来说,当我使用@robert提交按钮时,我遇到了一个问题。提交按钮的处理方式不同。但据我所知,这是一个安全的解决方案,除非有人能证明不是这样。我认为它比那些使用JavaScript的用户支持更多的用户
function getVal(&$var, $default = '') {
if (!isset($var) || empty($var) || is_null($var))
$var = $default;
return $var;
}
$checked_value = getVal($_POST["checked1"],false);
$checked_value = getVal($_POST["checked1"],"value_not_checked");