我正在尝试复制此搜索,该搜索与Select输入相同,但每个select选项均带有一个CheckBox,但它不起作用。实际上,它可以与select一起使用
<select required id="brand" name="brand" class="sm-form-control">
<option disabled value="">-- Brand--</option>
<?php
while($row= mysql_fetch_array($consult_brands)) {
echo "<option value='".$row["value"]."'>".$row["brand"]."</option>"; }
?>
</select>
您能在复选框中为我提供正确的方法吗?这个想法是,对于我在SQL中拥有的每个品牌,它都会创建一个带有值和品牌名称的复选框。
感谢您的帮助。
答案 0 :(得分:0)
<label for="Coke">Coke</label>
<input id="Coke" type="checkbox" name="brands[]" value="Coke">
<label for="Pepsi">Pepsi</label>
<input id="Pepsi" type="checkbox" name="brands[]" value="Pepsi">
<label for="Slice">Slice</label>
<input id="Slice" type="checkbox" name="brands[]" value="Slice">
<label for="Sprite">Sprite</label>
<input id="Sprite" type="checkbox" name="brands[]" value="Sprite">
在我的脑海中,您可以使用name
属性的数组语法将所有品牌收集到一个数组元素中。因此,您的服务器端代码($_POST
,filter_input_array(INPUT_POST ...)
)将必须处理多维数组。
在PHP中动态执行一堆复选框的关键是设计服务器端代码以跟踪每个复选框的checked
状态。这还要求您了解提交表单时未选中的复选框是不成功的(即,它们不提供超全局元素或超全局数组中的元素)。
此外,出于可访问性的原因,您需要考虑如何管理<label>
。因此,可能需要考虑使用带有<select>
属性的multiple
控件,因为这样您就只需要处理一个标签即可。
<?php
$brands = ['Coke', 'Pepsi', 'Slice', 'Sprite'];
$checkboxes = [];
foreach ($brands as $key => $brand) {
$checkboxes[] = '<label for="' . $brand . '">' . $brand . '</label><input id="' . $brand . '" type="checkbox" name="brands[]" value="' . $brand . '">"';
}
$checkboxes = implode("\n", $checkboxes);
?>
<form action="/search.php" method="post">
<?= $checkboxes; ?>
<input type="submit" value="Search">
</form>
缺少这是checked
属性的一个地方,可增强表单的粘性。
只需将处理逻辑添加到表单处理程序中,并跟踪选择了哪些品牌。然后,按如下所示运行循环逻辑。
<?php
function isChecked($name, array $checkableControls)
{
if (in_array($name, $checkableControls)) {
return ' checked="checked" ';
}
return '';
}
$brands = ['Coke', 'Pepsi', 'Slice', 'Sprite']; // From database
// $submitted = $_POST['brands'];
$submitted = ['Coke', 'Slice']; // From the user during HTTP POST request
$brandResults = search($submitted);
$htmlBrandRecords = formatResults($brandResults);
$checkboxes = [];
foreach ($brands as $key => $brand) {
$checkboxes[] = '<label for="' . $brand . '">' . $brand . '</label><input id="' . $brand . '" type="checkbox" name="brands[]" . isChecked($brand, $submitted) . value="' . $brand . '">';
}
$checkboxes = implode("\n", $checkboxes);
?>
<section id="search">
<form action="/search.php" method="post">
<?= $checkboxes; ?>
<input type="submit" value="Search">
</form>
<div id="records">
<?= $htmlBrandRecords; ?>
<!-- Place your results here via PHP. -->
<!-- Alternatively, send JSON to the user-agent. -->
</div>
<section>
disabled
,class
)的状态,从而允许您通过禁用/启用控件来操纵表单,或者通过添加或删除来显示或隐藏表单元素来自class
属性的CSS类。答案 1 :(得分:-1)
您可以使用以下解决方案:
while($row= mysqli_fetch_assoc($result)) {
echo "<input type='checkbox' name='brands[]' value='".$row["value"]."'>".$row["brand"]."<br>";
}