PDA

View Full Version : حرفه ای: تاپیک جامع سوالات PHP و راهکارهای MySQL



LORD AELX
جمعه 18 تیر 1389, 20:25 عصر
* فقط لازم میدونم چند تا قانون مهم رو علاوه بر قوانین اصلی فروم (http://www.barnamenevis.org/forum/showthread.php?t=51814)، متذکر بشوم:


این تاپیک برای آموزش مفاهیم اولیه و سوالات ابتدایی ایجاد نشده است. پس لطفا پس از یادگیری مقدمات و آشنایی با مفاهیم اصلی و به منظور یادگیری مفاهیم پیچیده تر و نیز دریافت راهکار (solution) مسائل مشکل، از این تاپیک استفاده فرمایید.
به هیچ عنوان نظم تاپیک را به هم نریزید. برای تشکر از دکمه مربوطه و برای دعوا (!) از پیغام خصوصی استفاده کنید. فقط برای پرسیدن سوال پست دهید و پست حاوی مطالب زاید از جمله اظهار نظر و مخصوصا پاسخ کوتاه، ناقص و نادرست جدا خودداری فرمایید.
از دوستان Expert و Experienced عزیز خواهش می کنم، حتما این تاپیک ها را دنبال کنند و در صورت آگاهی از مطلب از پاسخگویی به سوالات امتناع نورزند. باشد تا با کمک شما عزیزان، اندکی بر اندوخته های علمی ما افزوده شود. بهترین آرزوها را برای شما دارم.:بوس: :قلب:

امیدوارم این تاپیک در آینده به مرجع معتبر و مفیدی در این زمینه تبدیل شود. :لبخندساده: :تشویق:

متشکرم

LORD AELX
جمعه 18 تیر 1389, 20:41 عصر
خوب، برای شروع اولین سوال رو خودم می پرسم... :چشمک:

شاید این چیزی رو که میخوام بپرسم n تا راهکار داشته باشه، بله مطمئنا بعضی از آن ها به فکر خودم هم رسیده، ولی معمولا مشکل کسانی مثل "منطق برنامه نویسی" نیست، بلکه آگاهی کم و نداشتن دید وسیع و تسلط بر موضوع مورد نظر است. مشکل من ایجاد یک Table حاوی سوالات امتحانی است. مشکل ار اینجا شروع می شود که در این سیستم مسلما بیش از یک آزمون توسط مدیر سیستم ایجاد می شود و منطقی نیست که برای هر مورد یک Table جداگانه ایجاد شود (شامل سوال و جواب ها) و مثلا یک Table دیگر هم اسم Table های موجود را ذخیره کند. من دنبال راهی هستم که مطلقا یک Table وجود داشته باشد و هر رکورد آن شامل "نام آزمون"، "سوالات" و "جواب ها" باشد. آیا راهی هست که مثلا سوالات رو در یک فیلد ذخیره کرد؟! مثلا آیا نوع داده ای در MySQL داریم که همانند Array عمل کند؟! در غیر اینصورت آیا راهکار دیگری برای ذخیره سازی سوالات به نظرتان می رسد که امن باشد؟!

متشکرم

LORD AELX
جمعه 18 تیر 1389, 21:07 عصر
راستی یه سوال دیگه هم دارم و اون اینکه با PHP چطور میشه Chart رسم کرد؟! آیا PHP هم دارای کامپوننت هایی در این ضمینه هست که Chart های گرافیکی و زیبا بسازه؟!

متشکرم

LORD AELX
شنبه 19 تیر 1389, 14:42 عصر
برای سوال اولم یه راه حل پیدا کردم! :تشویق: آرایه رو implode کرده و تو DB ذخیره می کنم، سپس برای بازیابی آن، رشته مورد نظر رو explode می کنم. خوبه؟!

سوال دوم رو کسی نمیخواد جواب بده؟! منتظرم :لبخندساده:

LORD AELX
دوشنبه 21 تیر 1389, 15:33 عصر
کسی نمیخواد راجع به رسم Chart با PHP توضیح بده؟!

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

bestirani2
دوشنبه 21 تیر 1389, 15:59 عصر
برای سوال اول کاری که گفتید به نظرم زیاد جالب نمیاد
فرض کنید شما میخواهید از میان فقط سوالها یک چیزی را جستجو کنید ولی شما توی دیتابیستون یک رشته دارید
برای سوال اول شما از نرمالسازی استفاده کنید
شما یک جدول حاوی نام امتحان و دیگر موارد مربوط به امتحان مثل تاریخ شروع و پایان، تعداد سوالات و ... درست کنید که یک شماره شناسایی یکتا داره
و در جدول دیگری اطلاعات مربوط به سوالات را وارد کنید که توسط کلید شماره شناسایی مربوط به امتحان به امتحان مربوطه وصل می شود.
یک کار جالبتری هم که میتوانید بکنید درست کردن یک بانک سوال هست
که برای هر آزمون سوالات مورد نظر رو از بانک سوال انتخاب میکنید که حالا میتوانید حتی بیشتر از تعداد سوالی که قصد امتحان را دارید انتخاب و به صورت تصادفی سوال ها را انتخاب کنید
حالا می رسیم به مسئله ارتباط دادن بین دو جدول
در جدول مربوط به امتحان یک جدول درست میکنید که با ، شماره شناسایی مربوط به هر سوال رو از هم جدا میکند و در هنگام Select کردن با in میگید که سوالها از داخل این محدوده انتخاب بشید که در این صورت دستتون بازتر هم هست

bestirani2
دوشنبه 21 تیر 1389, 16:02 عصر
در مورد سوال دومتون که چارت هست هم باید بگم که
شما باید به توابع مربوط به gd آشنا باشید و کافیست با توجه به چیزی که میخواهید استفاده کنید که توضیح کاملش زیاد هست و از حوصله این تاپیک خارج هست و شما میتوانید اسکریپت آماده مربوط به این کار رو برای یادگرفتن ببینید که تعداد خط کدش هم تقریباً زیاد هست

shahriyar3
دوشنبه 21 تیر 1389, 19:27 عصر
از کلاس pchart میتونید استفاده کنید.
http://pchart.sourceforge.net/documentation.php?topic=exemple8

توابع و کلاس ها و اسکریپت های دیگه ای هم هستند.
اینجا میتونی لیستشو ببینی:
http://www.hotscripts.com/category/php/scripts-programs/graphs-charts/

s_salavati2002
سه شنبه 22 تیر 1389, 06:47 صبح
pchart به نظر من فوق العاده است فقط مشکلی که داره اینه که مثلا تو نمودار pie ما بیش از چندتا اگر داده بدیم رنگاش مشکی میشه اونم میشه تو آرایه ای که تو کلاسش داره تعریف کرد

یه برنامه دیگه که خیلی عالیه fusionchart که فلشه و اسکریپتهای php هم داره که از نظر زیبایی عالیه

در مورد سوال اولتم به نظر من خیلی مهمه که سیستمت می خواد چیکار کنه؟ اگه آزمون آنلاینه شاید بدترین کار ارتباط دادن جدول آزمون ها و سوالاته، همون اگه آزمونات یه جدول بشه و فیلد سوالاتت XML یا رشته بشه بهتره

bestirani2
سه شنبه 22 تیر 1389, 08:16 صبح
pchart به نظر من فوق العاده است فقط مشکلی که داره اینه که مثلا تو نمودار pie ما بیش از چندتا اگر داده بدیم رنگاش مشکی میشه اونم میشه تو آرایه ای که تو کلاسش داره تعریف کرد

یه برنامه دیگه که خیلی عالیه fusionchart که فلشه و اسکریپتهای php هم داره که از نظر زیبایی عالیه

استفاده از کلاس ها خوبه ولی بی شک خودش با توابع Gd بنویسه بهتر با سلیقه اش میخوره
این کلاس هم با همین توابع نوشته شده که میتونه ازش یاد بگیره
در مورد فلش هم به حجمش هم توجه کنید
برای یک سیستم آموزشی به صرف نیست




pchart
در مورد سوال اولتم به نظر من خیلی مهمه که سیستمت می خواد چیکار کنه؟ اگه آزمون آنلاینه شاید بدترین کار ارتباط دادن جدول آزمون ها و سوالاته، همون اگه آزمونات یه جدول بشه و فیلد سوالاتت XML یا رشته بشه بهتره
من با این کاملاً مخالفم
این کار از سرعت برنامه و انعطاف پذیریش به شدت کم میکنه و اینوری اصلاً نرمال نیست
به پایگاه داده نرم افزار های معروف هم مثل Moodle نگاه کنید جداول را ارتباط دادند

s_salavati2002
سه شنبه 22 تیر 1389, 09:37 صبح
من با این کاملاً مخالفم
این کار از سرعت برنامه و انعطاف پذیریش به شدت کم میکنه و اینوری اصلاً نرمال نیست
به پایگاه داده نرم افزار های معروف هم مثل Moodle نگاه کنید جداول را ارتباط دادند
در جدول quiz مودل ، فیلد questions ارتباطی به جداول دیگه نداره حداقل ظاهرا
اون فیلدش ازنوع text
شمای دیتابیس مودل بخش آزمون هارو گذاشتم
ممکنه من اشتباه کرده باشم ولی از نظر من در حالت کلی وقتی که آزمونی ایجاد کردیم احتیاجی به رفرنس دادن به متن سوالات در جدول دیگه نداریم پس میتونیم مستقیما متن سوالاتو در جدول آزمون بیاریم.
اصول نرمال سازیم نقض نمیشه

bestirani2
سه شنبه 22 تیر 1389, 10:18 صبح
اگه به همین که خودتون فرستادید نگاه کنید کلی جدول داریم که هر کدام با یک کلید خارجی به هم وصل می شوند
به دو قسمت کلی آزمون و سوالات تقسیم شدند که حالا برای انعطاف پذیری بیشتر همین ها رو به چندین قسمت تقسیم کرده که با توجه به کوچک بودن پروژه همون دو جدول کافیه ولی اگه بخواهید انواع سوالات مانند چهارگزینه ای، تشریحی و ... رو وارد کنید و یک سری امکانات دیگه باید کلی جدول بسازیم.
حال توی این سیستمی که این دوستمون میخواهد بنویسه چون حرفی از مدل های مختلف سوال نبود به دو جدول اکتفا کردم
خوب نگاه کنی همه چیز از هم جدا هست و توسط کلید های خارجی به هم وصل شدند که این همون نرمال سازی هست
حالا فرض کنیم به گفته شما یک جدول داشته باشیم که فیلدش رو متنی بگیریم و داخل اون با xml بیایم و تعداد سوالهایی که میخواهیم رو بریزیم، در این حالت انعطاف پذیری که اصلاً نداریم و سرعت هم پایین میاد و دیگر موارد

s_salavati2002
چهارشنبه 23 تیر 1389, 01:13 صبح
حرف من یک جدول نبود، بطور مثال یک جدول برای سوالات و یک جدول برای آزمون ها
برای نرمال سازی ما احتیاج به جدول سومی برای ارتباط بین دو جدول فوق داریم
از اونجایی که آزمون یکبار ساخته میشه و بعد ازون بارها اجرا میشه بهتره که صورت سوالات یکجا بیاد
اگر پروژه دیگه ای بود حرفت کاملا منطقی بود همه اینا بستگی به این داره که ما دیدمون نسبت به آزمون چی باشه و بانک سوالات رو بخوایم چجوری اداره کنیم، آیا می خوایم برگردیم به آزمون های گذشته؟ آیا با تغییر سوالات در بانک ، آزمون های قدیم باید تغییر کنند؟ در صورت ارتباط ، اگر یک سوال تغییر کنه که در چند آزمون استفاده شده ، اونوقت باید تمام اون آزمون ها تغییر کنه ، بعدش باید نتیجه تمام داوطلبان اون آزمون باید تغییر کنه!
واقعا به این همه ارتباط نیاز داریم؟ از نظر من نه!

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

LORD AELX
جمعه 25 تیر 1389, 01:42 صبح
مدیر عزیز، لطفا این تاپیک رو به حالت اعلان در بیاورید، تا همه استفاده کنند. متشکرم :قلب:

bestirani2
جمعه 25 تیر 1389, 05:20 صبح
حرف من یک جدول نبود، بطور مثال یک جدول برای سوالات و یک جدول برای آزمون ها
برای نرمال سازی ما احتیاج به جدول سومی برای ارتباط بین دو جدول فوق داریم
از اونجایی که آزمون یکبار ساخته میشه و بعد ازون بارها اجرا میشه بهتره که صورت سوالات یکجا بیاد
اگر پروژه دیگه ای بود حرفت کاملا منطقی بود همه اینا بستگی به این داره که ما دیدمون نسبت به آزمون چی باشه و بانک سوالات رو بخوایم چجوری اداره کنیم، آیا می خوایم برگردیم به آزمون های گذشته؟ آیا با تغییر سوالات در بانک ، آزمون های قدیم باید تغییر کنند؟ در صورت ارتباط ، اگر یک سوال تغییر کنه که در چند آزمون استفاده شده ، اونوقت باید تمام اون آزمون ها تغییر کنه ، بعدش باید نتیجه تمام داوطلبان اون آزمون باید تغییر کنه!
واقعا به این همه ارتباط نیاز داریم؟ از نظر من نه!

بازم تاکید میکنم من کل ریلیشنا رو نمی گم ، فقط صورت سوالات که بیشترین حجم اطلاعات را داره و اگر بیایم برای یک آزمون این همه جوین داشته باشیم خیلی سنگین میشه
همیشه نرمال ترین حالت ایده آل ترین حالت نیست
جمله قبلیتون رو نگاه کنید نوشتید
اگه آزمونات یه جدول بشه و فیلد سوالاتت XML یا رشته بشه بهتره
و تاکید کردید یک جدول بشه
نرمال سازی سطوح مختلفی داره و الزاماً نباید سه جدول بشه و منم حرفی از جدول سوم نزدم
من تمام بحثم روی این بود که اگه به صورت رشته بگیریم و بعد تک تک بخواهیم نمایش بدیم پردازش بیشتری نیاز هست و همچنین در مواقعی که بخواهیم یک سوال رو ویرایش کنیم و یک سوال رو حذف کنیم به مشکل بر میخوریم
الان فرض کنید برای ویرایش یا نمایش دادن یک سوال باید یک رشته را بگیریم و جدا کنیم و بعد نمایش بدهیم
حالا جوابهاش اگه داخل همین باشه که کار سخت تر میشه
اگرم داخل یک رشته دیگه باشه و ما بیایم یک سوال رو پاک کنیم، جوابش باقی میمونه و ترتیب جواب ها به هم میریزه
یکی از مسائل دیگه نرمال سازی این هست که مطمئن میکنه ما رو وقتی یک چیزی رو پاک میکنید اثرش از کل جدول پاک میشه

h.alizadeh
جمعه 25 تیر 1389, 20:16 عصر
من دنبال راهی هستم که مطلقا یک Table وجود داشته باشد و هر رکورد آن شامل "نام آزمون"، "سوالات" و "جواب ها" باشد. آیا راهی هست که مثلا سوالات رو در یک فیلد ذخیره کرد؟! مثلا آیا نوع داده ای در MySQL داریم که همانند Array عمل کند؟! در غیر اینصورت آیا راهکار دیگری برای ذخیره سازی سوالات به نظرتان می رسد که امن باشد؟!


خب اگر تعداد سوالات زیاد باشه مثلا بیست تا باشه،آیا ریختن تمام سوالات در یک فیلد کار خوبی ه؟



اگه آزمونات یه جدول بشه و فیلد سوالاتت XML یا رشته بشه بهتره


میشه فایل XMLرو با جدول آزمون ها ارتباط داد؟

-------
من توی دانشگاه یک پروژه کوچولو XML نوشتم که سوالات دریک فایلXML و جوابها در یک فایلXMLدیگه بود و بعد از طریق یک فایل html آزمون می گرفتم و از این فایلای XML توی این فایل html از طریق جاوااسکریپت استفاده می کردم.

--------
برای استفاده با بانک هم که دوستان گفتند من با پست 6 (http://barnamenevis.org/forum/showpost.php?p=1038700&postcount=6) موافق ترم.

h.alizadeh
جمعه 25 تیر 1389, 20:17 عصر
راستی منم یک فرم دارم که در اون افراد اطلاعات مربوط به تحصیلاتشون رو پر میکنند، مثلا اگر فردی لیسانس هست باید اطلاعات مربوط به دوران دیپلم ،فوق دیپلم، لیسانس اش رو وارد کنه که در چه سالی اخذ کرده کدوم دانشگاه،آدرس دانشگاه و... حدوداً برای هر دوره از تحصیلش 5تایی فیلدهست که پرکنه .
حالا نظرشما برای پیاده سازی این چیه؟
به نظرتون برای هرکدوم از دوره های این فرد یک رکورد اضافه کنم؟ یا به نظرتون به روش آقای LORD ALEX بصورت ارایه ای ذخیره کنم وبرای هرفردی فقط یک رکورد به جدول اضافه بشه؟(خب باتوجه به اینکه بعضی فیلدها یه مقدار طولانی مثل ادرس دانشگاه ، آیا به نظرتون این روش جالبی هست؟
و اینکه خب یکی ممکنه دیپلم باشه یکی دکترا خب اونوقت طول ارایه هاشون متفاوت میشه
نمیدونم چه روشی رو شما پیشنهاد می دید؟

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

bestirani2
جمعه 25 تیر 1389, 22:56 عصر
راستی منم یک فرم دارم که در اون افراد اطلاعات مربوط به تحصیلاتشون رو پر میکنند، مثلا اگر فردی لیسانس هست باید اطلاعات مربوط به دوران دیپلم ،فوق دیپلم، لیسانس اش رو وارد کنه که در چه سالی اخذ کرده کدوم دانشگاه،آدرس دانشگاه و... حدوداً برای هر دوره از تحصیلش 5تایی فیلدهست که پرکنه .
حالا نظرشما برای پیاده سازی این چیه؟
به نظرتون برای هرکدوم از دوره های این فرد یک رکورد اضافه کنم؟ یا به نظرتون به روش آقای LORD ALEX بصورت ارایه ای ذخیره کنم وبرای هرفردی فقط یک رکورد به جدول اضافه بشه؟(خب باتوجه به اینکه بعضی فیلدها یه مقدار طولانی مثل ادرس دانشگاه ، آیا به نظرتون این روش جالبی هست؟
و اینکه خب یکی ممکنه دیپلم باشه یکی دکترا خب اونوقت طول ارایه هاشون متفاوت میشه
نمیدونم چه روشی رو شما پیشنهاد می دید؟

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

h.alizadeh
شنبه 26 تیر 1389, 00:44 صبح
تو جدول دوم هم فیلد مربوط به مدرک تحصیلی رو set بگیر
فیلد مدرک تحصیلی یک فیلد نیست اطلاعات مدرک تحصیلی شامل 5 فیلد ه مثل سال اخذ مدر ک /نا م دانشگاه/ادرس دانشگاه/تلفن و...

bestirani2
شنبه 26 تیر 1389, 07:13 صبح
فیلد مدرک تحصیلی یک فیلد نیست اطلاعات مدرک تحصیلی شامل 5 فیلد ه مثل سال اخذ مدر ک /نا م دانشگاه/ادرس دانشگاه/تلفن و...
متوجه شدم
منظورم نوع مدرک بود
چون از حالت دیپلم و ... خارج نیست
ما الان یک جدول دوم داریم مثل زیر

شماره آیدی (کلید خارجی) - نوع مدرک - سال اخذ - نام دانشگاه - آدرس - تلفن
76 - فوق دیپلم - 89 - تهران جنوب - تهران - 454655656
76 - لیسانس - 91 - پرند - پرند - 4545545545
76 - فوق لیسانس - 93 - تهران مرکز - تهران - 454545
77 - فوق دیپلم - 54 - کرج - کرج - 45454545
که کاربر با آیدی 76، 3 تا مدرک و آیدی 77 یک مدرک داره که توی اون یکی جدول ما فقط یک فیلد با آیدی 76 یا 77 داریم که توی اون مشخصات فرد مثل اسم و ... برایش آمده

h.alizadeh
شنبه 26 تیر 1389, 09:59 صبح
الان بهم گفتند احتمالا گزارش گیری ها متنوعی ممکنه بر روی این اطلاعات باشه و...
با این حساب فکر میکنم باید برای هر مقطعی رکوردی اضافه کنم...

hamedafb
سه شنبه 05 مهر 1390, 11:31 صبح
سلام
من یه دیتابیس دارم که یک table داره .این تیبل 3 تا ستون داره به نام های id و name1 و name2 و مثلا 40 تا سطر داره. و در محتویات ستون name1 در هر سطر یه کلمه هست به نام hamed .من میخوام محتویات name2 رو با کلمه hamed در name1 جایگزین کنم.با استفاده از یک کد php . این کدی که من نوشتم اینه :


<?php
$OldName = "hamed";
$result = $db->sql_query("SELECT name1, name2, id FROM TableXCD ORDER BY id DESC LIMIT 0,40");
while ($row = $db->sql_fetchrow($result)) {
$name2 = intval($row['name2']);
$db->sql_query("UPDATE TableXCD SET name1 = replace(name1, '$OldName', '$name2');");
$name1 = intval($row['name1']);
echo"<div align=right>$name1 - $name2</div></br>";
}
?>


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

hamedafb
چهارشنبه 06 مهر 1390, 16:20 عصر
دوستان کسی بلد نیس.اینجا انجمن برنامه نویسیه یا من اشتباه اومدم؟