MySQL 更新和动态多选

Posted

技术标签:

【中文标题】MySQL 更新和动态多选【英文标题】:MySQL Update and dynamic multiple selection 【发布时间】:2015-10-09 13:54:03 【问题描述】:

我有一个多选表单,它具有 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(表示真或假,示例如下)。可以有任意数量的列。

.------------------------------------------------ -------------------------------------------。 |身份证 |姓名 |管理员 |管理员编辑用户 |管理员删除用户 |等| '---------------------------------------------------- -------------------------------------------' | 1 |管理员 | 1 | 1 | 1 | ... | | 2 |默认 | 0 | 0 | 0 | ... | '---------------------------------------------------- -------------------------------------------'

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

编辑:因此,如果我提交表单(例如从多项选择中选择了 ADMINADMIN_EDITUSER),我将获得像 rights[]=ADMINrights[]=ADMIN_EDITUSER 这样的 POST 参数 - > 在这种情况下,我想将 ADMINADMIN_EDITUSER 列的值更新为 1,所有其他列(未选择的选项)的值更新为 0

我已经阅读了以下问题并思考了一些问题,但我什至现在都不知道该怎么做。

【问题讨论】:

这个问题的信息有点少。能分享一下你尝试过的,遇到了什么问题吗? 取决于你想如何更新你的数据库,你想提交你的表单还是你想更新它,而不刷新你的页面? 你的意思是AJAX结合javascript监听器吗? 使用WHERE 子句。 @PHPhil,我想通过页面刷新正常汇总表单。 Javascript 与此无关。 【参考方案1】:

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

$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。

注意:我没有尝试执行上述任何操作;可能有错别字!

【讨论】:

如何创建列名数组,因为它们的数量不是恒定的?不知何故 foreach? @lingo,提供的数字不是恒定的,但可提供的数字应该是恒定的。将它们全部设置为零...然后用设置的通过 post 请求发回的那些覆盖。

以上是关于MySQL 更新和动态多选的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 更新和动态多选

随机生成一份试卷,试卷的种类分为单选多选判断三种题型。nodejs6.0 mysql

iOS——UITableView单选模式,多选模式,单选多选混合模式

单选多选样式写法

text 过滤django多选多到多多

单选多选