PDA

View Full Version : سوال: راهنمایی برای جلوگیری از ذخیره مجدد رکوردها



IMANAZADI
یک شنبه 13 دی 1394, 15:43 عصر
با سلام
فرض کنید که در یک صفحه 5 عدد تکس باکس و دو کلید به نام send و save داریم

کاربر تمامی تکس باکس ها رو پر میکنه و کلید send رو میزنه

اطلاعات تکس باکس ها توسط آژاکس به صورت آرایه به سرور ارسال و پردازش و نتیجه به صورت یک رکورد (رکورد بانک اطلاعاتی) برگردانده میشود و در همان صفحه در یک جدول نمایش داده میشود
و اطلاعات بعدی به همین ترتیب الی آخر ......

حالا میخواهیم وقتی کاربر کلید save رو زده تمام اطلاعات که در جدول ثبت شده بود توسط آژاکس در دیتابیس ذخیره بشه
تا اینجا هم مشکلی نیست

ولی اگر کاربر برای بار دوم کلید save رو بزنه اطلاعات به صورت تکراری مجددا در دیتابیس ذخیره میشه

اینم بگم در جدول نمیتونیم هیچ فیلدی رو کلید کنیم چه ترکیبی چه تکی(توضیحش مفصل هست)

راه حلی برای حل این مشکل سراغ دارید ؟؟؟

ممنون میشم

مهرداد سیف زاده
یک شنبه 13 دی 1394, 15:58 عصر
این مورد رو باید با jquery یه جوری حلش کنی
وقتی درخواست میره سمت سرور شما دکمه ارسال رو disable کن تا دوباره درخواست نره. اگر جواب ok بود و دیتا insert شد فرم و تمام فیلدهای ui رو پاک کن. تا دوباره با ثبت مجدد دوباره دیتا ارسال نشه

IMANAZADI
یک شنبه 13 دی 1394, 16:07 عصر
نمیخوام اینکار رو کنم
واسه اینکه میخوام زمانیکه کاربر save رو زد و دوباره رکورد جدیدی اضافه کرد فقط رکورد جدید ذخیره بشه و رکوردهایی که تو save قبلی وارد دیتابیس شده بود ، مجدد insert نشه
یه الگوریتم شناسایی میخوام که بتونه رکوردهایی که بعد از save اضافه شده رو شناسایی کنه و فقط همونا رو در بانک اضافه کنه (بدون هیچگونه رفرش صفحه)

IMANAZADI
یک شنبه 13 دی 1394, 16:47 عصر
دوستان عکس پیوست کردم
یک مسئله دیگه باید برای حذف(delete) هم این مسئله رو در نظر گرفت
که اگر رکوردها سیو شد و بعد رکوردی حذف شد اونو تشخیص بدیم و از دیتابیس حذف کنیم

مهرداد سیف زاده
یک شنبه 13 دی 1394, 18:59 عصر
این طوری نمیشه. اون جایی که تو مقدارها رو از textbox ها جمع میکنی و میفرستی رو این جا کپی کن تا من از روی کد بهت توضیح بدم

IMANAZADI
دوشنبه 14 دی 1394, 06:54 صبح
اطلاعات به صورت json و آرایه جمع آوری و ارسال میشه

yeganemehr
دوشنبه 14 دی 1394, 11:56 صبح
با سلام
فرض کنید که در یک صفحه 5 عدد تکس باکس و دو کلید به نام send و save داریم

کاربر تمامی تکس باکس ها رو پر میکنه و کلید send رو میزنه

اطلاعات تکس باکس ها توسط آژاکس به صورت آرایه به سرور ارسال و پردازش و نتیجه به صورت یک رکورد (رکورد بانک اطلاعاتی) برگردانده میشود و در همان صفحه در یک جدول نمایش داده میشود
و اطلاعات بعدی به همین ترتیب الی آخر ......

حالا میخواهیم وقتی کاربر کلید save رو زده تمام اطلاعات که در جدول ثبت شده بود توسط آژاکس در دیتابیس ذخیره بشه
تا اینجا هم مشکلی نیست

ولی اگر کاربر برای بار دوم کلید save رو بزنه اطلاعات به صورت تکراری مجددا در دیتابیس ذخیره میشه

اینم بگم در جدول نمیتونیم هیچ فیلدی رو کلید کنیم چه ترکیبی چه تکی(توضیحش مفصل هست)

راه حلی برای حل این مشکل سراغ دارید ؟؟؟

ممنون میشم
سلام
بله قطعا امکان پذیر هست.
شما نیاز به ساختاری "مانند" یا "دقیقا برابر" SESSION ها یا Cache ها دارید.
بعد از اینکه اطلاعات بصورت JSON به سرور ارسال کردید و اطلاعات در دیتابیس ذخیره شد، شما نیاز دارید تا اون آرایه اطلاعات دریافتی با توجه به کوکی یا IP کاربر یا ... ذخیره کنید(مسائل امنیتی رعایت شود)
در هنگام ارسال مجدد اطلاعات به سرور شما باید داده های جدید را با استفاده از تابع array_diff بصورت زیر بررسی کنید:

<?php
$toremove = array_diff($olddata, $newdata);
?>
سپس مقادیر پیدا شده رو با توجه به ساختار پایگاه دادتون حذف کنید.
سپس در قدم دوم با استفاده از تابع مذکور موارد جدید رو پیدا کنید:

<?php
$toadd = array_diff($newdata, $olddata);
?>