رافق مجتهدزاده
2 سال پیش توسط رافق مجتهدزاده مطرح شد
4 پاسخ

ذخیره تکراری رکورد در پایگاه داده mysql

سلام
من چندین مرتبه با یک مشکل ساده و در عین حال عجیب مواجه شدم. در پروژه های متفاوت در فرم های خیلی ساده برام پیش اومده که چند مرتبه پشت سر هم و حتی گاهی با کمی فاصله زمانی رکورد های تکراری ثبت میشه.
این مشکل تو انواع فرم های خیلی معمولی با زبان php رخ می ده.
آیا شما مشکل مشابهی داشتید؟ یا به فکرتون می رسه از چی باشه؟
ممنون می شم راهنمایی کنید.
چون این مشکل تو یک سورس مشخص رخ نمی ده واسه همین سورس کد نگذاشتم. اگر به نظرتون چیزی نرسید بفرمایید سورس کد یکی از فرم ها رو قرار بدم.


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش آپدیت شد
2

سلام

یکی از دلایل رایجش این هست که کاربر چندبار پشت سر هم و سریع (مثل حالت دابل کلیک) روی دکمه submit فرم کلیک کنه (پیش از اینکه صفحه ریلود بشه)
اینکار باعث میشه چند تا ریکوئست به موازات هم به سمت سرور ارسال و بعد پردازش بشن و نتیجه اش میشه همین قضیه تکراری ثبت شدن چند تا رکورد پشت سرهم. و مشخص ترین راهکارش هم این هست که یا در سمت بک اند جلوی ذخیره رکورد های duplicate رو بگیرید یا مثلا در فرانت اند با javascript جلوی submit مجدد فرم رو در اون بازه زمانی کوتاه بعد از submit و پیش از ریلود صفحه رو بگیرید. یا چک کنه اگر صفحه در حال load شدن بود return کنه...


رافق مجتهدزاده
تخصص : برنامه نویسی php
@rafig 2 سال پیش مطرح شد
0

@mhyeganeh
ممکنه راهنمایی کنید که تو بک و فرانت با چه کدهایی می تونم جلوش رو بگیرم؟
یا اینکه لینکی معرفی کنید که بتونم مطالعه کنم


Saman
تخصص : برنامه نویس وب
@samanzdev 2 سال پیش مطرح شد
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
1

سلام
دقیقا موضوع چیزی هست که دوستمون @mhyeganeh توضیح دادن
دلیل دوبار کلیک کردن کاربره
راه حلش خیلی سادست
من دو تا تابع برای خودم تعریف کردم و ازش استفاده میکنم

function makeButtonLoading(button){
    button.attr('old_text',button.text());
    button.prop('disabled',true)
    button.html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>');
}

function removeLoadingFromButton(button){
    button.html(button.attr('old_text'));
    button.prop('disabled',false);
}

کاری که میکنم اینه که تا روی دکمه ی submit کلیک میکنم ، دکمه رو غیر فعال میکنم و یک loading داخلش نشون میدم

و چون درخواست هام به صورت ajax هست بعد از اتمام کار در done یا success دکمه رو به حالت قبلش برمیگردونم

حالا شما اگر درخواستت میفرسته شمارو به صفحه ی دیگه ای نیاز به برگشت دکمه نداری دیگ.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام