2017-02-21 47 views
0

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

+0

没有。这个问题上没有包括这个id上的一串包含。会话和所有的变量工作得很好。唯一的问题是如何通过使用while循环生成的每个复选框行正确地保留选中的值 – Gusmar

+0

会话几乎已经开始 – Gusmar

+0

,而不是checked ='checked'我刚刚检查。它似乎工作,但并不完全保持所有选中的复选框 – Gusmar

回答

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>"; 
} 
+0

谢谢。如果我已经有两个while循环,但是这更加整洁。 – Gusmar

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

希望这会有所帮助。