несколько пользователей от редактирования одной формы - PullRequest
1 голос
/ 24 марта 2020

У меня есть код php, в котором несколько пользователей могут редактировать форму одновременно, что создает нам проблему, потому что последний, кто сохранил форму, выигрывает гонку, уничтожая других пользователей.

В настоящее время я использую JSON для хранения всей информации, но скоро переключусь на базу данных.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2020

Я считаю, что это временное решение для вас, поскольку вы не хотите делать это в базе данных.

$fp = fopen("lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    ftruncate($fp, 0);      // truncate file
    fwrite($fp, "Write something here\n");
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

ссылка

3 голосов
/ 01 апреля 2020

вы можете заблокировать файл или версию его. Каждый раз, когда вы сохраняете полную версию, она будет сохранена в базе данных с меткой времени и идентификатором пользователя. Установите флаг "live", чтобы вы могли сказать: это версия live для publi sh.

Когда у вас есть эта информация, вы можете сделать git такие функции, как git diff, git, слияния, если существует больше версий. :) 1003

bleib gesund.

1 голос
/ 02 апреля 2020

Вы можете запретить другим редактировать текст, пока это делает первый пользователь (тот, кто вошел первым). Для этого вы можете добавить еще один файл. json, чтобы сохранить последние действия пользователей в порядке их времени входа в систему. Например, предположим, что пользователь один вошел в систему по номеру 1585844170 (значение time()), а через 1 пользователь user2. Таким образом, в настоящее время у нас есть это содержание в действии. json

{
    "user1": 1585844170
    "user2": 1585844171
}

Через простой интервал javascript (используя Ajax) мы можем обновлять это действие, скажем, каждые 1000 мс. В качестве таймаута, когда мы не получаем запрос на обновление в этот раз, скажем, через 5 секунд мы считаем, что пользователь ушел. Поэтому каждый раз, когда пользователь отправляет запрос на обновление времени активности, он получает json, в результате чего он говорит, что он может начать редактирование еще или нет. Например:

{
    "updated": true,
    "editable": false,
    "editingBy": "user1"
}

Таким образом, когда значение editable равно true, мы можем включить ввод (textareas et c) и позволить пользователю начать печатать! Также вы можете показать, кто сейчас редактирует!
Чтобы лучше это понять, допустим, что user1 пропал (никаких обновлений активности для него за последние 5 с), а теперь user2 отправляет запрос активности обновления. В этом случае user1 будет удален, а user2 теперь может редактировать текст.

{
    "user2": 1585844190
}



Примечание

1. Когда вы получите запрос на редактирование текста в вашем файле php, вы также должны проверить, разрешен ли пользователь, или нет (поскольку этот пользователь может редактировать javascript)
2. Вы можете создать функцию для изменения файла активности. json и запускать ее каждый раз при получении запроса от пользователя.

...