假设我有一个用户选择的复选框列表。
<input type="checkbox" name="utility[]" id="utility[]" value="Water" />Water<br />
<input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br />
<input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br />
etc...
用户选择了Water并将其添加到数据库中。现在用户想要更新列表:
<input type="checkbox" name="utility[]" id="utility[]" value="Water" checked="checked"/>Water<br />
<input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br />
<input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br />
etc...
如何检查该实用程序是否已在PHP中检查过?
答案 0 :(得分:2)
我过去所做的,为了节省数百行臃肿,这就是......
首先编译变量中的所有html,不带任何“已检查”实例。
$boxes = '';
$boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Water" />Water<br />';
$boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br />';
$boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br />';
现在我遍历你的字段数组来检查。我也在这里提供了一个示例数组。
$already_checked = array('Water', 'Electricity');
foreach( $already_checked as $ac ) {
$find = 'value="' . $ac . '"';
$replace = $find . ' checked="checked"';
$boxes = str_replace($find, $replace, $boxes);
}
echo $boxes;
答案 1 :(得分:0)
你可以这样做:
<input type="checkbox" name="utility[]" value="Water"
<?= in_array('Water', $utilities) ? 'checked="checked"' : '' ?>"
/>
(上面的$utilities
变量是$_REQUEST['utilities']
之类的替代品,具体取决于您的代码的结构。)
答案 2 :(得分:0)
喜欢那个?
<input type="checkbox" name="utility[]" id="utility[]" value="Water"
<?php
if(isAlreadyChecked("Water"))
echo "checked=\"checked\""
?>
/>Water<br />
<?php
function isAlreadyChecked(value)
{
//Check if it is already checked and return a boolean
}
?>
答案 3 :(得分:0)
我尝试了in_array
条件的每个变体,并且永远不会让它工作(检查其值已经被选中并因此插入数据库的复选框)。我尝试使用表连接的复杂查询,也没有运气。我终于放弃并生成了一个打开数组的display:hidden
div
(由于一些奇怪的原因我不得不IMPLODE而不是爆炸)并将其项目列为逗号分隔文本。然后我扔了一个小jQuery indexOf()
魔法来确定每个复选框的值是否是所述数组的一部分。用jQuery做了10分钟,非常简单。
以下是一些现场正常运行的示例代码:
<div class="categories">
<span class="keywords"><?php $categories = array(); $categories = implode(', ', $keywords); echo $categories ?></span>
<em>Please verify category selections with each update.</em><br/>
<?php
include 'db.php';
$sql = mysqli_query($con,"SELECT * FROM categoriesTable ORDER BY Category_Name ASC");
while ($row = mysqli_fetch_assoc($sql))
{
$key = urldecode($row['Category_Name']);
$id = urlencode($row['catID']);
echo "<input type='checkbox' name='Category_Key[]' value='$id' id='cat_$id' $chk> $key<br/>";
}
?>
</div>
CSS将div设置为不可见:
.keywords { display:none; visibility:hidden; }
和jQuery部分:
$(document).ready(function() {
$('.categories input').each(function(index,data) {
var str=$('.keywords').text();
var catid = $(this).val();
var chk = str.indexOf(catid);
if (chk >= 0) {
$(this).prop('checked', true);
}
});
});
我希望这可以帮助那些不知道为什么in_array
条件失败的人。由于这涉及数据和UI之间关于数据持久性的曙光区域,我认为这是一条合法的途径。你有一个“echo”语句来生成多个复选框(在我的情况下大约有40个类别)然后是一个简单的jQuery .each()
来定位之前选择的内容并将其对应的框渲染为已选中。