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 :: проблема с записью в БД

 PHP.SU

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


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

> Без описания
san4es
Отправлено: 25 Июня, 2008 - 13:35:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 201
Дата рег-ции: Март 2008  
Откуда: СПб, Ломоносов


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




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

(Отредактировано автором: 25 Июня, 2008 - 13:38:48)

 
 Top
valenok Модератор
Отправлено: 25 Июня, 2008 - 13:41:31
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Не может быть.
Можете поставить usleep перед записью в базу


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 25 Июня, 2008 - 13:46:00
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Скорее всего, одну из записей клиент ввел криво, а вторая не прошла по тем или иным причинам (он долго ковырял в носу/был сбой соединений/была ошибка в скрипте и прочее)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
san4es
Отправлено: 25 Июня, 2008 - 14:22:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 201
Дата рег-ции: Март 2008  
Откуда: СПб, Ломоносов


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




факт есть факт. данные проходят проверку до записи. всё было введено правильно.

есть ещё один вопрос. некоторые записи дублируются. что это может быть? возможно ли такое, что пользователь нажал на кнопку один раз. выполнение проходит долго, он нажал ещё раз. и вот таким образом получилось как-бы два параллельных запроса на запись

(Отредактировано автором: 25 Июня, 2008 - 14:33:50)

 
 Top
valenok Модератор
Отправлено: 25 Июня, 2008 - 14:46:06
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Может быть конечно.
Да даже и не паралельных, а просто так дважды нажал отправить


-----
Truly yours, Sasha.
 
My status
 Top
san4es
Отправлено: 27 Июня, 2008 - 13:06:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 201
Дата рег-ции: Март 2008  
Откуда: СПб, Ломоносов


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




продолжим по поводу дублирования записей...
стоит проверка перед записью чтобы дважды одни и теже данные не записывались.
поставил скрипт на onSubmit чтоб кнопка пропадала. и всё равно появляются двойные записи. мы провели эксперимент - с двух компов делали одну и туже запись примерно в одно время. итог - запись продублировалась. но клиент клянётся что он работал один! сколько я не старался, у меня не получалось получить такой результат.

(Отредактировано автором: 27 Июня, 2008 - 13:23:36)

 
 Top
SergeantPEPPER
Отправлено: 27 Июня, 2008 - 14:22:12
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


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




У Вас механизм работы следующий:
1) какие-то данные присылаются на обработку скрипту.
2) скрипт проверяет ситаксическую правильность присланных на вход данных
3.1) если данные неправильны, процесс прекращается
3.2) если правильны, процесс продолжается
4) скрипт проверяет не находятся ли уже в бд присланные данные
5.1) если уже есть, процесс прекращается
5.2) если нет, процесс продолжается
6) произодится запись данных в базу

Допустим Вы отсылаете данные с двух разных компов одинаковые данные почти одновременно. Тогда описанный Вами косяк может теоретически произойти только в том случае, если данные 1 прошли пункт 4), но еще не дошли до 6), а данные 2 в этот момент проходят через пункт 4) и соответственно получают информацию, которая станет через некоторое время ложной...

Однако - это только теоретически... Если, конечно, в Вашем скрипте между пунктом 4) и 6) не стоит какая-нибудь ОЧЕНЬ ресурсоемкая операция. Однако почти у всех и всегда они располагаются практически друг за другом Улыбка
Критический промежуток времени будет ну ОЧЕНЬ маленьким. И не важно какие данные были присланы и сколько раз пользователь нажал кнопку Отправить.

Поэтому я бы все-таки еще раз проверил бы пункты 4) 5) и 6)...
 
 Top
valenok Модератор
Отправлено: 27 Июня, 2008 - 16:33:51
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Проверка кривая, больше ничего быть не может.
Тем более ты же не дуамешь что ты и второй эксперементатор действительно оба отправили прям в ту же милимекунду данные, так что такие эксперемнты абсолютно лишены логики.
И ещё у mysql есть механизм позволяющий застроховать от дублированных записей.
Для этого существует так называемый unique ключ.


-----
Truly yours, Sasha.
 
My status
 Top
san4es
Отправлено: 30 Июня, 2008 - 15:04:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 201
Дата рег-ции: Март 2008  
Откуда: СПб, Ломоносов


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




valenok пишет:
Проверка кривая, больше ничего быть не может.
Тем более ты же не дуамешь что ты и второй эксперементатор действительно оба отправили прям в ту же милимекунду данные, так что такие эксперемнты абсолютно лишены логики.
И ещё у mysql есть механизм позволяющий застроховать от дублированных записей.
Для этого существует так называемый unique ключ.

эксперимент проводили с разничей в секунд 10-15. запрос на запись идёт, в лучшем случае, днём когда все работают с БД, 20-40 секунд (бывает и больше).
субд не mysql, а DB2.
к сожалению коллега мой спец по этой самой DB2 в отпуске до понедельника. а я пока копаю скрипт...

(Отредактировано автором: 30 Июня, 2008 - 15:05:26)

 
 Top
valenok Модератор
Отправлено: 01 Июля, 2008 - 00:13:46
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




проверка кривая получается..
Отправь сам дважды туже форму с одного компьютера с разницей в пол часа и результат будет тот же что с разницей в 0,0001 секунду


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB