我有一个带有复选框的表单,用于从mysql中选择数据。如果用户已经这样做,我也希望保持复选框以保持检查状态。除此之外,这些复选框是从mysql select生成的。每个用户根据其权限级别等具有不同的复选框。
所以我得到了这段代码:
<form method="post" id="someselect">
<?php
function checked() {
if (in_array("somestring", $_SESSION['specificvalue'])) {
return "checked";
};
}
$i = 0;
while ($row = $result->fetch_assoc()) {
echo "<input id='specificvalue' type='checkbox' " . checked() . " name='specificvalue[]' value='" . $row['specificvalue'] . "'>" . $row['longvalue'] . "<br>";
};
mysqli_close($con);
//$_SESSION['specificvalue']=implode("','",$specificvalue);
$_SESSION['specificvalue'] = $specificvalue;
?>
<input type="submit" value="Submit">
</p>
</form>
它有效,生成特定于用户的复选框,而function checked()
也适用于exeption that
而不是in_array("somestring", $_SESSION['subunit'])
,我想使用in_array($row['subunit'], $_SESSION['subunit'])
,这根本不起作用。我很乐意了解为什么或想出更好的解决方案。这一点的重点是生成复选框列表,并且已经检查了之前存储在会话变量中的框。
目前,这个有效的代码。如果我有复选框列表,并选中specificvalue
&#34; somestring&#34;框,则会在生成复选框表单时选中所有复选框。
我想我可以使用jquery,但谷歌给了我不同的解决方案,不能用于我的。我也无法手动编写复选框,因为它们共有大约70个,并且它们随时间变化。我希望在更新mysql数据库时让它们自动填充。
答案 0 :(得分:1)
如果要将其与$row['subunit']
一起使用,则无法在函数范围内执行此操作,因为在函数checked()
内无法访问$ row。
为了能够做到这一点,你需要在函数中定义$row['subunit']
的值作为参数。像这样:
function checked($valueToSearch)
{
if (in_array($valueToSearch, $_SESSION['specificvalue']))
return "checked";
}
而且,每次调用支票时都必须从循环中传递它。
while($row = $result->fetch_assoc())
{
echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit'])." name='specificvalue[]' value='". $row['specificvalue'] . "'>" .$row['longvalue']."<br>";
};
希望它会有所帮助。
答案 1 :(得分:1)
您无法在函数中使用in_array($row['subunit'], $_SESSION['subunit'])
的原因是$row['subunit']
在函数范围内不存在,它是由它定义的。当您为特定行调用checked()
函数时,您可以执行的操作是传递复选框的值。那么,那将是:
function checked($value) {
if (in_array($value, $_SESSION['specificvalue'])) {
return "checked";
}
}
电话:
while($row = $result->fetch_assoc())
{
echo "<input id='specificvalue' type='checkbox' ".checked($row['subunit']).
" name='specificvalue[]' value='". $row['specificvalue'] . "'>" .
$row['longvalue']."<br>";
}