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]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: логика
LEONeso
Отправлено: 27 Июня, 2011 - 15:01:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




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

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


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

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


Я верно понял? Однако
(Добавление)
Потерял дох мысли!
Куда девать сессию?
Какое время жизни сессии?
Когда её удалить?
Когда её обновлять?


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Slavenin
Отправлено: 27 Июня, 2011 - 20:29:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




а если посмотреть в сторону js + ajax и события onload onunload фрейма с картиной, по событию загрузки отправляем запрос на блокировку записи, по второму блокировку снимаем Улыбка
 
 Top
DlTA
Отправлено: 28 Июня, 2011 - 01:50:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




как
по мне со стороны юзера наиболее удобный вариант будет выглядеть следующе:
1) различать открытие записи для просмотра и для редактирования
2) в случае открытия для редактирования, по предложенному варианту в базу заносим время до которого запись будет заблокирована (time + 5 мин)
3) аяксом переодически стучим серверу и говорим что запись все еще редактируется
и смещаем время блокировки
4) по завершении редактирования записи устанавливаем время в настоящее

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

ну а для тех у кого нет аякса выдать сообщение (у вас осталось 5-4-3-2-1- времени)))
 
 Top
DeepVarvar Супермодератор
Отправлено: 28 Июня, 2011 - 07:43:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DlTA пишет:
а для тех у кого нет аякса выдать сообщение
у кого нет аякса, тому и сообщение не вывести...
 
 Top
LEONeso
Отправлено: 28 Июня, 2011 - 08:47:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




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

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

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

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

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

топик в форуме php и по этому, мы туда не смотрим Подмигивание

(Отредактировано автором: 28 Июня, 2011 - 08:48:33)



-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
DlTA
Отправлено: 28 Июня, 2011 - 10:57:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




DeepVarvar пишет:
у кого нет аякса, тому и сообщение не вывести...
легко

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



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




LEONeso пишет:
опик в форуме php и по этому, мы туда не смотрим

это печально, так как решает сразу все проблемы, нажал юзер на картинку, ушла команда в базу, периодическими запросами проверяем отредактировал другой юзер эту картинку или нет, отредактировал - обновляем, не редактировал ничего не длаем. закрыл юзер редактирование, кнопкой закрыть или просто страницу закрыл, в любом слчае сработает событие onunload. опять шлем команду в базу. хотя раз уж нужно непременно на чистом php без интерактивности... смотрите массив $_SESSION я думаю с помощью него можно многого добиться
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB