我从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)
答案 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
)