В этом случае я могу предложить добавить другое поле (столбец) в таблицу пользовательских файлов.Это поле может называться «shared_users_id» и должно содержать разделенные запятыми списки идентификаторов общих пользователей.Например:
Таблица: user_files
---------------------------------------
id | user_id | file | shared_users_id |
---------------------------------------
1 |1 |sample.jpg|2,3,4 |
---------------------------------------
Обновление 1:
Когда нажата кнопка доля , выможет сначала сделать запрос AJAX, чтобы список имен пользователей был доступен для shared
<?php
// Select all from users
if(mysqli_num_rows($query) {
echo '<ul>';
while($users_lists = mysqli_fetch_assoc($query)) {
echo '<li data-id="'.$users_lists['id'].'">'.$users_lists['name'].'</li>';
}
echo '</ul>';
}
, каждый список должен содержать идентификаторы общих ресурсов, поэтому, когда участник нажимает на любого пользователя,другой запрос POST
(возможно, с AJAX), который содержит идентификатор общего пользователя, затем извлекает этот идентификатор из блока дескриптора $_POST
и выполняет следующее действие.Для Ex мы сначала предполагаем, что вы получили списки пользователей, когда разделяющий элемент нажимает кнопку Share .
// jQuery
$("#ajaxUserLists li").click(function(e) {
let user_id = $(this).data('id');
$.post( "handle-share.php", {user_id: user_id});
});
<ul id="ajaxUserLists">
<li data-id="1">Vishal Limbachiya</li>
<li data-id="2">Erisan Olasheni</li>
<li data-id="3"></li>
</ul>
И чтобы получить список пользователей, которым предоставлен общий доступ к файлу, вы можете вызвать функцию PHP explode
, чтобы превратить списки в массив,добавить нового пользователя, вы можете сделать array-push
, чтобы удалить общего пользователя, вы можете сделать unset
, затем преобразовать обратно в разделенную запятыми строку с помощью функции implode
и обновить базу данных.
В коде: handle-share.php
<?php
// Check if the AJAX request has been made
if (isset($_POST['user_id']) {
// request made
// assuming that you retrieved the shared users list string into
// $shared_users_id variable
$shared_users_id = $row['shared_users_id'];
// Firstly turn if to array
$shared_users = explode(",",trim($shared_users_id));
// To add shared users
$new_id = $_POST['user_id'];
$shared_users[] = $new_id;
// To remove a shared_user
$user_id_to_remove = $_POST['user_id'];
unset($shared_users[$user_id_to_remove]);
//Convert back to comma separated string and
// save to database
$shared_users_id = implode(",",$shared_users);
// Update the database table
...
}
?>
Обновление 2:
Поиск общих элементовдля текущего пользователя
Чтобы проинформировать пользователя о том, что файл предоставлен ему, было бы лучше создать новую таблицу, которая имеет связь с таблицей user_files
, сохраненные созданные вкладкиПодробно, когда файл предоставлен пользователю в общий доступ, он записывает в поле name, time_shared, sharer_id, shared_user_id, is_seen
, поле is_seen
указывает, видел ли общий пользователь общий файл или нет (для создания файла поделиться системой уведомлений).Но для целей нашей структуры таблиц вы можете выполнить запрос PHP, например:
...
$current_user_id = 4;
$query = mysqli_query($conn, "select user_id, file from user_files where find_in_set($current_user_id,shared_users_id) <> 0");
// number of shared files
$number_of_shared_files = mysqli_num_rows($query);
// list all shared items and sharer_id
while($results = mysqli_fecth_assoc($query) {
echo $results['file'].' '.$results['user_id'];
}
?>