通过会话变量检查更改复选框

时间:2017-02-21 12:08:29

标签: php jquery mysql session checkbox

我有一个带有复选框的表单,用于从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数据库时让它们自动填充。

2 个答案:

答案 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>";
}