gpt4 book ai didi

php - 更新选中的复选框数据并删除未选中的数据

转载 作者:行者123 更新时间:2023-11-29 02:57:02 26 4
gpt4 key购买 nike

假设我有 users 数据库,base_u_group 默认值为 0,不属于任何组。

1)base_users|base_u_id|base_u_username|base_u_group|------------------------------------------|    1    |   username 1  |      0     ||    2    |   username 2  |  2, 3, 4   ||    3    |   username 3  |     4      ||    4    |   username 4  |    3,5     |

List down all the users. $checkBox will be automatically checked when belong to that edit group.

echo "<tr>";
echo "<td>". $count .". ".$row_User['base_u_username']. "</td>";
echo "<td align=\"center\"><input type=\"checkbox\" class = \"group\" name=\"userList[]\" value=".$row_User['base_u_id']." ".$checkBox."/></td>";
echo "</tr>";

我的问题是如何不重复地插入选中的复选框数据,例如:
3, 3, 4, 5 --> 3, 4, 5
当复选框未选中时,它将删除我的 base_u_group 中的该组,例如取消选中 group 3username 2 的复选框

2, 3, 4 --> 2, 4


$gid 表示选择的编辑组。这是我到目前为止所做的:

<?php
$userGroup = $_POST['userList'];

foreach($userGroup as $a)
{
$selSQL = base_executeSQL("SELECT * FROM base_users WHERE base_u_id='".$a."'");
while($row_SQL = base_fetch_array($selSQL))
if($row_SQL['base_u_group'] != "0")
{
$data = explode(", ",$row_SQL['base_u_group']);
for($i=0; $i<count($data);$i++)
{
//insert to user group if base_u_group does not find the group ID
if($gid <> $data[$i])
base_executeSQL("UPDATE base_users SET base_u_group='".$gid. ", ". $row_SQL['base_u_group']."' WHERE base_u_id='".$a."'");
}
}
//if the user does not belong to any groups: base_u_group = 0
else
base_executeSQL("UPDATE base_users SET base_u_group='".$gid."' WHERE base_u_id='".$a."'");
}
?>

编辑:删除组

$data = explode(", ",$row_SQL['base_u_group']);
$ok = true;
for($i=0; $i<count($data);$i++)
{
//insert to user group if base_u_group does not find the group ID
if($gid == $data[$i])
{
$arr = array_merge(array_diff($data,array($gid)));
$newArray = implode(", ",$arr);
base_executeSQL("UPDATE base_users SET base_u_group='".$newArray."' WHERE base_u_id!='".$row_SQL['base_u_id']."' AND base_u_domain='local'");
$ok = false;
}
}
if (ok) base_executeSQL("UPDATE base_users SET base_u_group='".$gid. ", ". $row_SQL['base_u_group']."' WHERE base_u_id='".$a."'");

最佳答案

如果您想坚持当前的数据库设计,那么您的方法实际上是最简单的方法。将此逻辑移至 MySQL 将非常困难,并且与您的解决方案相比没有任何优势。似乎您的方法已经处理了您为向用户添加组而发布的所有要求,删除组的逻辑几乎相同。

但是,我强烈建议您更改数据库设计。完全删除 base_u_group 列,并创建一个包含两列 user_idgroup_id 的新表 user_groups。制作一个由两者组成的唯一 key 。现在要添加一个组,只需将 INSERT 插入到该表中,唯一键将防止您将同一组插入两次。从组中删除现在也与从该表中删除一样简单。要获取用户的所有组,只需执行 SELECT group_id FROM user_groups WHERE user_id=$user_id(好吧,通过适当的转义,或通过准备好的语句)。

您还可以将 user_id 设为当前表的外键,这样它就不允许插入无效的 user_id。此外,如果您有一个组表,将 user_groups 中的外键添加到该表也有助于避免无效的组 ID。

编辑:显然我误解了你的部分问题。我以为您已经有了一个可行的解决方案,并且正在寻求一个更好的解决方案。我可以立即在您的解决方案中看到导致重复的问题,它很容易修复,只需对您的代码进行以下更改:

    $data = explode(", ",$row_SQL['base_u_group']);
$ok = true;
for($i=0; $i<count($data);$i++)
{
//insert to user group if base_u_group does not find the group ID
if($gid == $data[$i]) $ok = false;
}
if (ok) base_executeSQL("UPDATE base_users SET base_u_group='".$gid. ", ". $row_SQL['base_u_group']."' WHERE base_u_id='".$a."'");

要了解您的代码为何错误,请考虑如果 $data = {1, 2}$gid2 会发生什么(在这种情况下,您显然不想添加它)。您迭代了 $data 的每个元素,因此在第一次迭代中您的 $data[i]1。由于 1 != 2,您更新了表格并在末尾添加了另一个 2

对于我的更改,我首先遍历 data 的所有元素,并确保它们都不等于 $gid,并且只有在这种情况下我才运行一次查询以在末尾附加 $gid

不幸的是,从您的代码中不清楚您发出了什么样的删除请求,但逻辑是相似的。您将遍历 data 的每个元素,如果其中任何一个元素等于您要删除的内容,则只需将其从 data 中删除并退出循环。然后内爆您的数据并使用UPDATE查询将其存储到数据库中。

关于php - 更新选中的复选框数据并删除未选中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com