我有一个多对多的表结构和更新复选框表单。
目标是通过用户项目表(users_project table)将用户表(users table)与项目表(projects table)相关联。这样,每个项目可以有多个用户,每个用户也可以参与多个项目。
在每个用户编辑页面上,表单应该是这样的:
<form action="#" method="post">
<div>
<input type="checkbox" name="project_id[]" id="1" value="1">
<label for="1">project 1</label>
<br>
<input type="checkbox" name="project_id[]" id="2" value="2">
<label for="2">project 2</label>
<br>
<input type="hidden" name="editing">
<input type="submit" id="submit" value="submit">
</div>
</form>
以下是三个表的示例。
用户表
+----+-----------+
| id ¦ username ¦
+----+-----------+
| 1 ¦ user 1 ¦
| 2 ¦ user 2 ¦
+----+-----------+
项目表
+----+-----------+
¦ id ¦ title ¦
+----+-----------+
| 1 ¦ project 1 ¦
| 2 ¦ project 2 ¦
+----+-----------+
用户项目表
该表基于其ID将上述两个表相关联
+----+-------------+---------+
| id ¦ project_id ¦ user_id |
+----+-------------+---------+
| 1 ¦ 1 ¦ 2 |
| 2 ¦ 2 ¦ 1 |
+----+-------------+---------+
我已经创建了一个复选框表单来添加和编辑这些值。在每个用户页面上,它显示项目表中的所有项目。然后查询user_projects表格并查找匹配列表以向复选框添加勾选。
但是,如何将这些值编辑到数据库中呢?如果用户取消选中先前选中的框或选中空框,我将如何知道并更新到数据库,而不必为用户表中的project_id和user_id循环查询匹配项?
这是我想要最终实现的大致概念。
if ($_POST['editing']) {
$totalprojects = $_POST['editing'];
$query = "
SELECT *
FROM user_projects
WHERE user_id = user_id
AND project_id = project_id
";
$result = $mysqli->query($query);
$count = $mysqli->affected_rows;
for($i=0; $i < $totalprojects; $i++) {
if ($count == 1) {
if ($box == checked){
//do nothing
}
else {
//delete from database
}
}
if ($count == 0) {
if ($box == checked){
//add to database
}
else {
//do nothing
}
}
}
}
这似乎根本不是一个好主意,因为我至少需要查询项目表中每个项目一次数据库。对于我想象中的常见问题,必须有更好的解决方案。我知道我的思路是错误的。
注意:我考虑过只需将数组序列化并将其放入用户列中,但这是不可接受的,因为我将无法将项目与用户相关联,仅将用户与项目相关联,这将失去目的。
我希望能够在没有任何JavaScript技巧的情况下实现此功能。