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 查询..
编辑:因此,如果我提交表单(例如从多项选择中选择了 ADMIN
和 ADMIN_EDITUSER
),我将获得像 rights[]=ADMIN
和 rights[]=ADMIN_EDITUSER
这样的 POST 参数 - > 在这种情况下,我想将 ADMIN
和 ADMIN_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 更新和动态多选的主要内容,如果未能解决你的问题,请参考以下文章
随机生成一份试卷,试卷的种类分为单选多选判断三种题型。nodejs6.0 mysql