پیاده سازی سیستم نظرسنجی چند گزینه ای آنلاین در کانستراکت 2 + توضیحات کدهای PHP
#1
Lightbulb 
به نام خدا
سلام دوستان امیدوارم حالتون خوب باشه...
[تصویر:  j1.png]
درآمدی کلی بر سیستم:
برای راه اندازی سیستم نظرسنجی چند گزینه ای از چند فایل (برنامه) PHP بر روی سرور استفاده می کنیم. هر یک از فایل ها وظیفه به خصوصی دارن که در ادامه راجع بهشون مفصلاً صحبت می کنیم. به طور کلی با ساختن یک نظرسنجی یک شناسه منحصر به فرد برای نظرسنجی ساخته شده ایجاد می شود و محتویات نظرسنجی (شامل سوالات و گزینه ها و ...) در فایل جیسون بر روی سرور ذخیره می شوند و در حین نیاز سوالات و دیگر موارد از فایل جیسون بازخوانی می شود. رأی هایی که برای هر نظرسنجی توسط کاربران به ثبت می رسند در یک دیتابیس و جدول (Table) مشخص به همراه یک شناسه منحصر به فرد برای هر شخص رأی دهنده ذخیره می شوند. پس از ثبت نظر هر کاربر یک کوکی (Cookie) بر روی دستگاه کاربر ایجاد می شود که مقدار این کوکی برابر با شناسه منحصر به فرد ذخیره شده در دیتابیس مربوط به رأی آن کاربر است.
به طور کلی هر نظرسنجی شامل امکانات زیر است:
  • * ثبت تصویر برای نظرسنجی 
  • تعیین پسورد (رمز عبور) برای نظرسنجی به طوری که تنها شخص یا اشخاصی که رمز عبور نظرسنجی را بدانند می توانند رأی خود را ثبت کنند.
  • * ویرایش (ادیت) تمامی محتویات نظرسنجی (شامل تصویر نظرسنجی، گزینه ها و ...)
  • تعیین وضعیت (Status) باز یا بسته برای نظرسنجی
  • تعیین مشخصه  destructive که معین می کند نظرسنجی ایجاد شده پس از چه مدت زمانی پذیرش رأی نخواهد داشت.

نقطه اولیه شروع:
 قبل از هر چیز بهتره یک دایرکتوری (پوشه) در هاست یا سرورتون با یک نام دلخواه ایجاد کنین تا چینش فایل های هاست یا سرورتون نظم بیشتری داشته باشه. در طول این تاپیک من نام دایرکتوری خودم رو  polls فرض کردم. در مرحله بعدی باید فایل های PHP مربوط به پروژه رو آماده سازی کنین. میتونین فایل های PHP مربوط به پروژه رو از اینجا دانلود کنین.

نکته: دقت کنین که مکانیزم دریافت آی پی این پروژه بر روی لوکال هاست (Localhost) به دلیل عدم امکان دریافت آی پی کلاینت بر روی لوکال هاست عملکرد درستی نخواهد داشت.
توضیحات مکانیزم ها و فرآیندهای پروژه:
پروژه ما شامل 5 فایل PHP با نام های create، edit ، result ، get و send-vote هست. همچنین پروژه ما یک فایل .htaccess رو هم شامل میشه که شامل دستوراتی برای مدیریت بهتر دایرکتوری مربوط به نظرسنجی (polls) میشه.
  • * فایل create.php: وظیفه این فایل PHP ساختن نظرسنجی ها و ایجاد فایل جیسون مربوط به هر نظرسنجی بر روی سرور و همچنین ایجاد جدول (Table) مربوط به هر نظرسنجی در دیتابیس می باشد. 
  • * فایل edit.php: وظیفه این فایل PHP ویرایش محتویات نظرسنجی ها است و ویرایش نظرسنجی ها با  mode های مختلفی که برای این برنامه PHP تعریف شده میسر خواهد بود.
  • * فایل get.php: وظیفه این فایل PHP بازخوانی محتویات نظرسنجی جهت نمایش محتویات آن به کاربران است.
  • * فایل send-vote.php: وظیفه این فایل PHP ثبت نظر هر کاربر در دیتابیس و همچنین ایجاد کوکی مربوط به هر نظرسنجی است. این فایل PHP با بررسی کوکی مربوط به هر نظرسنجی تصمیم می گیرد که کاربر اجازه ثبت رأی را دارد و یا اینکه برای بار دوم و یا بیشتر نسبت به ثبت رأی اقدام می کند.
  • * فایل result.php: وظیفه این فایل PHP نمایش نتایج هر نظرسنجی است. 
  • * فایل .htaccess: این فایل شامل دستوراتی به منظور تأمین ایمنی دایرکتوری مربوط به نظرسنجی هاست. این فایل مانع از ایندکس (Index) شدن محتویات دایرکتوری مربوطه می شود و همچنین تنها اجازه اجرای فایل های PHP را به کاربران می دهد و مانع از اجرای فایل های جیسون توسط کاربران می شود.

فایل create.php:
همانطور که گفتیم وظیفه این فایل PHP ساخت نظرسنجی های موردنظر ماست. این برنامه (فایل) PHP  پارامترهای زیر را می پذیرد:
  • * question: این پارامتر همان طور که از نامش مشخص است سوال نظرسنجی را مشخص می کند.
  • * options: این پارامتر تعداد گزینه های نظرسنجی را مشخص می کند که می تواند برابر با دو یا بیشتر باشد. با این حساب هر نظرسنجی باید دست کم شامل دو گزینه باشد.
  • * پارامترهای op: هر یک از این پارامترها برابر با هر یک از گزینه های نظرسنجی هستند. تعداد این پارامترها با مقدار تعیین شده برای پارامتر options نسبت مستقیم دارد. به طور مثال اگر پارامتر options برابر با 4 باشد پارامترهای op تا شماره چهار (یعنی op1,op2,op3,op4) ادامه خواهند یافت و هر یک از این پارامترها مقدار گزینه متناظر خود (مثلاً op1 مقدار گزینه یک) را مشخص می کند. در صورتی که پارامتری از قلم بیفتد برنامه PHP نسبت به این مسئله هشدار خواهد داد.
  • * destructive: این پارامتر مشخص می کند که چند ثانیه پس از لحظه ایجاد یک نظرسنجی امکان ثبت نظر برای نظرسنجی وجود نخواهد داشت. به عبارت دیگر این پارامتر به نوعی نظرسنجی شما را زمان دار می کند. مقداری که باید برای این پارامتر وارد شود می بایست بر حسب ثانیه و بیش از 60 ثانیه (یک دقیقه) باشد. در صورتی که در نظر نداشتید نظرسنجی شما زمان دار باشد می توانید مقدار این پارامتر را دقیقاً برابر با  no قرار دهید. 
  • * picture: این پارامتر تصویر نظرسنجی را مشخص می کند. شما می توانید تصویر موردنظر خود را از طریق محیط کانستراکت (با انتخاب یک تصویر به کمک شیء Filechooser) در سرور آپلود کنید. در صورتی که قصد آپلود تصویر را دارید کافی است مقدار این پارامتر را برابر با  yes قرار دهید و مشابه آنچه که در ادامه مطلب گفته خواهد شد پیش بروید. در صورتی که نیازی به وجود تصویر برای نظرسنجی نمی بینید می توانید مقدار این پارامتر را برابر با  no قرار دهید. لازم به ذکر است که تصاویر انتخابی توسط شما برای هر نظرسنجی در سرور یا هاست ذخیره نخواهند شد و بلکه تصویر انتخابی در قالب یک رشته Base64 در فایل جیسون مربوط به نظرسنجی ذخیره می شود.
  • * type: در صورتی که قصد درج تصویر در نظرسنجی را داشته باشید (مقدار پارامتر picture برابر با  yes باشد) باید مقدار این پارامتر را دقیقاً برابر با عبارت زیر قرار دهید:
کد:
tokenat(FileChooser.FileTYPEAt(0),1,"/")
(به کمک اکسپرشن  tokenat مشخص کردیم که فرمت تصویر از جانب شیء فایل چوزر دریافت و جدا شود.)
به بیان دیگر این پارامتر فرمت تصویر را مشخص می کند. دقت کنید تنها تصاویر با فرمت PNG پذیرفته خواهند شد.
  • * pass: این پارامتر به شما امکان تعیین پسورد (رمز عبور) برای ثبت نظر در نظرسنجی را خواهد داد. پسوردی که انتخاب می کنید باید دست کم 10 کاراکتر و شامل حداقل یک حرف بزرگ انگلیسی و یک کاراکتر خاص مثل (!@#$) باشد. در صورتی که تمایلی به تعیین پسورد برای نظرسنجی ندارید می توانید مقدار این پارامتر را دقیقاً برابر با  no قرار دهید.
مشخص کردن اطلاعات مربوط به دیتابیس:
همانطور که بیان کردیم برای هر نظرسنجی یک جدول (Table) در دیتابیس به صورت خودکار توسط این فایل PHP ایجاد می شود که رأی های مربوط به هر نظرسنجی در جدول مربوطه در دیتابیس ثبت می گردد. برای اینکه چنین اتفاقی رخ بده قبل از هر چیز باید مشخصات MySQL هاست یا سرورتون رو در خط 20 تا 22 این فایل PHP وارد کنین. یعنی در این قسمت:
کد:
// مشخصات سرور شما
$servername = "localhost";
$username = "root";
$password = "";
بعد از ثبت مشخصات مربوط به MySQL هاست یا سرور خودتون باید یک دیتابیس ایجاد کنین تا بتونین برای هر نظرسنجی یک جدول در دیتابیس ایجاد کنین. در واقع این فایل PHP به صورت خودکار دیتابیس رو ایجاد میکنه پس نیازی نیست که شما اقدام به ساختن دیتابیس کنین. دقت کنین که نام دیتابیس ساخته شده ترکیبی شامل نام کاربری MySQL شما خواهد بود. به این دلیل این ویژگی رو اعمال کردم که در استفاده از هاست های رایگان مشکل نداشته باشین چرا که اکثر هاست های رایگان از ترکیب زیر برای ساخت یک دیتابیس استفاده می کنن:
کد:
username_dbname
============
username => نام کاربری MySQL
dbname => نام دیتابیس
طریقه ساخت یک نظرسنجی:
خُب حالا قصد داریم یک نظرسنجی فرضی رو با محتویات زیر ایجاد کنیم:
کد:
question => کدام کشور امید به زندگی بیشتری دارد؟
options => 5
op1 => سوئد
op2 => آلمان
op3 => اوکراین
op4 => هلند
op5 => کانادا
pass => Ck8227648@!%
picture => yes
destructive => 88
با توضیحات ارائه شده نظرسنجی ما شامل 5 گزینه، یک پسورد و همچنین یک تصویر خواهد بود. همچنین پس از 88 ثانیه (یک دقیقه و 46 ثانیه) امکان ثبت رأی وجود نخواهد داشت. 
فرض کنید تصویر مد نظر ما برای این نظرسنجی این تصویر باشد.
چون قصد افزودن تصویر به نظرسنجی را داریم (به نوعی قصد آپلود تصویر را داریم) باید از رفتار Blob برای شیء فایل چوزر استفاده کنیم که جزئیات بیشتر در این تاپیک قرار دارد. بعد از افزودن رفتار ذکر شده به شیء فایل چوزر باید اکشن Send File to URL شیء فایل چوزر را انتخاب کنیم. برای پارامتر  Tag می توانید یک مقدار دلخواه در نظر بگیرید. به پارامتر  Index و  Method دست نزنید و مقدار پارامتر  URL را به شکل زیر تعیین کنید:
کد:
"http://yourhost.com/polls/create.php?question=کدام کشور امید به زندگی بیشتری دارد؟&options=5&op1=سوئد&op2=آلمان&op3=اوکراین&op4=هلند&op5=کانادا&picture=yes&destructive=88&type="&tokenat(FileChooser.FileTYPEAt(0),1,"/")&"&pass=Ck8227648@!%"
بعد از موفقیت آمیز بودن پروسه پیغامی مشابه نمونه زیر نمایش داده می شود:
کد:
Done!
Poll_ID : X
در واقع با ایجاد هر نظرسنجی یک ID (آیدی) منحصر به فرد برای هر نظرسنجی ایجاد می شود که باید برای مشاهده، ویرایش و یا ثبت رأی این آیدی رو نیاز دارین. در نمونه بالا عبارت X در واقع بیانگر همین آیدی هست که میتونه فرضاً  poll_c538b081df9e96b4b5e72bdc8fd6a8b3 باشه. در واقع آیدی هر نظرسنجی با عبارت  poll_ آغاز شده و در ادامه به یک رشته 32 کاراکتری شامل اعداد و حروف کوچک انگلیسی ختم می شود.
همچنین برای هر نظرسنجی یک فایل جیسون که حاوی محتویات نظرسنجی مربوطه است ایجاد می شود. پس محتویات فایل جیسون یک نظرسنجی با نام فرضی poll_c538b081df9e96b4b5e72bdc8fd6a8b3.json  به شکل زیر خواهد بود:
کد:
{"id":"poll_c538b081df9e96b4b5e72bdc8fd6a8b3","question":"\u0639\u0634\u0642 \u06cc\u0627 \u062a\u0646\u0641\u0631\u061f","options":"5","destructive":"88","picture":"iVBORw0KGgoAAAANSUhEUgAACcQAAAVRCAYAAACkeBi5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+....","op1":"\u0639\u0634\u0642","op2":"\u062a\u0646\u0641\u0631","op3":"\u0647\u06cc\u0686,"op4":"\u06a9\","op5":"u062f\u0627\u0645","status":"open","password":"80ccd7a005126daf4a8cc317e3c5f7f0"}
همانطور که می بینید کاراکترهای فارسی سوال و گزینه های نظرسنجی به حالتی نامفهوم در اومدن که جای نگرانی نیست چرا که در حین دریافت خروجی در محیط کانستراکت کاراکترها به صورت درست نمایش داده خواهند شد.
چند نکته مهم:
  • در صورتی که قصد ایجاد یک نظرسنجی حاوی تصویر رو داشتین حتماً باید از شیء فایل چوزر و رفتار Blob برای این شیء استفاده کنین و از این طریق ریکوئست رو به سرور ارسال کنین. اگر قصد درج تصویر در نظرسنجی رو نداشتین میتونین با شیء AJAX (اِی جَکس) و از طریق اکشن Request URL این شیء ریکوئست خودتون رو ارسال کنین. در ضمن دقت داشته باشین که با عدم درج تصویر در یک نظرسنجی عملاً چند پارامتر حذف میشن و نیازی به وارد کردن اونا نیست.
  • همونطور که در قسمت توضیحات پارامترهای این فایل PHP توضیح دادم پسورد شما باید دست کم شامل ده کاراکتر و حداقل یک حرف بزرگ و کاراکتر خاص (مثل !@#$) باشه. حتماً دقت نظر لازم رو به این موضوع داشته باشین.
  • پیغام ها یا ارورهایی که توسط این فایل (برنامه) PHP و یا دیگر فایل های PHP نمایش داده میشه ممکنه در چندین خط در خروجی ارائه بشن. در هنگام دریافت خروجی در سمت کانستراکت خطوط با تگ <br> از هم جدا شده اند. پس تعداد کل خطوطی که در خروجی نمایش داده میشه برابر با تعداد تگ های <br> بعلاوه یک هست. حالا فرض کنین چنین خروجی رو در سمت کانستراکت دریافت کردیم:
کد:
You should declare the question.<br>You should set the destructiveness state.<br>Number of total Errors: 2
چون دو تگ <br> در خروجی مشاهده می کنیم یعنی خروجی ما در اصل دارای 3 خط بوده. با این حساب خروجی ما چنین شکل و شمایلی داشته که در سمت کانستراکت به این شکل بالا در اومده:
کد:
You should declare the question.
You should set the destructiveness state.
Number of total Errors: 2
حالا که متوجه شدیم خروجی که در سمت کانستراکت دریافت کردیم در اصل شامل سه خط بوده قصد داریم به طور مثال مقدار خط دوم رو دریافت کنیم. برای دریافت مقدار یک خط دلخواه کافیه شماره اون خط رو منهای یک کنیم و حاصل رو در اکسپرشن  tokenat به عنوان ایندکس قرار بدیم. حالا برای دریافت مقدار خط دوم از اکسپرشن  tokenat باید به شکل زیر استفاده کنیم:
کد:
tokenat(result,1,"<br>")
در نمونه بالا عبارت result بیانگر نتیجه به دست اومده از ارسال ریکوئست به سرور هست که در صورتی که از طریق شیء فایل چوزر ریکوئست ارسال کرده باشیم باید به جای این عبارت مقدار Filechooser.blob.lastresult و در صورتی که از شیء AJAX برای ارسال ریکوئست استفاده کرده باشیم باید به جای عبارت یاد شده مقدار AJAX.lastdata رو درج کنیم. 
پیغام ها و ارورهای فـایل create.php:
  • در صورتی که هیچ مقداری برای پارامتر question تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should declare the question.
  • در صورتی که هیچ مقداری برای پارامتر options تعیین نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter the number of options.
  • در صورتی که مقدار وارده برای پارامتر options کمتر از 2 باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter at least two options.
  • در صورتی که برای هر یک از پارامترهای op مقداری وارد نشده باشد پیغام زیر نمایش داده خواهد شد:
کد:
Nothing added to ' opX ' !
(عبارت X به معنی شماره گزینه ای است که برای آن مقداری در نظر گرفته نشده است.)
  • در صورتی که مقداری برای پارامتر destructive تعیین نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should set the destructiveness state.
  • در صورتی که مقدار تعیین شده برای پارامتر destructive کمتر از 60 ثانیه (یک دقیقه) باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You can not ruin a poll in less than a minute.
  • در صورتی که مقداری برای پارامتر picture تعیین نشده باشد پیغام زیر چاپ خواهد شد:
کد:
You should tell me about your picture.
  • در صورتی که مقدار پارامتر picture برابر با  yes باشد و مقداری برای پارامتر type در نظر گرفته نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Enter the type of your image.
همچنین اگر مقدار پارامتر type برابر با  png نباشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should upload a PNG picture.
  • در صورتی که مقداری برای پارامتر pass تعیین نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should declare the password status.
همچنین در صورتی که پسورد وارده قدرت کافی را نداشته باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The password should be at least ten characters in length and should include at least one upper case letter, one number, and one special character.
  • در نهایت تعداد کل ارورها در آخرین خط خروجی نمایش داده خواهد شد:
کد:
Number of Total Errors: X
(عبارت X تعداد ارورهای یافت شده است.)
فایل edit.php:
همانطور که گفتیم وظیفه این فایل PHP ویرایش محتوای نظرسنجی های موردنظر ماست. این برنامه (فایل) PHP یک پارامتر کلی به نام mode را می پذیرد که بسته به مقدار تعیین شده برای پارامتر mode پارامترهای دیگری نیز پا به میدان می گذارند. همچنین وارد کردن پارامتری به نام id که در واقع همان شناسه ای است که برای نظرسنجی در نظر گرفته شده است نیز در هر حالتی ضروری است. دقت کنید در صورتی که رمز عبور (پسورد) برای نظرسنجی تعیین کرده باشید وارد کردن پارامتری تحت عنوان pass نیز در کنار پارامترهای mode و id ضروری خواهد بود تا قادر به ویرایش نظرسنجی ها باشید.
لازم به ذکر است که در هر بار استفاده از این فایل PHP تنها قادر به استفاده از یک mode (مود) مشخص هستید و نمی توانید چندین mode را به صورت همزمان استفاده کنید. بنابراین اگر قصد دارید تغییرات زیادی در نظرسنجی اعمال کنید می توانید با ارسال چندین ریکوئست (به طور مثال یک ریکوئست برای تغییر پرسش نظرسنجی و یک ریکوئست برای تغییر تصویر نظرسنجی) این کار را انجام دهید.
مقادیر تعریف شده برای پارامتر mode به شرح زیر می باشد:
  • * question: مقدار question همانطور که از نامش پیداست در صورتی که برای پارامتر mode تعریف شود حاکی از این است که قصد تغییر پرسش نظرسنجی را داریم. با تعریف این مقدار برای پارامتر mode وارد کردن مقدار پارامتر جدیدی تحت عنوان question نیز ضروری خواهد شد. مقدار پارامتر question در واقع همان پرسش جدید نظرسنجی خواهد بود.
  • delop: مقدار delop همانطور که از نامش پیداست در صورتی که برای پارامتر mode تعریف شود حاکی از این است که قصد حذف یکی از گزینه های نظرسنجی را داریم. با تعریف این مقدار برای پارامتر mode وارد کردن مقدار پارامتر جدیدی تحت عنوان option نیز ضروری خواهد شد. مقدار پارامتر option در واقع گزینه موردنظر جهت حذف از نظرسنجی را مشخص می کند. دقت داشته باشید در صورتی که نظرسنجی شما تنها شامل دو گزینه باشد امکان حذف هیچ گزینه ای وجود نخواهد داشت و در صورتی که اقدام به حذف یکی از گزینه های نظرسنجی دو گزینه ای خود کنید پیغام زیر را دریافت خواهید کرد:
کد:
You can not delete an option from the two options.
شاید این پرسش به ذهن خطور کند که اگر قصد داشتیم یک گزینه از یک نظرسنجی دو گزینه ای را حذف کنیم و مقداری جدید جایگزین آن کنیم تکلیف چیست. برای این منظور می توانید از دستوری (مقداری) که کمی جلوتر راجع به آن بحث خواهیم کرد برای پارامتر mode استفاده کنید تا ابتدا یک گزینه به تعداد گزینه های نظرسنجی اضافه کرده و سپس با توجه به چینش جدید گزینه ها اقدام به حذف گزینه موردنظر خود کنید. 
 دستور (مقدار) delop به صورت کاملاً خودکار ترتیب چینش گزینه ها را در صورت حذف گزینه ها مرتب می کند و نیازی نیست که بابت به هم خوردن شماره گزینه ها به خاطر حذف یک گزینه از میان چندین گزینه نگران باشیم.
  • * status: در صورتی که این مقدار را برای پارامتر mode تعیین کنید می توانید وضعیت نظرسنجی (بسته یا باز بودن نظرسنجی) را ویرایش کنید. با تعیین این مقدار برای پارامتر mode باید به پارامتر دیگری به نام status لزوماً مقدار بدهیم. مقادیر قابل قبول برای پارامتر status می تواند  open یا  closed باشد. در صورتی که مقدار در نظر گرفته شده برای پارامتر status غیر از مقادیر یاد شده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You can set the status 'open' or 'closed'.
همچنین اگر مقداری برای پارامتر status تعیین نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should declare the status.
  • * delpoll: در صورتی که این مقدار را به پارامتر mode بدهید قادر به حذف نظرسنجی موردنظر خواهید بود. تنها کافی است مقدار پارامتر mode را برابر با delpoll قرار دهید تا بدون هیچ قید و شرطی نظرسنجی درجا حذف شود.
  • * add: در صورتی که مقدار پارامتر mode را برابر با add قرار دهید قادر خواهید بود که به تعداد دلخواه گزینه به گزینه های سابق نظرسنجی اضافه کنید. با قرار دادن این مقدار برای پارامتر mode وارد کردن مقدار برای پارامتر number و پارامترهای op ضروری خواهد شد. پارامتر number در واقع تعداد گزینه های موردنظر جهت افزودن به نظرسنجی را مشخص می کند. عملکرد این پارامتر دقیقاً مشابه عملکرد پارامتر options در پروسه ساخت نظرسنجی خواهد بود. همچنین پارامترهای op نیز به تعداد مقدار تعیین شده برای پارامتر number تعریف و تنظیم می شوند. به طور مثال اگر مقدار پارامتر number برابر با 3 باشد پارامترهای op تا عدد 3 (op1,op2,op3) ادامه خواهند یافت و دقیقاً مشابه پروسه ساخت نظرسنجی در صورتی که برای هر یک از پارامترهای op مقداری تعیین نکرده باشید پیغامی مانند نمونه زیر دریافت می کنید که در آن عبارت X بیانگر گزینه (پارامتری) است که مقداری برای آن در نظر گرفته نشده است:
کد:
Nothing added to ' opX ' !
  • change_pass: با قرار دادن این مقدار برای پارامتر mode قادر به ویرایش پسورد (رمز عبور) نظرسنجی خود خواهیم بود. همانطور که در ابتدای توضیحات بیان شد در صورتی که از قبل برای نظرسنجی خود پسورد تعیین کرده باشید برای اجرای هر یک از مودها الزاماً باید پسورد نظرسنجی را وارد کنید بنابراین مود change_pass نیز از این قاعده مستثنی نخواهد بود. با قرار دادن مقدار ذکر شده برای پارامتر mode وارد کردن دو پارامتر دیگر یعنی پارامترهای value و last-value نیز اجباری خواهد شد. در صورتی که برای نظرسنجی خود پسوردی در حین پروسه ساخت تعیین کرده باشید و اکنون قصد تعویض پسورد تعریف شده را دارید باید مقدار پارامتر last-value را برابر با پسورد فعلی (پسوردی که در حین ساخت نظرسنجی تعیین کرده اید) و پارامتر value را برابر با مقدار پسورد جدید قرار دهید. در صورتی که همه چیز به خوبی پیش رود و پسورد شما نیز شرط لازم برای قدرتمند تلقی شدن را داشته باشد پیغام  Done! در خروجی نمایش داده می شود. ممکن است دو حالت دیگر نیز برای ویرایش پسورد نظرسنجی پیش بیاید:
1-  در صورتی که نظرسنجی موردنظر شما در حین ساخت پسوردی برایش تعیین نشده باشد و اکنون قصد تعیین پسورد برای آن را دارید باید مقدار پارامتر last-value را دقیقاً برابر با  x قرار داده و همچنین یک پسورد قوی را به عنوان مقدار value وارد کنید. با این تقاسیر باید ریکوئستی مشابه نمونه زیر به برنامه PHP بزنیم:
کد:
http://yourhost.com/polls/edit.php?id=poll_c538b081df9e96b4b5e72bdc8fd6a8b3&mode=change_pass&last-value=x&value=38546@BTEcz%$
2-  در صورتی که نظرسنجی موردنظر شما در حین ساخت پسوردی برایش تعیین شده باشد و اکنون قصد حذف پسورد آن را دارید کافی است پسورد فعلی (پسورد تعیین شده در مرحله ساخت نظرسنجی) را به عنوان مقدار پارامتر last-value وارد کنید و مقدار پارامتر value را نیز برابر با  no قرار دهید تا پسورد نظرسنجی حذف (برداشته) شود. بنابراین می توانیم ریکوئستی مشابه نمونه زیر به برنامه PHP ارسال کنیم:
کد:
http://yourhost.com/polls/edit.php?id=poll_c538b081df9e96b4b5e72bdc8fd6a8b3&mode=change_pass&last-value=38546@BTEcz%$&value=no&pass=38546@BTEcz%$
فوت کوزه گری: اگر پسوردی که برای نظرسنجی تعیین کرده بودین رو فراموش کردین جای نگرانی نیست چرا که میتونین به راحتی فایل جیسون مربوط به نظرسنجی رو باز کنین و به دنبال کلیدواژه  password بگردین. حالا کافیه مقدار هش شده ای که رو به روی عبارت  password قرار داره رو حذف کنین و به جای اون عبارت کلمه  no رو قرار بدین و بعد تغییرات رو ذخیره کنین. 
  • * destructive: بـا قرار دادن این مقدار برای پارامتر mode قادر به ویرایش زمان تخریب (از بین رفتن) نظرسنجی خواهید بود. با استفاده از این مود وارد کردن پارامتری دیگر به نام destructive ضروری خواهد شد. در صورتی که در حین ساخت نظرسنجی مقداری برای مشخصه destructive در نظر گرفته اید و اکنون قصد دارید مقدار تعیین شده را ریست کنید کافی است مقدار پارامتر destructive را دقیقاً برابر با  no قرار دهید. به طور مثال:
کد:
http://yourhost.com/polls/edit.php?id=poll_c538b081df9e96b4b5e72bdc8fd6a8b3&mode=destructive&destructive=no
همچنین در صورتی که در حین ساخت نظرسنجی مقداری برای مشخصه destructive تعیین نکرده اید و اکنون قصد انجام این کار را دارید می توانید مقدار پارامتر destructive را دقیقاً مشابه پروسه ساخت نظرسنجی برابر با زمان موردنظر خود بر حسب ثانیه (به خاطر دارید که زمان انتخابی باید بیش از 60 ثانیه یا یک دقیقه باشد) قرار دهید. مثال:
کد:
http://yourhost.com/polls/edit.php?id=poll_c538b081df9e96b4b5e72bdc8fd6a8b3&mode=destructive&destructive=12215
  • * picture: با قرار دادن این مقدار برای پارامتر mode قادر به ویرایش تصویر نظرسنجی خواهید بود. در صورت استفاده از این مود وارد کردن پارامتر دیگری به نام type نیز ضروری خواهد شد. برای ویرایش (ادیت) تصویر نظرسنجی موردنظر باید دقیقاً مشابه پروسه ساخت نظرسنجی عمل کنید. یعنی به کمک رفتار Blob برای شیء فایل چوزر و توضیحاتی که در قسمت ساخت نظرسنجی ارائه شد می توانید اقدام به ویرایش تصویر نظرسنجی موردنظر کنید. به جهت جلوگیری از طولانی شدن مطلب از بیان مجدد پروسه خودداری می کنم.
  • * edit_op: با قرار دادن این مقدار برای پارامتر mode قادر به ویرایش مقدار یک گزینه خاص از نظرسنجی خواهید بود. با وارد کردن این مقدار برای پارامتر mode وارد کردن مقدار برای دو پارامتر دیگر با نام های option و value نیز ضروری خواهد شد. پارامتر option گزینه موردنظر جهت ویرایش و پارامتر value مقدار موردنظر برای جایگزین کردن آن با مقدار فعلی (کنونی) گزینه موردنظر را مشخص می کند. به طور مثال فرض کنید قصد داریم مقدار گزینه 3 یک نظرسنجی را به «متوسط» تغییر دهیم. برای این کار باید چنین ریکوئستی ارسال کنیم:
کد:
http://yourhost.com/polls/edit.php?id=poll_c538b081df9e96b4b5e72bdc8fd6a8b3&mode=edit_op&option=3&value=متوسط
دقت کنید در صورتی که مقداری برای پارامتر value در نظر گرفته نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter the new value for the option.
همچنین در صورتی که مقداری برای پارامتر option در نظر گرفته نشده باشد پیغام «الف» و در صورتی که گزینه وارده در نظرسنجی موجود نباشد پیغام «ب» در خروجی چاپ خواهد شد:
کد:
الف: You should enter the option.
ب: The entered option is not available!
پیغام ها و ارورهای فـایل edit.php:
  • در صورتی که هیچ مقداری برای پارامتر question تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Enter the new question.
  • در صورتی که هیچ مقداری برای پارامتر mode تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should declare the mode.
  • در صورتی که هیچ مقداری برای پارامتر id تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter the poll id.
همچنین در صورتی که آیدی وارد شده نامعتبر باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The entered ID is not available!
  • در صورتی که مقداری برای پارامتر destructive تعیین نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Enter the new value for the destructiveness state.
  • در صورتی که مقدار تعیین شده برای پارامتر destructive کمتر از 60 ثانیه (یک دقیقه) باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You can not ruin a poll in less than a minute.
  • در صورتی که مقداری برای پارامتر type در نظر گرفته نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Enter the type of your image.
همچنین اگر مقدار پارامتر type برابر با  png نباشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should upload a PNG picture.
  • در صورتی که مقداری برای پارامتر pass تعیین نشده باشد در حالی که نظرسنجی دارای پسورد است پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Enter the password.
همچنین در صورتی که پسورد وارده صحیح نباشد پیغام زیر در خروجی نمایش داده می شود:
کد:
Invalid password!
​​​​​​
  • در نهایت تعداد کل ارورها در آخرین خط خروجی نمایش داده خواهد شد:
کد:
Number of Total Errors: X
(عبارت X تعداد ارورهای یافت شده است.)

نکته مهم:
  • در صورتی که قصد افزودن تصویر به نظرسنجی یا ویرایش تصویر نظرسنجی رو داشتین حتماً باید از شیء فایل چوزر و رفتار Blob برای این شیء استفاده کنین و از این طریق ریکوئست رو به سرور ارسال کنین. در غیر اینصورت میتونین با شیء AJAX (اِی جَکس) و از طریق اکشن Request URL این شیء ریکوئست خودتون رو ارسال کنین. همچنین دقت داشته باشین که میتونین نتیجه به دست اومده از ریکوئست زدن با شیء فایل چوزر رو از طریق اکسپرشن Filechooser.blob.lastresult و نتیجه به دست اومده از ریکوئست زدن با شیء AJAX رو از طریق اکسپرشن AJAX.Lastdata در محیط کانستراکت دریافت کنید.

فایل get.php:
همانطور که گفتیم وظیفه این فایل PHP دریافت محتویات (تصویر، سوالات و گزینه ها) نظرسنجی ماست. برای دریافت سوال و گزینه های نظرسنجی خود کافی است به این فایل PHP به کمک شیء AJAX ریکوئست (از نوع POST) بزنیم.
ابتدا باید اکشن Post To URL شیء AJAX (اِی جَکس) را انتخاب کنیم. برای پارامتر  Tag می توانید هر مقدار دلخواهی را در نظر بگیرید. مقدار پارامتر  URL را باید برابر با آدرس فایل PHP قرار دهید. به طور مثال آدرس فایل PHP شما میتواند به شکل زیر باشد:
کد:
http://yourhost.com/polls/get.php
مقدار پارامتر  Data را باید دقیقاً به شکل زیر وارد کنید:
کد:
"id=X"
(به جای عبارت X آیدی نظرسنجی موردنظر خود را وارد کنید.)
در نهایت هم به پارامتر  Method دست نزنید و اکشن را اعمال کنید. حالا در صورتی که پروژه را اجرا کنید و مقدار دریافتی از جانب AJAX را مشاهده کنید چیزی شبیه به نمونه زیر خواهید دید:
کد:
{
  "id": "poll_c538b081df9e96b4b5e72bdc8fd6a8b3",
  "question": "عشق یا تنفر؟",
  "options": "3",
  "destructive": "no",
  "op1": "عشق",
  "op2": "تنفر",
  "op3": "هیچ کدام",
  "status": "open"
}
همانطور که می بینید این فایل PHP محتویات نظرسنجی (شامل گزینه ها و سوال نظرسنجی) را در قالب جیسون به ما برگشت می دهد. برای پردازش و دریافت مقادیر جیسونی که فایل PHP به ما برگشت داده است باید از پلاگین (شیء) JSON استفاده کنیم. بعد از افزودن شیء JSON به پروژه باید اکشن LoadJSON را انتخاب کنیم و در فیلد  JSON مقدار AJAX.LastData را درج کنیم. با این کار در واقع محتویات جیسون دریافتی از فایل PHP را وارد شیء جیسون می کنیم تا بتوانیم به کمک این شیء عناصر موردنظر خود را دریافت کنیم. 
پس از لود کردن اطلاعات در شیء JSON نوبت به خواندن اطلاعات می رسد. برای خواندن اطلاعات از شیء JSON میتوانیم از اکسپرشن زیر بهره ببریم:
کد:
JSON.Value(0,"نام عنصر موردنظر")
فرض کنید قصد داریم مقدار عنصر  question را در یک تکست دریافت کنیم. کافی است اکشن Set Text To را انتخاب کرده و از اکسپرشن یاد شده به شکل زیر استفاده کنیم:
کد:
JSON.Value(0,"question")
دریافت تصویر نظرسنجی:
ما راجع به دریافت سوالات و گزینه های یک نظرسنجی در محیط کانستراکت بحث کردیم. اما اگر یک نظرسنجی تصویر داشت و قصد نمایش تصویر آن نظرسنجی را در محیط کانستراکت داشتیم باید چه کار کنیم؟
برای دریافت تصویر یک نظرسنجی باید یک ریکوئست جداگانه (به غیر از ریکوئست دریافت سوال و گزینه های نظرسنجی) به فایل PHP ارسال کنیم. برای این کار کافی است اکشن Post To URL شیء AJAX (اِی جَکس) را انتخاب کنیم. برای پارامتر  Tag می توانید هر مقدار دلخواهی را در نظر بگیرید. مقدار پارامتر  URL را باید برابر با آدرس فایل PHP قرار دهید. به طور مثال آدرس فایل PHP شما میتواند به شکل زیر باشد:
کد:
http://yourhost.com/polls/get.php
مقدار پارامتر  Data را باید دقیقاً به شکل زیر وارد کنید:
کد:
"pic=true"&"&id=X"
(به جای عبارت X آیدی نظرسنجی موردنظر خود را وارد کنید.)
در نهایت هم به پارامتر  Method دست نزنید و اکشن را اعمال کنید. 
حالا یک اسپرایت (Sprite) مخصوص نمایش تصویر نظرسنجی به پروژه اضافه کنید. سپس اکشن Load image from URL اسپرایت ایجاد شده را انتخاب کرده و در فیلد  URI اکسپرشن AJAX.LastData را درج کنید. در صورتی که قصد دارید ابعاد (سایز) تصویر نظرسنجی محدود به ابعاد اسپرایت باشد (تصویر نظرسنجی با هر اندازه ای صرفاً در ابعاد اسپرایت نمایش داده شود) می توانید گزینه  Keep current size را از قسمت size انتخاب کنید. همچنین در صورتی که قصد دارید ابعاد اسپرایت به اندازه تصویر افزایش پیدا کند (تصویر در اندازه واقعی خود نمایش داده شود) گزینه  Resize to image size را از قسمت size انتخاب کنید. پس از اعمال تنظیمات اکشن را اعمال کنید. حالا اگر پروژه را اجرا کنید می بینید که تصویر نظرسنجی با موفقیت نمایش داده خواهد شد. جهت فهم بهتر به شمای کلی از ایونت های پروسه دریافت اطلاعات نظرسنجی (شامل تصویر و گزینه ها و سوال نظرسنجی) دقت کنید:
[تصویر:  ajax_sample.png](تگ get-img شیء AJAX برای دریافت تصویر نظرسنجی و تگ ques+options برای دریافت سوال و گزینه های نظرسنجی است.)

پیغام ها و ارورهای فـایل get.php:
  • در صورتی که هیچ مقداری برای پارامتر id تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter the poll ID.
همچنین در صورتی که آیدی وارد شده نامعتبر باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The entered ID is invalid.
  • در صورتی که نظرسنجی بسته باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The poll is closed.
  • در صورتی که زمان تعیین شده برای بسته شدن نظرسنجی (زمان تعیین شده بر حسب ثانیه از طریق مشخصه destructive) فرا رسیده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The file has been already destructed.
 
  • در نهایت تعداد کل ارورها در آخرین خط خروجی نمایش داده خواهد شد:
کد:
Number of Total Errors: X
(عبارت X تعداد ارورهای یافت شده است.)
فایل send-vote.php:
همانطور که گفتیم وظیفه این فایل PHP ارسال رأی های نظرسنجی ما و ثبت اطلاعات هر رأی در دیتابیس است. این فایل PHP دو پارامتر id و option را اجباراً می پذیرد که پارامتر id همان شناسه منحصر به فرد نظرسنجی و option نیز گزینه موردنظر کاربر جهت ثبت رأی است. دقت کنید در صورتی که پسورد هم برای نظرسنجی تعیین شده باشد وارد کردن پارامتری تحت عنوان pass نیز که مقدارش پسورد تعیین شده برای نظرسنجی خواهد بود ضروری است.
مشخص کردن اطلاعات مربوط به دیتابیس:
همانطور که بیان کردیم برای هر نظرسنجی یک جدول (Table) در دیتابیس به صورت خودکار ایجاد می شود که رأی های مربوط به هر نظرسنجی در جدول مربوطه در دیتابیس ثبت می گردد. وظیفه این فایل PHP ثبت آرا مربوط به هر نظرسنجی در جدول مربوطه است. برای اینکه چنین اتفاقی رخ بدهد قبل از هر چیز باید مشخصات MySQL هاست یا سرور را در خط 16 تا 18 این فایل PHP وارد کنیم. یعنی در این قسمت:
کد:
// مشخصات سرور شما
$servername = "localhost";
$username = "root";
$password = "";
ثبت آرا مربوط به هر نظرسنجی:
برای ثبت رأی در محیط کانستراکت باید به کمک شیء AJAX یک ریکوئست از نوع POST به این فایل PHP ارسال کنیم. برای این منظور ابتدا اکشن Post To URL شیء AJAX (اِی جَکس) را انتخاب می کنیم. برای پارامتر  Tag می توانید هر مقدار دلخواهی را در نظر بگیرید. مقدار پارامتر  URL را باید برابر با آدرس فایل PHP قرار دهید. به طور مثال آدرس فایل PHP شما میتواند به شکل زیر باشد:
کد:
http://yourhost.com/polls/send-vote.php
مقدار پارامتر  Data را باید دقیقاً به شکل زیر وارد کنید:
کد:
"id=X"&"&option=Y"
(به جای عبارت X آیدی نظرسنجی موردنظر و به جای عبارت Y نیز گزینه موردنظر جهت ثبت رأی را وارد کنید.)
نکته: دقت کنید در صورتی که نظرسنجی شما پسورد هم داشته باشد باید مقدار پارامتر  Data را به شکل زیر وارد کنید و پارامتر pass را هم اضافه کنید:
کد:
"id=X"&"&option=Y"&"&pass=Z"
در نهایت به پارامتر  Method دست نزنید و اکشن را اعمال کنید. 
حالا در صورتی که برای اولین بار اقدام به ثبت رأی برای نظرسنجی کنید خروجی که از جانب کد PHP دریافت می کنید برابر با  Done! خواهد بود که نشان دهنده موفقیت آمیز بودن پروسه ثبت رأی است. اما اگر برای چندمین بار اقدام به ثبت رأی کنید اجازه ثبت رأی به شما داده نمی شود چرا که قبلاً رأی خود را برای آن نظرسنجی به ثبت رسانده اید. بنابراین پیغامی مشابه نمونه زیر توسط کد PHP دریافت می کنید:
کد:
{"message": "You have voted before!","ip": "0.0.0.0","selected-option-value": "تنفر","selected-option": "2","time": "2020-06-22|10:20:46"}
Number of Total Errors: 1
پیغام دریافتی از جانب کد PHP شامل دو خط است که خط اول یک رشته به فرمت جیسون و خط دوم نیز بیانگر این است که یک ارور یافت شده است. هر یک از عناصر موجود در رشته جیسون در خط اول پیغام دریافتی معنای خاصی دارند. عنصر ip آی پی کاربر در حین ثبت رأی، عنصر time ساعت و تاریخ ثبت رأی، عنصر selected-option شماره گزینه ثبت شده و عنصر selected-option-value نیز مقدار گزینه انتخاب شده توسط کاربر را مشخص می کند. 
راجع به چگونگی دریافت و پردازش اطلاعات در قالب جیسون در قسمت توضیحات فایل  get.php صحبت کردیم بنابراین از بیان مجدد توضیحات خودداری می کنم. نکته ای که در این قسمت وجود دارد آن است که ما باید مقدار خط اول را در شیء JSON لود کنیم تا پلاگین (شیء) JSON عملکرد درستی داشته باشد. بنابراین پس از انتخاب اکشن LoadJSON در فیلد  JSON اکسپرشن زیر را درج می کنیم:
کد:
tokenat(AJAX.LastData,0,"<br>")
نحوه دریافت مقدار یک عنصر خاص از رشته جیسون را هم در قسمت توضیحات فایل  get.php مطرح کردیم پس از بیان مجدد آن صرف نظر می کنم. 
اما در حال حاضر برای نمایش پیغام ها به کاربر با چالش مهمی مواجه هستیم. در صورتی که کاربر برای اولین بار اقدام به ثبت رأی برای یک نظرسنجی کند باید پیغامی متفاوت با حالتی که کاربر برای چندمین بار اقدام به ثبت رأی می کند را نمایش دهیم. برای حالتی که کاربر برای اولین بار اقدام به ثبت رأی می کند می توانیم به راحتی به کمک کاندیشن سیستمی Compare two values مشخص کنیم در صورتی که مقدار دریافتی از جانب فایل پی اچ پی (AJAX.Lastdata) برابر با  Done بود پیغام موردنظر ما نمایش داده شود. 
اما اگر کاربر برای چندمین بار اقدام به ثبت رأی کند چطور این مسئله را متوجه شویم تا بتوانیم محتویات جیسون را در شیء JSON وارد (ایمپورت) کنیم؟ برای پاسخ به این چالش می توانیم از عبارات با قاعده کمک بگیریم (اگر نمی دانید عبارات با قاعده چیست اینجا را مطالعه کنید). از آنجا که پیغام دریافتی از جانب فایل PHP در صورتی که کاربر برای چندمین بار اقدام به ثبت رأی کند برابر با دو خط که حاوی یک رشته جیسون و یک پیغام ثابت است خواهد بود و از آنجایی که یک رشته جیسون الزاماً با علامت شروع می شود می توانیم به کمک کاندیشن Test Regex بین خروجی های دو حالت (ثبت رأی برای اولین بار و ثبت رأی برای چندمین بار) تفاوت قائل شویم. بنابراین می توانیم از کاندیشن سیستمی Test Regex به شکل زیر استفاده کنیم:
[تصویر:  reg_samp.png]
در فیلد  Regex به کمک متاکاراکتر مشخص کردیم که خروجی دریافتی از جانب فایل PHP باید الزاماً با علامت شروع شود. همچنین در فیلد  Flags به کمک پیراینده مشخص کردیم که جستجو در تمامی خطوط انجام گیرد. حالا اگر شرطی که تعیین کردیم برقرار باشد اکشن مقابل کاندیشن Test Regex که می تواند یک آلارم یا هر چیز دیگری باشد عمل می کند و در غیر اینصورت اکشن مقابل کاندیشن عمل نمی کند. 
پیغام ها و ارورهای فـایل send-vote.php:
  • در صورتی که کوکی ها غیرفعال باشند پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
Cookies are disabled. You should enable your cookies.
  • در صورتی که هیچ مقداری برای پارامتر id تعریف نشده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
You should enter the poll ID.
همچنین در صورتی که آیدی وارد شده نامعتبر باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The entered ID is not available!
  • در صورتی که نظرسنجی بسته باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The poll is closed!
  • در صورتی که زمان تعیین شده برای بسته شدن نظرسنجی (زمان تعیین شده بر حسب ثانیه از طریق مشخصه destructive) فرا رسیده باشد پیغام زیر در خروجی نمایش داده خواهد شد:
کد:
The time for submitting the votes is finished now!
  • در صورتی که پسورد برای نظرسنجی تعیین شده باشد و پسوردی از جانب کاربر وارد نشده باشد (مقداری برای پارامتر pass) تعریف نشده باشد پیغام «الف» و در صورتی که پسورد وارد شده توسط کاربر نامعتبر باشد پیغام «ب» در خروجی نمایش داده خواهد شد:
کد:
الف: Enter the password!
ب: Invalid password!
  • در نهایت تعداد کل ارورها در آخرین خط خروجی نمایش داده خواهد شد:
کد:
Number of Total Errors: X
(عبارت X تعداد ارورهای یافت شده است.)
فایل result.php:
همانطور که گفتیم وظیفه این فایل نمایش نتایج نظرسنجی ماست. این فایل PHP تنها پارامتر id را می پذیرد که همان شناسه منحصر به فرد نظرسنجی موردنظر ماست. 
مشخص کردن اطلاعات مربوط به دیتابیس:
همانطور که بیان کردیم برای هر نظرسنجی یک جدول (Table) در دیتابیس به صورت خودکار ایجاد می شود که رأی های مربوط به هر نظرسنجی در جدول مربوطه در دیتابیس ثبت می گردد. وظیفه این فایل PHP ارائه آمار از آرای ثبت شده در جدول مربوطه است. برای اینکه چنین اتفاقی رخ دهد قبل از هر چیز باید مشخصات MySQL هاست یا سرور را در خط 16 تا 18 این فایل PHP وارد کنید. یعنی در این قسمت:
کد:
// مشخصات سرور شما
$servername = "localhost";
$username = "root";
$password = "";
دریافت آمار آرای ثبت شده:
برای دریافت آمار آرای ثبت شده (شامل درصد انتخاب هر گزینه، تعداد انتخاب هر گزینه، تعداد کل آرای ثبت شده و همچنین ساعت و تاریخ آخرین رأی ثبت شده) کافی است یک ریکوئست از نوع POST به این فایل PHP ارسال کنیم. 
برای این منظور ابتدا اکشن Post To URL شیء AJAX (اِی جَکس) را انتخاب می کنیم. برای پارامتر  Tag می توانید هر مقدار دلخواهی را در نظر بگیرید. مقدار پارامتر  URL را باید برابر با آدرس فایل PHP قرار دهید. به طور مثال آدرس فایل PHP شما میتواند به شکل زیر باشد:
کد:
http://yourhost.com/polls/result.php
مقدار پارامتر  Data را باید دقیقاً به شکل زیر وارد کنید:
کد:
"id=X"
(به جای عبارت X آیدی نظرسنجی موردنظر را وارد کنید.)
در نهایت به پارامتر  Method دست نزنید و اکشن را اعمال کنید. پس از اعمال اکشن خروجی مشابه نمونه زیر از جانب کد PHP دریافت می شود:
کد:
{"op1":"1 ","op2":"2 ","op3":"2 ","total":"5 ","percent-op1":20,"percent-op2":40,"percent-op3":40,"last-submitted-vote":"2020-06-22|10:11:46"}
همانطور که می بینید فایل PHP یک رشته جیسون را برگشت داد. راجع به لود (ایمپورت) کردن اطلاعات در شیء JSON و همچنین طریقه خواندن مقدار هر یک از عناصر در قسمت توضیحات فایل  get.php صحبت کردیم. کافی است دقیقاً مشابه پروسه ذکر شده در همان قسمت عمل کنید. دقت کنید که در واقع هر یک از عناصری که حاوی کلیدواژه percent هستند به درصد انتخاب گزینه توسط کاربران و هر یک از عناصری که دارای کلید واژه op هستند به تعداد انتخاب گزینه توسط کاربران اشاره می کند. همچنین عنصر last-submitted-vote ساعت و تاریخ آخرین رأی ثبت شده را مشخص می کند و عنصر total هم تعداد کل آرای ثبت شده را مشخص می کند.

پیغام ها و ارورهای فایل result.php:
[تصویر:  manifest_res.png]

دانلود سورس پروژه
(دقت کنید برای باز کردن سورس باید پلاگین های sweetalert2 و JSON را نصب داشته باشید.)
[تصویر:  fini.png]
غایب
  پاسخ


 سپاس شده توسط: M.gh ، amin hosseini ، nariman ، Zahra By ، ᔕinaᗪehghani
#2
خب امیدوارم که یادتون نرفته باشه کد های PHP رو هم به صورت کامل قرار بدید
  پاسخ


 سپاس شده توسط:
#3
(1399/4/2، 04:43 عصر)rezamms نوشته است: خب امیدوارم که یادتون نرفته باشه کد های PHP رو هم به صورت کامل قرار بدید
سلام رضای عزیز؛
فایل فشرده حاوی کدها و فایلهای موردنیاز پروژه در لا به لای مطلب (در قسمت نقطه اولیه شروع) به صورت هایپرلینک درج شده.
غایب
  پاسخ


 سپاس شده توسط:


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش پروژه محور ساخت بازی مار و پله mohsen_nasri 6 3,807 1403/10/24، 09:38 عصر
آخرین ارسال: Tggi
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 128 86,463 1403/10/23، 04:58 عصر
آخرین ارسال: Tggi
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 20,911 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,601 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 8,600 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100

پرش به انجمن: