PDA

View Full Version : حرفه ای: آیا سریالیز کردن اطلاعات فرم و ذخیره توی یک فیلد کار درستی هست؟



idocsidocs
جمعه 21 مهر 1391, 13:14 عصر
من یه فرم دارم که فیلدهای زیادی داره. (حدود 70 فیلد)

اگه بخوام همه فیلدهای فرم رو توی یه جدول ذخیره کنم تعداد فیلدهای جدول زیاد می شه.

لطفا در این مورد راهنمایی کنید که چه کاری بهتره؟

1- اطلاعات رو توی چند جدول ذخیره کنم؟

2-فیلدهایی که نیاز به جستجو و ایندکس شدن ندارن رو با سریالیز کردن، توی یه فیلد از جدول استفاده کنم؟
با سریالیز کردن می شه 50-60 تا از فیلدهای فرم رو توی یکی از فیلدهای جدول ذخیره کنم.

MMSHFE
جمعه 21 مهر 1391, 21:21 عصر
تا جایی که بررسی کردم، سیستمهایی مثل vBulletin و... از Serialize برای این کار استفاده میکنن و خیلی خوب جواب میده. البته درمورد مقادیر فارسی فکر میکنم کمی باید بحث Serialization رو باید با دقت بکار گرفت و قبلش باید مطمئن بشین درست تبدیل میشه و موقع Unserialization هم به درستی به حالت قبل برمیگرده. موفق باشید.

idocsidocs
جمعه 21 مهر 1391, 22:15 عصر
مهندس ظارهار برای مشکل کاراکترهای فارسی قبل از سریالیز کردن باید از base64 استفاده کنیم که دیگه مشکلی پیش نیاد و سریالیز به خوبی انجام بشه. نظر شما در این مورد چیه؟

آیا این روش روی سرعت تاثیری منفی ایجاد می کنه؟

من شنیدم که توی این روش اگر از base64 استفاده کنیم دیگه لازم نیست نگران sql injection باشیم و sql injection خنثی می شه. آیا این موضوع رو تایید می کنید؟

MMSHFE
شنبه 22 مهر 1391, 19:11 عصر
راستش فکر نمیکنم مشکل خاصی توی سرعت پیش بیاد چون base64 الگوریتم سریعی هست. درمورد SQL Injection هم درسته چون اطلاعات بصورت کدهای نامفهوم در میاد و خروجی base64 ازنظر SQL معنایی نداره.

idocsidocs
شنبه 22 مهر 1391, 20:48 عصر
با توجه به بررسی هایی که انجام دادید، vBulletin توی کدوم بخش خودش از این روش استفاده کرده؟

MMSHFE
شنبه 22 مهر 1391, 22:36 عصر
راستش چون بیشتر روی بخش ماژول نویسیش کار میکردم، اونجا خیلی زیاد به چشمم خورد. بخصوص توی بخش API پرداخت آنلاین زیاد این مورد رو دیدم. بطور کلی توی بخشهای مرتبط با پلاگین از اونجا که همه پلاگینها توی یک جدول واحد قرار میگیرن و هر پلاگین هم ممکنه تعداد متفاوتی از پارامترها رو لازم داشته باشه و این جدول هم نمیتونه تعداد فیلدهاش شناور باشه و باید یک عدد ثابت باشه، کلاً برای تنظیمات پلاگینها یک فیلد گذاشته و تمام خصوصیات توش Serialize میشن و پلاگین هم موقع نیازش خصوصیاتش رو با Unserialize کردن فیلد مربوط به رکورد خودش، استخراج میکنه و بصورت آرایه در میاره.

rezaonline.net
شنبه 22 مهر 1391, 23:36 عصر
سلام دوستان .
راه حل بهتری هم هست ، میتونین یک جدول دیگه به سه تا فیلد به اسم form_id , key , value اضافه کنید و به ازای هر رکورد از جدول فرم ها ، به ازای هر تکست باکس ، از این جدول استفاده کنید .

همچنین اگر آرایه چند بعدی ندارید و صرفاً اطلاعاتتون بصورت رشته هست ، روی ساختار json هم تاملی داشته باشید ، تعداد کاراکترهای کمتری نسبت به سریالیز داره .

موفق باشید

colors
شنبه 22 مهر 1391, 23:45 عصر
سلام

نمیدونم فرمتون مربوط به چی میشه که70 تا فیلد داره! ولی نباید همیشه همه کارها و ... رو به سمت سرور داد و خودمونو مجبور کنیم که راه حل های پیچیده و ... رو پیش بگیریم. شاید این بخش از سیستمتون به درستی تحلیل،‌بررسی و نیازسنجی نشده باشه. شاید واقعا نیاز نباشه که یه فرم 70 تا فیلد بگیره، شاید بشه روی طراح بصری بیشتر تمرکز کرد. مطمئنا هچقدر سیستم پیچیده و وسیع باشه، توسعش به مراتب سخت تر میشه.

idocsidocs
شنبه 22 مهر 1391, 23:51 عصر
کلاً برای تنظیمات پلاگینها یک فیلد گذاشته و تمام خصوصیات توش Serialize میشن و پلاگین هم موقع نیازش خصوصیاتش رو با Unserialize کردن فیلد مربوط به رکورد خودش، استخراج میکنه و بصورت آرایه در میاره.
پلاگینها بخش اصلی سایت نیستن.
توی قسمتهای اصلی سایت استفاده از این روش درست هست؟

Unique
یک شنبه 23 مهر 1391, 01:01 صبح
من اصلا موندم شما برای چی 70 تا فیلد نیاز دارین !!!!
راستش من وقتی به این جدول ها میخورم متوجه میشم برنامه نویس تحلیل درستی از برنامه نداشته ! امیدوارم مشکل شما این موضوع نباشه اما Serialize کردن کلا ایده مناسبیه گرچه خودم شخصا زیاد استفاده نکردم.

idocsidocs
یک شنبه 23 مهر 1391, 01:26 صبح
من اصلا موندم شما برای چی 70 تا فیلد نیاز دارین !!!!
وقتی نیازه باید چیکار کنم !
فیلدها رو نشمرده بودم، الان که گفتید فیلدهای فرم رو شمردم که 40 تا بود. از این 40 فیلد حدود 10 تاش اجباریه و کاربر باید وارد کنه.

به هرحال این تعداد فیلد نیازه و باید اطلاعات رو از کاربر بگیرم و ذخیره کنم. اگه از Serialize استفاده کنم که مشکل تا حدودی حل می شه. می خوام مطمئن بشم که این روش درسته یا نه.


اما Serialize کردن کلا ایده مناسبیه گرچه خودم شخصا زیاد استفاده نکردم.
بخش اصلی وب سایتی که دارم طراحی می کنم با این فرم و اطلاعاتی که از این فرم گرفته می شه ساخته می شه. آیا درست هست که Serialize رو برای قسمتهای اصلی سایت بکار ببریم؟

MMSHFE
دوشنبه 24 مهر 1391, 23:02 عصر
بطور کلی جایی ندیدم که استفاده از Serialize مشکلی ایجاد کرده باشه. حتی در مواردی که مراجعه به دیتابیس زیاد بوده، چون سرعتش واقعاً زیاده. البته من هم شخصاً JSON رو بیشتر میپسندم. البته در هر حال باید مراقب Escapeکردن هم باشین. بخصوص در JSON که مشکلی ازنظر حروف فارسی نداره و نیازی به base64 نیست.

idocsidocs
دوشنبه 24 مهر 1391, 23:55 عصر
بطور کلی جایی ندیدم که استفاده از Serialize مشکلی ایجاد کرده باشه. حتی در مواردی که مراجعه به دیتابیس زیاد بوده، چون سرعتش واقعاً زیاده. البته من هم شخصاً JSON رو بیشتر میپسندم. البته در هر حال باید مراقب Escapeکردن هم باشین. بخصوص در JSON که مشکلی ازنظر حروف فارسی نداره و نیازی به base64 نیست.


آرایه JSON کجا باید ذخیره بشه؟ می شه توی دیتابیس آرایه ذخیره کرد؟

MMSHFE
سه شنبه 25 مهر 1391, 18:20 عصر
دوست عزیز، JSON آرایه نیست، یک رشته هست. شما میتونید با تابع json_encode یک آرایه رو تبدیل به ساختار JSON کنید و با کمک تابع json_decode دوباره اون رو به حالت آرایه در بیارین. بنابراین اون چیزی که توی دیتابیس ذخیره میشه، یک رشته متنی ساده هست نه یک آرایه. حتی میشه آرایه های تو در تو و چند بعدی رو هم با ساختار JSON ذخیره و بازیابی کرد.
موفق باشید.

idocsidocs
سه شنبه 25 مهر 1391, 19:50 عصر
دوست عزیز، JSON آرایه نیست، یک رشته هست. شما میتونید با تابع json_encode یک آرایه رو تبدیل به ساختار JSON کنید و با کمک تابع json_decode دوباره اون رو به حالت آرایه در بیارین. بنابراین اون چیزی که توی دیتابیس ذخیره میشه، یک رشته متنی ساده هست نه یک آرایه. حتی میشه آرایه های تو در تو و چند بعدی رو هم با ساختار JSON ذخیره و بازیابی کرد.
حالا نظر شما چیه، از JSON استفاده کنم یا از Serialize ؟ از نظر سرعت و امینت کدوم رو پیشنهاد می دید؟

MMSHFE
چهارشنبه 26 مهر 1391, 17:23 عصر
من شخصاً JSON رو ترجیح میدم بنا به دلایل زیر:
1- برای انسان قابل فهم تره
2- حجم کمتری توی دیتابیس اشغال میکنه
3- سرعت کارش بیشتره
4- امکان تبادل اطلاعات بین PHP و JS و jQuery و کلاً سایر زبانها رو هم خواهید داشت چون اکثر زبانهای رایج امروزی JSON رو پشتیبانی میکنن
البته برای امنیت بیشتر توصیه میکنم اطلاعاتی که میخواین توی دیتابیس ذخیره کنید رو یا Escape کنید، یا با الگوریتمهای قابل برگشت مثل base64 و... کدگذاری کنید.
موفق باشید.