PDA

View Full Version : حرفه ای: روال کار ثبت نام مرحله ای



h.alizadeh
جمعه 08 مرداد 1389, 00:31 صبح
سلام،

می خواستم بدونم در سایتهایی مثل ثبت نام کنکور که قدم به قدم و مرحله به مرحله هست و در صورت انجام نشدن یک مرحله تمامی مراحل قبل کنسل میشه روال کار چطوره؟

منظورم بیشتر اینه که اطلاعات هر مرحله ایا در جدول ذخیره میشه یا خیر؟
اگر در جدول نه در کجا پس؟ و ایا در جدول موقتی ذخیره میشه؟ و سپس در مرحله اخر که با موفقیت همه چی صورت گرفت در جدول اصلی قرار می گیره؟

bestirani2
جمعه 08 مرداد 1389, 07:21 صبح
سلام،

می خواستم بدونم در سایتهایی مثل ثبت نام کنکور که قدم به قدم و مرحله به مرحله هست و در صورت انجام نشدن یک مرحله تمامی مراحل قبل کنسل میشه روال کار چطوره؟

منظورم بیشتر اینه که اطلاعات هر مرحله ایا در جدول ذخیره میشه یا خیر؟
اگر در جدول نه در کجا پس؟ و ایا در جدول موقتی ذخیره میشه؟ و سپس در مرحله اخر که با موفقیت همه چی صورت گرفت در جدول اصلی قرار می گیره؟




این بحث بر میگرده به تراکنش ها که موتوری که در mysql انتخاب میکنید باید تراکنش رو ساپورت کنه
اگر تراکنش رو ساپورت میکنه با commit میتونید اثر یک کوئری رو دائمی کنید و با rollback اثرش را خنثی کنید
دقت کنید سرعت موتوری که تراکنش رو ساپورت کنه طبیعتاً کمتر از myisam هست.

صابر طهماسبی
جمعه 08 مرداد 1389, 09:08 صبح
سلام
در کتاب O'Reilly - MySQL Cookbook در بخش Transaction خیلی روان و کامل شرح داده شده است توصیه می کنم این کتاب را مطالعه کنید.

binyaft
جمعه 08 مرداد 1389, 10:50 صبح
مقدار هر فیلد رو در صفحه توسط یک REQUEST یا SESSION میشه نگه دار کرد ، در اخر چک میکنیم اگه فرم درست بود ذخیره میکنیم ، اگر هم نبود که ....

h.alizadeh
جمعه 08 مرداد 1389, 11:59 صبح
خب من فکر میکنم چون تعدادفیلدهام زیاده استفاده از سشن چندان جالب به نظر نمییاد چون اطلاعاتم برابر با دو- سه صفحه پرهست...

منظورم هم همین سایتای مثل سنجش هست موقع اسم نویسی که اطلاعات رو در صفحات مختلف می گیره و تا قبل از دریافت کدرهگیری ثبت نام بصورت کامل صورت نمی گیره.

به نظرشما از Rollbackاستفاده می کنند؟!

راستی اگر از جدول موقت استفاده شه و بعد از ثبت در جدول اصلی به جای استفاده از دستورdelete رکوردمربوطه از جدول موقت، عمل rollback انجام بشه به صرفه تر و بهتره؟؟! تفاوتی هست ؟!
فرض بانک mySQl باشه .

bestirani2
جمعه 08 مرداد 1389, 12:30 عصر
خب من فکر میکنم چون تعدادفیلدهام زیاده استفاده از سشن چندان جالب به نظر نمییاد چون اطلاعاتم برابر با دو- سه صفحه پرهست...

منظورم هم همین سایتای مثل سنجش هست موقع اسم نویسی که اطلاعات رو در صفحات مختلف می گیره و تا قبل از دریافت کدرهگیری ثبت نام بصورت کامل صورت نمی گیره.

به نظرشما از Rollbackاستفاده می کنند؟!

راستی اگر از جدول موقت استفاده شه و بعد از ثبت در جدول اصلی به جای استفاده از دستورdelete رکوردمربوطه از جدول موقت، عمل rollback انجام بشه به صرفه تر و بهتره؟؟! تفاوتی هست ؟!
فرض بانک mySQl باشه .
از همین تراکنش استفاده میکنند

ahmadflasher
جمعه 08 مرداد 1389, 22:11 عصر
هدف اصلی مرحله بندی کردن: تبدیل وبسایتهای بزرگ به مراحل منطقی کوچکتر برای جمع آوری داده هاست.

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

bestirani2
جمعه 08 مرداد 1389, 22:19 عصر
هدف اصلی مرحله بندی کردن: تبدیل وبسایتهای بزرگ به مراحل منطقی کوچکتر برای جمع آوری داده هاست.

این قسمت از سایت سنجش با دات نت کد خورده. تو ویژوال استودیو دانت یه کنترل وجود داره به نام wizard که کارش ساخت فرمهای چندگانه است و هیچ نیازی به کد نویسی نداره در واقع شما فقط تعداد مراحل و فیلد های ورودی هر مرحله رو مشخص می کنید. لازم به ذکر است به هیچ وجه چیزی تو دیتابیس ذخیره نمیشه تا زمانی که کل اطلاعات جمع آوری شه(اونم به شما بستگی داره که تو فایل ذخیره کنید یا تو دیتابیس) .البته من از هسته ی درونی کلاس این کنترل خبر ندارم ولی فکر کنم مراحل قبلی رو تو فیلد های مخفی( hidden field) ذخیره میکنه . البته منم تو یکی از پروژه هام (با php) از همین روش فیلد مخفی استفاده کردم.و به درستی جواب گرفتم. به این صورت که اطلاعات مراحل قبل رو که به صفحه ی کنونی ارسال و در این صفحه اونا رو دریافت و در فیلد مخفی قرار میدیم و کل اطلاعات رو به صفحه بعد ارسال میکنیم . در صفحات بعدی هم به همین صورت و ...
امیدوارم گرفته باشی :لبخند:



رو چه حسابی میگی با دات نت کد خورده
سایت سنجش رو نگاه کنید به وضوخ مبینید که تمام پسوندها با php است
و این مسئله کاملاً به پایگاه داده مربوط میشه

ahmadflasher
جمعه 08 مرداد 1389, 22:30 عصر
رو این حساب می گم که اونجا ما ورود اطلاعات داریم و بحث بر روی امنیت اطلاعاته صدها هزار داوطلبه و متاسفانه php برای دریافت اطلاعات یه کم :بامزه: از نظر امنیتی ضعیفه .


سایت سنجش رو نگاه کنید به وضوخ مبینید که تمام پسوندها با php است
گفتم بخش ثبت نام داوطلبا نه کل سایت (در واقع خودت کفتی نه من :متفکر:)
هر چند به پسوند فایل ها نباید توجه کرد اما برای اینکه خیال تو راحت کنم لینک زیر رو باز کن و برو به مرحه بعدی
http://srv1000.sanjesh.org/fanih89reg/

امیـرحسین
جمعه 08 مرداد 1389, 23:19 عصر
این بحث بر میگرده به تراکنش ها که موتوری که در mysql انتخاب میکنید باید تراکنش رو ساپورت کنه
اگر تراکنش رو ساپورت میکنه با commit میتونید اثر یک کوئری رو دائمی کنید و با rollback اثرش را خنثی کنید
دقت کنید سرعت موتوری که تراکنش رو ساپورت کنه طبیعتاً کمتر از myisam هست.
InnoDB که Transaction رو پشتیبانی می کنه، سرعتش از MyISM بیشتره.

مگه میشه یه تراکنش رو تا ابد نگه داشت؟ وقتی تراکنش رو شروع می کنیم، در واقع جدول رو قفل کردیم. حدس میزنم با قطع اتصال دیتابیس، تراکنش های کامل نشده ROLLBACK بشن یعنی وقتی اسکریپت تموم میشه و اطلاعات FLUSH میشه (اگر با mysql_close این کار رو نکرده باشیم). اگر حدس من درست باشه، برای اجرای هر مرحله، تراکنش به درد نمی خوره.

از هر روند موقتی که استفاده بشه، باید کدهای Clean Up هم وجود داشته باشه.
اگر من باشم. یک جدول میسازم با سه تا فیلد، یک ستون ID، یک ستون اطلاعات از نوع TEXT مثلا با نام data و یک ستون برای زمان با نام last_modified.
وقتی مرحله اول Submit شد و خواستیم به مرحله دوم بریم، اطلاعات فرم مرحله اول رو توسط تابع serialize به متن تبدیل می کنم برای فیلد data، زمان به شکل Timestamp برای ستون last_modified و یک مقدار Unique براساس ID کاربر میسازم برای فیلد ID. این مقدار Unique رو در یک SESSION هم قرار میدم و INSERT می کنم.
مرحله دوم که Submit شد، اطلاعات سطری که داشتم رو میگیرم توسط توابع unserialize و serialize، مقدار data و last_modified رو Update می کنم. همینجوری تا مرحله آخر. اگر در مرحله آخر، اطلاعات باید در چند تا جدول ثبت بشند، از تراکنش استفاده می کنم که مشکلی نباشه و بعد از اتمام کار، سطر مربوطه از جدول موقتی ام رو هم پاک می کنم.

برای Clean Up، چون زمان آخرین مرحله رو ذخیره کردم. یک زمان انتخاب می کنم که اطلاعات تا اون زمان قابل دسترسی هستند. مثلا 5 ساعت. اگر کاربر تا مرحله دوم ادامه داد و تا قبل از 5 ساعت برگشت، می تونه با اقتدار مراحل بعدی رو طی کنه.
ابتدای اسکریپتم این چک رو می کنم که اونهایی که قدیمی تر از 5 ساعت هستند رو پاک کن.

h.alizadeh
جمعه 08 مرداد 1389, 23:48 عصر
فکر نمیکنم سایت سازمان سنجش از کنترل ویزارد باشه ،


البته منم تو یکی از پروژه هام (با php) از همین روش فیلد مخفی استفاده کردم.و به درستی جواب گرفتم.
استفاده از فیلد مخفی بهتر تا جدول موقت هست پس اره؟

bestirani2
شنبه 09 مرداد 1389, 00:08 صبح
رو این حساب می گم که اونجا ما ورود اطلاعات داریم و بحث بر روی امنیت اطلاعاته صدها هزار داوطلبه و متاسفانه php برای دریافت اطلاعات یه کم :بامزه: از نظر امنیتی ضعیفه .


گفتم بخش ثبت نام داوطلبا نه کل سایت (در واقع خودت کفتی نه من :متفکر:)
هر چند به پسوند فایل ها نباید توجه کرد اما برای اینکه خیال تو راحت کنم لینک زیر رو باز کن و برو به مرحه بعدی
http://srv1000.sanjesh.org/fanih89reg/

من اصلاً قبول ندارم که امنیت php کمتر هست
همه چیز به برنامه نویس بر میگردد
حتی به بزرگترین سایتها نگاه کنید به غیر از google که با prel هست بقیه مثل یاهو فیس بوک، بلاگر و ... با php هست.
حتی خود مایکروسافت هم در اکثر سایتهاش از asp.net استفاده نکرده
مخصوصاً که با hiphop php که فیس بوک به صورت رایگان در اختیار عموم قرار دادش میشود کدهای php رو به C++ تبدیل کرد که سرعت خیلی بالایی رو نسبت به aspx به ما میده
دلیل این که توی ایران هم اکثر کارها سمت .net هست وجود مرجع فراوان توی ایران و رایگاه بودن هست
در غیر این صورت در کشور های اروپایی کاملاً برعکس هست و حتی استفاده از سیستم عامل لینوکس و php برای کارهای دولتی در اکثر کشور ها الزامی هست.
قبلاً کاملاً سنجش با php بود ولی از قرار معلوم سیستمش را داره میاره سمت asp.net که سایت جدید زده به آدرس
http://www.noet.ir/noet/

bestirani2
شنبه 09 مرداد 1389, 00:28 صبح
InnoDB که Transaction رو پشتیبانی می کنه، سرعتش از MyISM بیشتره.

مگه میشه یه تراکنش رو تا ابد نگه داشت؟ وقتی تراکنش رو شروع می کنیم، در واقع جدول رو قفل کردیم. حدس میزنم با قطع اتصال دیتابیس، تراکنش های کامل نشده ROLLBACK بشن یعنی وقتی اسکریپت تموم میشه و اطلاعات FLUSH میشه (اگر با mysql_close این کار رو نکرده باشیم). اگر حدس من درست باشه، برای اجرای هر مرحله، تراکنش به درد نمی خوره.

از هر روند موقتی که استفاده بشه، باید کدهای Clean Up هم وجود داشته باشه.
اگر من باشم. یک جدول میسازم با سه تا فیلد، یک ستون ID، یک ستون اطلاعات از نوع TEXT مثلا با نام data و یک ستون برای زمان با نام last_modified.
وقتی مرحله اول Submit شد و خواستیم به مرحله دوم بریم، اطلاعات فرم مرحله اول رو توسط تابع serialize به متن تبدیل می کنم برای فیلد data، زمان به شکل Timestamp برای ستون last_modified و یک مقدار Unique براساس ID کاربر میسازم برای فیلد ID. این مقدار Unique رو در یک SESSION هم قرار میدم و INSERT می کنم.
مرحله دوم که Submit شد، اطلاعات سطری که داشتم رو میگیرم توسط توابع unserialize و serialize، مقدار data و last_modified رو Update می کنم. همینجوری تا مرحله آخر. اگر در مرحله آخر، اطلاعات باید در چند تا جدول ثبت بشند، از تراکنش استفاده می کنم که مشکلی نباشه و بعد از اتمام کار، سطر مربوطه از جدول موقتی ام رو هم پاک می کنم.

برای Clean Up، چون زمان آخرین مرحله رو ذخیره کردم. یک زمان انتخاب می کنم که اطلاعات تا اون زمان قابل دسترسی هستند. مثلا 5 ساعت. اگر کاربر تا مرحله دوم ادامه داد و تا قبل از 5 ساعت برگشت، می تونه با اقتدار مراحل بعدی رو طی کنه.
ابتدای اسکریپتم این چک رو می کنم که اونهایی که قدیمی تر از 5 ساعت هستند رو پاک کن.
از چه نظر میگید InnoDB سرعتش بالاتر هست؟
در این مرد مطلب زیاد هست که هر کدام یکی را سریعتر میدانند ولی تا جایی که خودم فهمیدم InnoDB برای inserts کردن فقط سرعت بالاتری دارد
اتصال دائمی واسه این هست که اسکریپت تمام شد، بسته نشه که در این حالت سرعت بالاتری هم داریم چون تعداد درخواستها بالاست

Mostafa_Dindar
شنبه 09 مرداد 1389, 01:00 صبح
این بحث بر میگرده به تراکنش ها که موتوری که در mysql انتخاب میکنید باید تراکنش رو ساپورت کنه
اگر تراکنش رو ساپورت میکنه با commit میتونید اثر یک کوئری رو دائمی کنید و با rollback اثرش را خنثی کنید
دقت کنید سرعت موتوری که تراکنش رو ساپورت کنه طبیعتاً کمتر از myisam هست.

پیاده سازی اینکار با تراکنش کاملا اشتباه هست .

در صورتی که بین مراحل صفحه پست بک نمیشود , همه اطلاعات سمنت کلاینت مثل Hidden Field ذخیره میشود و در مرحله آخر که به سرور پست بک میشوند در دیتابیس ذخیره میشوند .

در صورتی که بین مراحل صفحه پست بک شود , باید اطلاعات جایی در سرور ذخیره شود , مثلا در دیتابیس .

اینکه مرحله آخر تکمیل نشود , همه اطلاعات از بین میرود رو میشه با یک تریگر خیلی ساده اجرایی کرد .

موفق باشید

h.alizadeh
شنبه 09 مرداد 1389, 01:17 صبح
راستی بعضیا میگند فیلدمخفی از لحاظ امنیتی خوب نیست جدول موقت بهتره...

میخواستم بدونم بین امنیت فیلد مخفی(hiddne field) با فیلدهای معمولی مثلinput text چه تفاوتی هست؟
اصلاتفاوتی هست؟


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

منظور دوستمون از فیلدمخفی این بود که همون اول که بین صفحات حرکت میکنیم اطلاعات صفحه قبل رو بریم در فیلدهای مخفی صفحه بعد قرار بدیم تا به صفحه اخر برسه...
ضمنا من تا قبل از دریافت کدرهگیری توانایی ذخیره رو در جداول اصلی ندارم مگر موقتی باشه.

Mostafa_Dindar
شنبه 09 مرداد 1389, 01:34 صبح
راستی بعضیا میگند فیلدمخفی از لحاظ امنیتی خوب نیست جدول موقت بهتره...


درست گفتند , شما اگر به سورس صفحه رجوع کنید میتوانید مقدار Hidden Field ها رو ببینید . ولی مهم نحوه استفاده هست که امنیت را رو رعایت کنید یا خیر .
اجازه بدید یه مثال بزنم .

برای Register کردن کاربر نیاز است 12 تا فیلد داشته باشید . میتونید همه 12 تا سوال رو یکجا در یک فرم بپرسید .
یا میتونید در 3 مرحله به صورت کلاینت ساید هر دفعه 4 تا سوال رو نشون بدید و اطالاعات بگیرید .
پس بدیهی هست که ذخیره اطلاعات در این مرحله در Hidden Field به هیچ وجه مشکلی ندارد .



میخواستم بدونم بین امنیت فیلد مخفی(hiddne field) با فیلدهای معمولی مثلinput text چه تفاوتی هست؟
اصلاتفاوتی هست؟این یک TextBox معمولی که در فرم نمایش داده میشود :

<input name="TextBox1" type="text" value="Hello" id="TextBox1" />

اینم یک Hidden Field

<input type="hidden" name="HiddenField1" id="HiddenField1" value="Hello" />
در این حالت در فرم نمایش داده نمیشود و ما میتوان از آن برای انتقال مقادیر استفاده کنیم .


منظور دوستمون از فیلدمخفی این بود که همون اول که بین صفحات حرکت میکنیم اطلاعات صفحه قبل رو بریم در فیلدهای مخفی صفحه بعد قرار بدیم تا به صفحه اخر برسه...
ضمنا من تا قبل از دریافت کدرهگیری توانایی ذخیره رو در جداول اصلی ندارم مگر موقتی باشه.منظور کدوم دستتون ؟

منظورتون از جدول موقت چیه ؟

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

موفق باشید

bestirani2
شنبه 09 مرداد 1389, 09:42 صبح
پیاده سازی اینکار با تراکنش کاملا اشتباه هست .

در صورتی که بین مراحل صفحه پست بک نمیشود , همه اطلاعات سمنت کلاینت مثل Hidden Field ذخیره میشود و در مرحله آخر که به سرور پست بک میشوند در دیتابیس ذخیره میشوند .

در صورتی که بین مراحل صفحه پست بک شود , باید اطلاعات جایی در سرور ذخیره شود , مثلا در دیتابیس .

اینکه مرحله آخر تکمیل نشود , همه اطلاعات از بین میرود رو میشه با یک تریگر خیلی ساده اجرایی کرد .

موفق باشید

تراکنش رو اصلاً برای این توی پایگاه داده بوجود اوردند
سرعتش این کار هم بیشتر هست و هم منطقی تر

bestirani2
شنبه 09 مرداد 1389, 09:47 صبح
راستی بعضیا میگند فیلدمخفی از لحاظ امنیتی خوب نیست جدول موقت بهتره...

میخواستم بدونم بین امنیت فیلد مخفی(hiddne field) با فیلدهای معمولی مثلinput text چه تفاوتی هست؟
اصلاتفاوتی هست؟


منظور دوستمون از فیلدمخفی این بود که همون اول که بین صفحات حرکت میکنیم اطلاعات صفحه قبل رو بریم در فیلدهای مخفی صفحه بعد قرار بدیم تا به صفحه اخر برسه...
ضمنا من تا قبل از دریافت کدرهگیری توانایی ذخیره رو در جداول اصلی ندارم مگر موقتی باشه.

شما اگه فیلد مخفی بگیرید مجدد باید تو هر صفحه چک کنید که یک کاربر موزی اطلاعاتی رو به صورت ناخواسته وارد نکنه
اگر توی مرحله چک کردید و همه چیز درست بود، ممکنه کاربر توی مرحله 2 مقدار اون رو تغییر بده و یا هر جای دیگر

نمونه بارز از تراکنش رو تو سیستمهای بانکی میتوانید ببینید که اگر در حین انجام کار اتفاقی بیفته مثدار شما بر میگرده

حالا شما با یک فیلد مخفی بفرستید و کاربر عمداً یا سهواً اطلاعات رو تغییر بده یا اصلاً یک صفحه جدید باز کنه، اینطوری اطلاعات از بین میره

h.alizadeh
سه شنبه 19 مرداد 1389, 11:08 صبح
حالا شما با یک فیلد مخفی بفرستید و کاربر عمداً یا سهواً اطلاعات رو تغییر بده یا اصلاً یک صفحه جدید باز کنه،
من نفهمیدم اطلاعات فیلدمخفی رو چطوری کاربر می تونی تغییر بده! فیلدمخفی که هیدن هست. فوقش سورس رو ببینه چطوری تغییر بده و به سرور ارسال کنه؟!

bestirani2
سه شنبه 19 مرداد 1389, 11:29 صبح
من نفهمیدم اطلاعات فیلدمخفی رو چطوری کاربر می تونی تغییر بده! فیلدمخفی که هیدن هست. فوقش سورس رو ببینه چطوری تغییر بده و به سرور ارسال کنه؟!

با نصب چند تا پلاگین روی فایر فاکس میتوان سورس را تغییر داده