Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Попытка избежать параллейного редактирования записи [2]
Форумы портала PHP.SU » » Работа с СУБД » Попытка избежать параллейного редактирования записи

Страниц (2): « 1 [2]
 

16. LEONeso - 27 Июня, 2011 - 15:01:33 - перейти к сообщению
Мелкий, чем то похоже на механизм данного форума, когда пишешь-пишешь топик и потом отлучаешься, далее возвращаешься и дальше пишешь и при сохранении отправляешь, а тебе пишут, что за этот период времени было добавлено # записей перед вашей? но бывает и другое, пришел, нажал на кнопку "отправить" и те ошибка, которая сбрасывает все введенные тобой данные в форму (возможно из-за параллельного запроса от другого пользователя форума... не знаю).

Мелкий пишет:
Если они различаются - выводим пользователю что-то вроде "запись уже редактировалась, возможно вы захотите изменить что-то ещё", то, что написал он, то, что сохранено в базе.


таким образом:
создаём сессию, записываем дату или md5 даты
1 запрос, чистка get далее, вывод данных, сверка данных сессии = сверка даты+время (или md5), если данные различны, то выводим данные записи таблицы $myrow['keywords'] пользователю и выводим его данные следом $_POST['keywords'], если пользователь хочет внести изменения или же полностью заменить данные, то исполняем его выбор по ссылкам "изменить", "заменить".

изменить - открывается запись, как было до этого с новыми данными (повторный запрос в бд)
заменить - запрос update (есть вероятность, что может быть параллельный запрос... вероятность мала).


Я верно понял? Однако
(Добавление)
Потерял дох мысли!
Куда девать сессию?
Какое время жизни сессии?
Когда её удалить?
Когда её обновлять?
17. Slavenin - 27 Июня, 2011 - 20:29:27 - перейти к сообщению
а если посмотреть в сторону js + ajax и события onload onunload фрейма с картиной, по событию загрузки отправляем запрос на блокировку записи, по второму блокировку снимаем Улыбка
18. DlTA - 28 Июня, 2011 - 01:50:21 - перейти к сообщению
как
по мне со стороны юзера наиболее удобный вариант будет выглядеть следующе:
1) различать открытие записи для просмотра и для редактирования
2) в случае открытия для редактирования, по предложенному варианту в базу заносим время до которого запись будет заблокирована (time + 5 мин)
3) аяксом переодически стучим серверу и говорим что запись все еще редактируется
и смещаем время блокировки
4) по завершении редактирования записи устанавливаем время в настоящее

было бы хорошо рядом со временем хранить еще и сессию юзера, (если у юзера упадет, чета чтоб без проблем мог перегрузить страницу)

ну а для тех у кого нет аякса выдать сообщение (у вас осталось 5-4-3-2-1- времени)))
19. DeepVarvar - 28 Июня, 2011 - 07:43:14 - перейти к сообщению
DlTA пишет:
а для тех у кого нет аякса выдать сообщение
у кого нет аякса, тому и сообщение не вывести...
20. LEONeso - 28 Июня, 2011 - 08:47:57 - перейти к сообщению
DeepVarvar, как и раньше многие программисты использовали фрейм с размером 1х1 пикселов, в нём работал фоновый счетчик php скрипта, который отдавал запрос в бд и плюсовал время блокировки... тут аякс не нужен.

Но уже есть вариант без блокировки с возможностью выбора действий, осталось подумать над работой с сессиями.

DlTA пишет:
ну а для тех у кого нет аякса выдать сообщение (у вас осталось 5-4-3-2-1- времени)))

с точки зрения юзабельности, подталкивая юзера на определенные действия (отсчет времени), мы мешаем ему здраво мыслить - от сюда и возможные ошибки в написании текста, что не должно быть.

Slavenin пишет:
а если посмотреть в сторону js + ajax

топик в форуме php и по этому, мы туда не смотрим Подмигивание
21. DlTA - 28 Июня, 2011 - 10:57:15 - перейти к сообщению
DeepVarvar пишет:
у кого нет аякса, тому и сообщение не вывести...
легко

LEONeso пишет:
с точки зрения юзабельности, подталкивая юзера на определенные действия (отсчет времени), мы мешаем ему здраво мыслить - от сюда и возможные ошибки в написании текста, что не должно быть.
чем то приходится жертвовать, и как по мне уж лучше сообщить сколько осталось времени чем после попытки сохранить узнать что уже нет возможности и т.д., это бесит
а вообще процент пользователей с отключенными скриптами или странными браузерами на територии пост советского пространства очень мал.
22. Slavenin - 28 Июня, 2011 - 18:50:46 - перейти к сообщению
LEONeso пишет:
опик в форуме php и по этому, мы туда не смотрим

это печально, так как решает сразу все проблемы, нажал юзер на картинку, ушла команда в базу, периодическими запросами проверяем отредактировал другой юзер эту картинку или нет, отредактировал - обновляем, не редактировал ничего не длаем. закрыл юзер редактирование, кнопкой закрыть или просто страницу закрыл, в любом слчае сработает событие onunload. опять шлем команду в базу. хотя раз уж нужно непременно на чистом php без интерактивности... смотрите массив $_SESSION я думаю с помощью него можно многого добиться

 

Powered by ExBB FM 1.0 RC1