【问题标题】:change checkbox checked via session variable更改通过会话变量检查的复选框
【发布时间】:2017-07-11 01:17:23
【问题描述】:

我有一个带有复选框的表单,用于从 mysql 中选择数据。如果用户这样做,我还希望复选框保持选中状态。除此之外,这些复选框是从 mysql 选择生成的。每个用户根据他们的权限级别等有不同的复选框。

所以我得到了这段代码:

<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“somestring”的框,则生成复选框表单时将选中所有复选框。

我想我可以使用 jquery 来解决这个问题,但谷歌给了我不同类型的解决方案,这些解决方案不能用于我的。我也无法手动编写复选框,因为它们总共有大约 70 个,并且它们随时间变化。我希望在更新 mysql 数据库时自动填充它们。

【问题讨论】:

  • 没有。有很多包含在这个问题中没有包含在这个问题中。会话和所有变量都可以正常工作。唯一的问题是如何通过使用 while 循环生成的每个复选框行正确保留检查的值
  • 会话已经开始
  • 几乎,而不是checked = 'checked' 我只是检查了。它似乎有效,但并没有完全选中所有复选框
  • 我想通了。起初它向我显示了 post 的值,第二次显示了 session 变量的值。无论如何,我认为这为我指明了正确的方向,所以谢谢
  • niceone,有人提出了一些建议,然后将其删除。现在我在自言自语

标签: php jquery mysql session checkbox


【解决方案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>";
}

【讨论】:

  • 谢谢。我已经有两个带有 if 的 while 循环,但这更简洁。
【解决方案2】:

如果您想将它与$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>";
};

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多