[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Блокировка таблиц
demoniqus
Подскажите подробно, как сделать следующее:
php-скрипт (например GetData.php) берет некоторые данные из таблицы mysql (например Table1) (MyISAM), затем формирует код страницы и отправляет пользователю. Пользователь вносит необходимые изменения и дает команду на сохранение (например скрипт ChangeData.php). Необходимо заблокировать таблицу (лучше бы строку), чтобы никто посторонний не мог внести изменения между этими двумя действиями, тем более, что разница во времени может достигать минут. Пытаюсь разобраться с блокировкой, но что-то как-то не получается... и таблица вроде нифига не блокируется и не знаю, как передать идентификатор из GetData.php в ChangeData.php, чтобы этот скрипт имел право внести изменения, а затем снять блокировку...
Можно было бы в таблицы добавить лишний столбец и пихать туда уникальный самопальный идентификатор, по которому давать право на выполнение тех или иных операций разным пользователям (к примеру, если идентификатор пользователя совпадает с записанным, то давать право на чтение и запись, в противном случае только на чтение)... но если пользователь просто закроет страницу без выполнения всей цепочки до конца, то к записи больше никто не получит доступа на запись...



Спустя 1 час, 54 минуты, 18 секунд (21.04.2011 - 15:16) alex12060 написал(а):
Создаете параллельный запрос к запросу СЕЛКТа, который будет обновлять поле с 1 на 0.
Пример:

Структура таблицы mytable


+------+-------+----------+-------+
| id | text | editor | use |
+----+------+-------------+-------+
| 1 | asa | tester | 1 |
+------+-------+----------+-------+

Где use это доступность поля на редактирование.


SELECT `text`
FROM `mytable`
WHERE `use` = 1;


То и получится, если условие не прокатывает, то нельзя будет редактировать и смело можно выводить ошибку. Ну и при сохранении, обновлять на 0.

Спустя 32 минуты, 22 секунды (21.04.2011 - 15:48) demoniqus написал(а):
Если б все так просто было... а вот если пользователь по какой-либо причине отвалился (сам закрыл страницу или disconnect случился)? Больше никто не получит права на запись - это надо тогда писать скрипт, который будет периодически пробегаться по таблице и проверять, доступен ли еще блокировавший процесс (пользователь), а я не уверен, что такое возможно, да и не знаю, как такое реализовать.

Спустя 7 минут, 5 секунд (21.04.2011 - 15:55) alex12060 написал(а):
мм...сессии в помощь. А вообще, есть такие вещи, как черновики. Это как онлайн, если пользователь не редактировал запись в течении N минут, автоматом открывать запись.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.