MySQL更新和动态多选

时间:2015-07-20 12:29:46

标签: php mysql forms pdo foreach

我的表单有多个选择,其中MySQL表列名称为动态选项。

<select id="rankRights" size="10" class="form-control" name="rights[]" multiple>
    <?php
        $sql = $pdo->query("SELECT * FROM ranks");
        $rights = $sql->fetch(PDO::FETCH_ASSOC);

        foreach($rights as $key => $value) {
            if($key != 'Name' || $key != 'Id') {
                echo "<option value=\"".$key."\""; 
                    if($result[$key] == '1') { 
                        echo " selected"; 
                    } 
                echo "> " . $key . "</option>";
            }
        }
    ?>
</select>

在表格中,用户权限为列,值为1或0(表示真或假,如下所示)。可以有任意数量的列。

.--------------------------------------------------------------------------------.
| Id   | Name       | ADMIN    | ADMIN_EDITUSER   | ADMIN_DELETEUSER   | etc     |
'--------------------------------------------------------------------------------'
| 1    | Admin      | 1        | 1                | 1                  | ...     |
| 2    | Default    | 0        | 0                | 0                  | ...     |
'--------------------------------------------------------------------------------'

如果用户在多个选择中选择了列名,我想要做的是将值更新为1,反之亦然。如何将这些发布到PDO查询..

编辑:因此,如果我提交表单(例如从多个选择中选择ADMINADMIN_EDITUSER),我会获得像{{{{{{ 1}}和rights[]=ADMIN - &gt;在这种情况下,我想将列rights[]=ADMIN_EDITUSERADMIN的值更新为1,和所有其他列(未选择的选项)的值更新为0

我已经阅读了以下问题并思考了一些问题,但我现在还不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以创建一组权限/列名称:

$names = array('ADMIN','ADMIN_EDITUSER',...);

将权限初始化为零:

$permval = array();
foreach ($names as $name)
   $permval[$name] = 0;

浏览已发布的值以设置相关权限:

foreach ($_REQUEST as $key => $value)
{
  if ( isset($permval[$key]) )
    $permval[$key] = $value;
}

这至少为您提供了一个已定义的值列表,您可以使用这些值来绑定一组参数 - 每个权限名称一个。确保权限名称列表和语句准备保持同步。

任何更简单的替代方法可能是动态创建SQL语句,但您可能更喜欢使用PDO。

注意:我没有尝试执行上述任何一项;它可能包含错别字!