未选中的html复选框不会POST

时间:2014-07-15 19:19:38

标签: php html post

我从HTML表单发布复选框,并且遇到了一个奇怪的问题。第一个是我在表单顶部有一个默认的选中和禁用框,但它没有包含在POST数据中。第二个是如果我不检查某些内容,则整个数组都会被遗漏。

我怎样才能得到它1)包括我的默认框和2)如果没有选择,则POST一个空数组?

以下是代码:

<form action="file.php" method="POST">
    <label><input type="checkbox" name="options[]" value="username" checked disabled> Username</label><br>
    <label><input type="checkbox" name="options[]" value="title"> Title</label>
    <label><input type="checkbox" name="options[]" value="first"> First Name</label>
    <label><input type="checkbox" name="options[]" value="last"> Last Name</label><br>
    <label><input type="checkbox" name="options[]" value="address"> Address</label>
    <label><input type="checkbox" name="options[]" value="city"> City</label>
    <label><input type="checkbox" name="options[]" value="state"> State</label>
    <label><input type="checkbox" name="options[]" value="zip"> ZIP</label><br>
    <label><input type="checkbox" name="options[]" value="email"> Email</label>
    <label><input type="checkbox" name="options[]" value="phone"> Phone</label><br>
    <input type="submit" value="submit">
</form>

file.php

<?php var_dump($_POST)

2 个答案:

答案 0 :(得分:3)

这是标准HTML的一部分(即不是浏览器)。根据定义,unchecked boxes are never successful。考虑不同的数据结构,或添加类似

的内容
if(isset($_POST['options'])) { 
     //work with options here
}

如果这不起作用,您可以随时添加hidden元素,至少可以获得$_POST

中的值
<input type="hidden" name="options[]" value="NA">

答案 1 :(得分:1)

您也可以在不更改HTML的情况下执行此类操作。只需创建一个包含所有可能复选框值的列表,并与发布的值进行比较。就用户名而言,由于它始终存在,您可以手动将其添加到$_POST数组中。

// Auto insert username to $_POST array (because it's always there by default)
$_POST['options'][] = 'username';

// Create array of all possible checkbox values
$boxes = array('username','title','first','last','address','city','state','zip','email','phone');

// Compare $_POST array to list of possible checkboxes
// and create manual post array
$post_array = array();
foreach ($boxes as $box) {
    $post_array[$box] = in_array($box, $_POST['options']) ? 'checked' : 'NOT checked';
}

输出将是一个数组$post_array,其中包含以下内容:

Array
(
    [username] => checked
    [title] => checked
    [first] => NOT checked
    [last] => NOT checked
    [address] => checked
    [city] => checked
    [state] => NOT checked
    [zip] => NOT checked
    [email] => NOT checked
    [phone] => checked
)