آژانس هواپیماییexchanging

جلوگیری از ویرایش همزمان یک row توسط بیش از یک کاربر

شروع موضوع توسط IntelCentrino ‏28 فوریه 2010 در انجمن PHP

  1. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    به چه شکل میشه جلوی این را گرفت که دو کاربر بصورت همزمان نتوانند بر روی یک رکورد (row) عملیاتی را انجام دهند.

    مثلا دو کاربر بصورت همزمان نتوانند رکوردی که ID ان 10 است را SELECT و سپس UPDATE کنند؟



    -
     
  2. DorSite

    DorSite کاربر تازه وارد

    تاریخ عضویت:
    ‏1 دسامبر 2009
    نوشته ها:
    25
    تشکر شده:
    0
    فکر نکنم اطلاعاتی که همزمان ارسال میشه
    همزمان هم ثبت بشه . نشدنیه

    نمیدونم با چه زبان یا برنامه ای کار میکنی .
    شما کاری کن ساعت و زمان همراه هر اپدیت ثبت بشه
    تا بتونی شرطی برای محاسبه زمان و وفقۀ لازم بذاری
     
  3. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    میشه بیشتر توضیح دهید؟!
     
  4. DorSite

    DorSite کاربر تازه وارد

    تاریخ عضویت:
    ‏1 دسامبر 2009
    نوشته ها:
    25
    تشکر شده:
    0
  5. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    مسلما با PHP دارم این کار را انجام میدم و البته از MySQL به عنوان DBMS

    در رابطه با خود برنامه هم باید بگم که در جدولی که دارم (در دیتابیس) تعداد زیادی row وجود داره که هر کدام فیلدی به نام status وجود داره. وقتی کاربر وارد برنامه میشه اولین سطری که فیلد status آن برابر با 0 باشه SELECT میشه و کاربر میتونه اطلاعات آن رکورد را ویرایش کند. مشکل اینجا بروز میکنه که در برخی اوقات 2 کاربر اگر همزمان وارد سیستم بشوند هر دو یک رکورد را SELECT و ویرایش میکنند.
    راه حلی که به ذهن خودم رسید این است که یک فیلد به جدول اضافه کنم (مثلا status_edit) و وقتی SELECT میزنم شرطی هم در SELECT قرار دهم که رکوردی که در حال edit هست SELECT نشود.
    این راه حداقل یک ایراد داره. ایرادش این است که در صورتیکه کاربر بطور ناخواسته نتوانست تغییرات را ذخیره کند تکلیف چی هست؟! باید اسکریپت دیگری بنویسم که موارد این چنینی را با fix کند (با تغییر فیلد status_edit)؟!
     
  6. Amenocy

    Amenocy کاربر فعال برنامه نویسی کاربر فعال

    تاریخ عضویت:
    ‏25 ژانویه 2008
    نوشته ها:
    3,243
    تشکر شده:
    626
    محل سکونت:
    اردوگاه کار اجباری
    میتونی اینجوری ست کنی که وقتی کوئری انتخاب شد استاتوس اون به رزرو شده تغییر پیدا کنه . یوزر دیگه نتونه اونو انتخاب کنه چون صفر نیست
     
  7. appbannerkhuniresbanner
  8. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    و اگر بعد از رزرو شدن، تغییرات بصورت ناخواسته توسط کاربر ذخیره نشد مقدار اون فیلد رزرو شده باقی می ماند و در SELECT های بعدی هم SELECT نمیشه. نظرتون چی هست؟
     
  9. Amenocy

    Amenocy کاربر فعال برنامه نویسی کاربر فعال

    تاریخ عضویت:
    ‏25 ژانویه 2008
    نوشته ها:
    3,243
    تشکر شده:
    626
    محل سکونت:
    اردوگاه کار اجباری
    خب شما میتونی یه کاری کنی کوئری های رزرو شده که از تاریخ ساختشون مثلا" 2 ساعت میگزده تغییر استاتوس بده
     
  10. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    منطقی هست که اینکار را به همراه SELECT اجرا کنم یا قسمت جداگانه ای از برنامه را تحت این عنوان در نظر بگیرم؟
     
  11. balabala

    balabala کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏22 می 2005
    نوشته ها:
    7,350
    تشکر شده:
    1,321
    محل سکونت:
    یه خورده اونورتر
  12. IntelCentrino

    IntelCentrino Registered User

    تاریخ عضویت:
    ‏19 ژوئن 2009
    نوشته ها:
    57
    تشکر شده:
    0
    متشکرم. راه حل آخر را بکار گرفتم (قفل کردن table) :)