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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Попытка избежать параллейного редактирования записи [2]
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
Мелкий, чем то похоже на механизм данного форума, когда пишешь-пишешь топик и потом отлучаешься, далее возвращаешься и дальше пишешь и при сохранении отправляешь, а тебе пишут, что за этот период времени было добавлено # записей перед вашей? но бывает и другое, пришел, нажал на кнопку "отправить" и те ошибка, которая сбрасывает все введенные тобой данные в форму (возможно из-за параллельного запроса от другого пользователя форума... не знаю).
Мелкий пишет:
Если они различаются - выводим пользователю что-то вроде "запись уже редактировалась, возможно вы захотите изменить что-то ещё", то, что написал он, то, что сохранено в базе.
таким образом:
создаём сессию, записываем дату или md5 даты 1 запрос, чистка get далее, вывод данных, сверка данных сессии = сверка даты+время (или md5), если данные различны, то выводим данные записи таблицы $myrow['keywords'] пользователю и выводим его данные следом $_POST['keywords'], если пользователь хочет внести изменения или же полностью заменить данные, то исполняем его выбор по ссылкам "изменить", "заменить".
изменить - открывается запись, как было до этого с новыми данными (повторный запрос в бд) заменить - запрос update (есть вероятность, что может быть параллельный запрос... вероятность мала).
Я верно понял? (Добавление) Потерял дох мысли!
Куда девать сессию?
Какое время жизни сессии?
Когда её удалить?
Когда её обновлять?
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
Slavenin
Отправлено: 27 Июня, 2011 - 20:29:27
Посетитель
Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010 Откуда: Тверь
Помог: 4 раз(а)
а если посмотреть в сторону js + ajax и события onload onunload фрейма с картиной, по событию загрузки отправляем запрос на блокировку записи, по второму блокировку снимаем
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
как
по мне со стороны юзера наиболее удобный вариант будет выглядеть следующе:
1) различать открытие записи для просмотра и для редактирования
2) в случае открытия для редактирования, по предложенному варианту в базу заносим время до которого запись будет заблокирована (time + 5 мин)
3) аяксом переодически стучим серверу и говорим что запись все еще редактируется
и смещаем время блокировки
4) по завершении редактирования записи устанавливаем время в настоящее
было бы хорошо рядом со временем хранить еще и сессию юзера, (если у юзера упадет, чета чтоб без проблем мог перегрузить страницу)
ну а для тех у кого нет аякса выдать сообщение (у вас осталось 5-4-3-2-1- времени)))
DeepVarvar
Отправлено: 28 Июня, 2011 - 07:43:14
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
DeepVarvar, как и раньше многие программисты использовали фрейм с размером 1х1 пикселов, в нём работал фоновый счетчик php скрипта, который отдавал запрос в бд и плюсовал время блокировки... тут аякс не нужен.
Но уже есть вариант без блокировки с возможностью выбора действий, осталось подумать над работой с сессиями.
DlTA пишет:
ну а для тех у кого нет аякса выдать сообщение (у вас осталось 5-4-3-2-1- времени)))
с точки зрения юзабельности, подталкивая юзера на определенные действия (отсчет времени), мы мешаем ему здраво мыслить - от сюда и возможные ошибки в написании текста, что не должно быть.
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
DlTA
Отправлено: 28 Июня, 2011 - 10:57:15
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
DeepVarvar пишет:
у кого нет аякса, тому и сообщение не вывести...
легко
LEONeso пишет:
с точки зрения юзабельности, подталкивая юзера на определенные действия (отсчет времени), мы мешаем ему здраво мыслить - от сюда и возможные ошибки в написании текста, что не должно быть.
чем то приходится жертвовать, и как по мне уж лучше сообщить сколько осталось времени чем после попытки сохранить узнать что уже нет возможности и т.д., это бесит
а вообще процент пользователей с отключенными скриптами или странными браузерами на територии пост советского пространства очень мал.
Slavenin
Отправлено: 28 Июня, 2011 - 18:50:46
Посетитель
Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010 Откуда: Тверь
Помог: 4 раз(а)
LEONeso пишет:
опик в форуме php и по этому, мы туда не смотрим
это печально, так как решает сразу все проблемы, нажал юзер на картинку, ушла команда в базу, периодическими запросами проверяем отредактировал другой юзер эту картинку или нет, отредактировал - обновляем, не редактировал ничего не длаем. закрыл юзер редактирование, кнопкой закрыть или просто страницу закрыл, в любом слчае сработает событие onunload. опять шлем команду в базу. хотя раз уж нужно непременно на чистом php без интерактивности... смотрите массив $_SESSION я думаю с помощью него можно многого добиться
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.