آموزش کامل ساخت سیستم نظر سنجی با PHP و AJAX (قسمت اول)

- visibility ۴۵ mode_comment

سلام به همه دوستان سون لرنی،چند وقت پیش توی انجمن به دوستان قول داده بودیم که آموزش کامل سیستم نظر سنجی برای سایت رو قرار بدیم و خوب بالاخره الوعده وفا،توی این اسکریپت از PHPو MYSQL و JQuery و AJAX بهره میبریم تا یه اسکریپت کاملا حرفه ای رو آماده کنیم،پس با ما همراه باشید.

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

دموی اسکریپت نظر سنجی با PHP و AJAX (اختصاصی سون لرن)

خوب توی مرحله اول به سه تا جدول نیاز داریم؛چرا سه تا جدول ؟ خوب یه جدول سوالات نظر سنجی رو توی خودش نگهداری میکنه و جدول دومی پاسخ های سوالات رو توی خودش داره و جدول سومی هم برای ثبت IP کاربران هست که از رای دادن دوباره با یک IP جلوگیری کنیم که کمک میکنه نظرسنجی بهتر و قابل اعتماد تری داشته باشیم.

کد SQL برای جدول اول که ما اینجا اسمشو میذاریم question :

توی این جدول دو تا فیلد داریم یکی فیلد ID که لازمه هر جدوله و یکی هم فیلد title که عنوان نظر سنجی توش قرار میگیره.

کد SQL برای جدول جواب ها و ثبت رای کاربران که اسمشو گذاشتیم answers :

توی این جدول هم فیلد های ID و title برای برای عنوان جواب و فیلد number برای تعداد پاسخ های این جواب و فیلد q_id برا نگهداری شناسه سوال که درو اقع مشخص میکنه این جواب مربوط به این سوال هست،ما توی این جدول علاوه بر اینکه فیلد ID رو به عنوان کلید اصلی قرار دادیم،فیلد q_id رو هم به عنوان Index گذاشتیم تا توی کوئری هایی که با q_id سروکار داره سریعتر عمل کنه.

کد SQL برای جدول ثبت IP کاربران اسمشو گذاشتیم polls :

خوب تو این جدول همه فیلد ID و فیلد q_id برای نگهدرای شناسه سوال (دوستان عزیز توجه داشته باشند شناسه سوال در اینجا به عنوان شناسه نظر سنجی هم برای عمل میکنه)،فیلد ip برای نگهداری IP کاربری که رای داده و date هم برای نگهدرای تاریخ و ساعت رای کاربر(تیو phpMyAdmin اگه نوع فیلد رو TIMESTAMP قرار بدید خودش به صورت اتوماتیک تاریخ و ساعت لحظه پردازش رو وارد میکنه).

خوب اینم از ساختار و فیلد های جدول ها ما؛

قسمت HTML

توب فایل index.php قسمت فرم و ظاهر نظر سنجی رو طراحی میکنیم.

ما مثل همیشه از کلاسی که توی پروژه های قبلی ازش استفاده میکردیم هم همین جا استفاده میکنیم و تیو خط اول اونو فراخوانی کردیم (تنظیمات دیتابیس حتما توی فایل config.php انجام بشه).

قسمت HTML که توضیح خاصی نداره فقط اون کد های جاوااسکریپت رو که اضافه کردیم بعدا میگیم باهاشون چکار داریم.توی قسمت PHP که نوشتیم با دستور global $db متغییر db رو از فایل database که اون بالا اضافه اش کردیم رو فراخوانی کردیم (چون از قبل برای راحتی کار همون جا تعریف شده)،خوب باس ایتفاده از متد ها کلاسی که داریم به بانک وصل شدیم و اولین سوال نظرسنجی رو فراخونی کردیم و نشون دادیم و بعدشم با استفاده ار ID سوال اول تمامی گزینه هایی که مرتبط به این سوال هستن رو فراخوانی کردیم و داخل یه تگ div با کلاس options نشون دادیم،یه نکته اینکه قبل حلقه که جواب ها رو برای ما نشون میده من یه تگ input و از نوع hidden اضافه کردم که برای ما مقدار ID ُوال رو نگهداری میکنه (حالا این ID توی ارسال به صفحه پردازش و ثبت اطلاعات خیلی کاربرد داره)،آخرشم که با متد disconnect از دیتابیس قطع ارتباط کردیم.

خوب برای قسمت استایل هم کمی CSS نوشتیم:

خوب تا این  جای کار باید یه چیزی شبیه تصویر پایین داشته باشید.

p27-polls-result-1

توی قسمت بعد کد های JQuery و Ajax رو تکمیل میکنیم.موفق و پیروز باشید.

دانلود فایل های PHP

comment دیدگاه کاربران
مسعود

با سلام و احترام
دوستان پس چرا هیچ ارتباطی بین ajax.php و index.php نیست.
راستش من مثل همین آموزشها پیش رفتم صفحه html رو ایجاد کردم و مرحله اول کامل بود.و ajaxreq رو تو بخش head قرار دادم.حالا وقتی یه گزینه رو انتخاب میکنم هیچ اتفاقی نمیفته چون اینجا هیچ ارتباطی بین ajax.php و index.php نیست.اینکلود هم میکنم هیچ اتفاقی نمیفته.فکر کنم صفحه ajax رو تو صفحه ایندکس قرار بدم؟

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

hermes hermes

سلام ممنون از مطلب خوبتان واقعا استفاده کردم .یک سوال اگر بخواهیم در نظر سنجی به آیپی کاربر توجه نکنه و هر تعداد رای داد را ثبت کند چه کدی را باید تغییر دهیم ؟

کیوان علی محمدی

سلام جایی که تابع Validate_user استفاده شده رو باید غیر فعال کنید.

hermes hermes

تابع if مورد نظر را پاک کردم ولی الان هرچی نظر ثبت می کنم در جدول اضافه میشود ولی در صفحه نمایش نتایج نمایش داده نمیشه و در صفحه نمایش نتایج یک ارور دارم :
Warning:nazarsanj/ajax.php on line 17
لاین 17 را دیدم ولی مشکلش را نفهمیدم
این را هم بگم من دارم سعی می کنم دوتا سوال پشت سر هم در فرمم قراربدهم .

کیوان علی محمدی

اون شرط چک میکنه کاربر میتونه رای بده یا نه،اگه برش دارین دیگه اعتبار سنجی کار نمیکنه،اینکه بخاین دو تا سوال قرار بدین کمی باید کدها رو تغییر داد.

hermes hermes

دو سوال دیگر هم دارم : اگر بخواهیم چند سوال را برای نظر سنجی پشت سرهم قرار دهیم باید چه کنیم ؟
و اگر بخواهیم به جای صفحه ی “نمایش نتایج” پیغام “تشکر” به کاربر نمایش بدهد چه کاری باید انجام دهیم ؟

ما در صفحه پرداز ای جکس بعد از ثبت رای تابع نمایش نتایج رو اجرا میکنیم،می تونید به جاش یه متن خالی رو die کنید تا نمایش بده.

hermes hermes

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

کیوان علی محمدی

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

hermes hermes

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

saeed

سلام
فایل sql را میخواستم
من نصب کردم درست است فقط نمیدانم چطور در phpMyAdmin سوال و جواب ها را قرار بدهم

ممنون

سجاد دریس

دوست عزیز ابتدا یک دیتابیس ایجاد کنید، سپس در تب sql اون دیتابیستون میتونید queryهارو اجرا کنید

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
1 2