У меня есть структура таблицы «многие ко многим» и обновляются формы флажков.
Цель состоит в том, чтобы связать таблицу пользователей с таблицей проектов с таблицей users_project. Таким образом, может быть много пользователей для одного проекта и много проектов для пользователя.
Форма на каждой странице редактирования пользователя будет выглядеть примерно так
<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 ¦
+----+-----------+
таблица user_projects
эта таблица связывает две вышеуказанные таблицы на основе их идентификатора
+----+-------------+---------+
| 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.