【问题标题】:MySQL Update and dynamic multiple selectionMySQL 更新和动态多选
【发布时间】: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 与此无关。

标签: php mysql forms pdo foreach


【解决方案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 请求发回的那些覆盖。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2021-08-05
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多