Параллельные транзакции

morti

Новичок
Параллельные транзакции

Доброе время суток. Вопрос возник такого хакарактера. Есть страница на которой выводитсся содержимое таблицы.

К примеру

Текстовое_поле1.1 Текстовое_поле1.2 Селект1.1
Текстовое_поле2.1 Текстовое_поле2.2 Селект2.1
Текстовое_поле3.1 Текстовое_поле3.2 Селект3.1
Текстовое_поле4.1 Текстовое_поле4.2 Селект4.1

Из таблички разумеется все забирается разбрасывается по соответствующим полям. Каждое объект иммет имя массив

К примеру

Текстовое_поле1.1 name = Имя1[0]
Текстовое_поле2.1 name = Имя1[1]
Текстовое_поле3.1 name = Имя1[2]
Текстовое_поле4.1 name = Имя1[3]

Каждая запись заполняет одну строчку. Тобишь 10 записей в таблице, 10 строчек на экране.

Заходит человек1 начинает работать со страницей, заходит в этот момент, но чуть позже человек2, так же начинает работать со страницей. Человек1 поработал и обновил информацию, все обновилось, но после этого закончил работать Человек2 и тоже послал информацию на обновление, в результате его данные перезаписали информацию Человека1.

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

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

morti

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

.::PhoenikS::.

Новичок
Есть вариант написать на JS обработчик, который просто отрежет при сабмите те поля, которые изменились. Это работает стопроцентно - поле без имени не полетит при сабмите формы
 

Demiurg

Guest
morti
тогда почему бы не проверять, какие поля пользователь изменил, а ккаккие нет и обнавлять только нужные ?

.::phoenikS::.
зачем js? все это делается средствами php
 

morti

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

А в таком случае получается. Пользователь обновил:

Поле 1.1 и Поле 3.2

Что делаем дальше, что шлем на обновление?

Грубо говоря я порублю все что лишние, все то что не обновлялось через javascript. А как действовать с тем что должно обновится?

Так у меня получался стройный массив, который очень просто обработать. А в данном случае... Единственный вариант который мне видется, это все не измененные поля допустим сводить к пустоте... блин а если поле пустое и должно быть? Не прет че то мысль.

Вообщем проблема такая что на обновление я шлю стройнный ряд одномерных массивов

for($i=0;$i<sizeof(Идентификатор_Записи);$i++)
{
Обновить_В_Базе("UPDATE table SET Поле1=Имя1[$i], Поле2=Имя2[$i], Поле3=Имя3[$i] WHERE Идент=Идентификатор[$i]");
}

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

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

Пока что в голове крутится парсер запроса, но че то это дело муторное. Может как нить проще можно сделать. К тому же унифицировано, для большой кучи таблиц.
 

Demiurg

Guest
какой парсер запроса ? ты сам себе усложняешь жизнь. Тебе призодят данные, ты смотришь, какая часть из этих данных действительно обнавилась и составляешь запрос таким образом, что бы обнавлялись только те данные, которые обновились. Яваскрипт тут вобще никаким боком.
 

morti

Новичок
Не блин мне получается каждое поле надо проверить? Следовательно я предварительно проверяю поле которое закидываю такое же оно в базе или нет? Если такое же то не трогаю если нет то меняю. А если полей 20? Одним запросом я че то не догоняю как проверить. А строить для это ннадцать это слишком!
 

baev

‹°°¬•
Команда форума
Можно в форму hidden-поля добавить -- чтоб там первоначальные значения текстовых полей хранились.
Ну и, соответственно, после сабмита добавлять в запрос только те текстовые поля, которые спрятанным не равны.
 

Demiurg

Guest
зачем hidden поля ?
ты одним запросом не можешь взять запись, потом пройтись по полям и сделать сравнение ?
 

baev

‹°°¬•
Команда форума
видимо пока это единственный способ
Ну, не единственный. Можно просто в отдельном массиве "оригинальные" значения хранить и с ними и сравнивать.

Вариант Demiurgа -- не "в кассу". Так как "Человек2" может, например, закончить работу с базой раньше "Человека1". И в базе будут уже изменённые поля (но не затронутые "Человеком1") -- чего с чем тогда будет сравниваться?
 

Demiurg

Guest
baev
согласен, логичнее хранить в сессии
онять туда сюда данные не очень хорошо.
 

morti

Новичок
Ага следовательно выхода пока нету.

>ты одним запросом не можешь взять запись, потом пройтись по полям и сделать сравнение ?

может поздно у нас в солнечной сибири уже :) но не в рубаюсь что то.

просто если 20 полей, то получается 20чка if($Поле==Массив_измененный)

блин многовато получается
 

Demiurg

Guest
morti
20 ифов не надо, можно состаить из названия полей массив и автоматизировать работу.
 

morti

Новичок
ладно тему считаю закрытой, до более конкретно формирования проблемы... мною... ик... :)))
 
Сверху