Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 取消选中时使复选框返回false_Php_Html_Checkbox - Fatal编程技术网

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");