如何检查复选框未在foreach中签入

时间:2015-06-09 12:33:30

标签: php

我有像这样的html复选框:

<form action="" method="post">
     <input type="checkbox" name="language[]" value="php" />PHP<br />
     <input type="checkbox" name="language[]" value="html" />HTML<br />
     <input type="checkbox" name="language[]" value="java" />Java<br />
     <input type="checkbox" name="language[]" value="c++" />C++<br />
     <input type="submit" value="send" />
</form>

现在我想检测未使用此PHP

检查复选框
if($_POST)
{
     if(empty($_POST['language']))
     {
         echo "bla";
     }
     else
     {
         foreach($_POST['language'] as $value)
         {
             echo 'Checked: '.$value.'
         ';
         }
     }
}

输出始终显示已选中的checbox。 我的问题是,如何检测未选中的复选框? 示例我不检查PHP和Java。

3 个答案:

答案 0 :(得分:1)

您不需要通过复选框验证复选框以确定它们是否已被选中,您在发送表单时不会获得未选中的复选框值,因此,发送如下表单:< / p>

<form action="" method="post">
     <input type="checkbox" name="language[]" value="php" />PHP<br /> <!-- checked -->
     <input type="checkbox" name="language[]" value="html" />HTML<br /><!-- checked -->
     <input type="checkbox" name="language[]" value="java" />Java<br /><!-- unchecked -->
     <input type="checkbox" name="language[]" value="c++" />C++<br /><!-- unchecked -->
     <input type="submit" value="send" />
</form>

在PHP中,您将获得如下数组:

$_POST['languages'] = array("php", "html");

现在,假设您有一个包含所有值的数组,以便检查您需要删除哪些值,以及需要添加哪些值,粗略的代码示例如下:

$allValues = array('php', 'html', 'java', 'c++');
$valuesForAdd = $_POST['language'];
$valuesForDeletion = array_diff($allValues, $valuesForAdd);

答案 1 :(得分:0)

只有'已选中'复选框才会在POST请求中作为参数发送。

如果您想知道哪些未经检查,您可以将值列表存储在PHP端;然后,一旦收到POST数据 - 将PHP端的数组与POST数组进行比较。

$all_vals = array('php', 'c++', 'html', 'java');
$post_vals = $_POST['languages'];  

foreach ($post_vals as $post_val)
  if in_array($post_val, $all_vals)
     $checkbox checked
  else
     $checkbox not checked

我认为这给了你足够的自由来做你需要的事。

答案 2 :(得分:0)

首先,你需要后端的可选项数组:

$items = array('php','html','java','c++');

您在此处拥有已发布(已选择)的语言数组:

$_POST['language']

未选择的语言数组:

$not_selected_languages = array_diff($items,$_POST['language']);

我希望它有所帮助。