میخواهیم یک سامانهی رایگیری آنلاین با کمک پایگاه دادهی `sqlite3` پیادهسازی کنیم.
بدین صورت که هر بازدید کننده از سایت با مشاهدهی صفحهی اصلی لیست گزینههای قابل رای دادن را ببیند
و از بین آنها یکی را انتخاب کند، سپس به صفحهی ثبت رای متنقل شده و رای او ثبت شود.
همچنین یک بخش افزودن گزینه وجود داشته باشد که با کمک آن بتواند گزینهی جدید به رایگیری اضافه کرد.
سامانهی ما چند بخش اساسی دارد:
1. بخش نصب که وظیفهی ساختن جدول مربوط به رایگیری در پایگاه داده را دارد.
2. بخش افزودن گزینه که وظیفهی اضافه کردن یک گزینهی جدید به پایگاه داده را دارد.
3. صفحهی اصلی که وظیفهی نمایش گزینههای موجود را دارد.
4. رایدهی که وظیفهی ثبت رای رایدهندگان را دارد.
## جزئیات
### نصب
کدهای بخش نصب باید در فایل `install.php` نوشته شود، در اولین بار مشاهدهی صفحهی نصب، باید پایگاه دادهای از نوع `sqlite3` به نام
`_db.sqlite`
در همانجایی که فایل `install.php` قرار دارد ساخته شود.
در این پایگاهداده باید یک جدول به نام `options` وجود داشته باشد که ستونهای آن به شرح زیر است:
- `id`: `integer PRIMARY KEY`
- `subject`: `text NOT NULL UNIQUE`
- `count`: `integer DEFAULT 0`
همچنین اگر قبلا فرایند نصب انجام شده بود، خطای `Already installed` نمایش داده شود.
### افزودن گزینه
کدهای این بخش باید در فایل `add_option.php` نوشته شود.
اگر ریکوئست به این صفحه از نوع `GET` بود، باید فرمی برای اضافه کردن گزینهی جدید به کاربر نمایش داده شود که در کد اولیه این پیادهسازی انجام شدهاست.
اگر ریکوئست از نوع `POST` بود، باید گزینهی جدید به پایگاه داده اضافه شود و پیغام اضافهشدن با موفقیت به او نمایش داده شود.
### صفحهی اصلی
کدهای این بخش در فایل `index.php` زده میشود.
کاربر با مشاهده این بخش باید لیست گزینههای موجود و تعداد رایهای داده شده به آنها را مشاهده کند. هر کدام از گزینهها باید یک لینک به صفحهی رایدهی باشند.
### رایدهی
کدهای این بخش در فایل `vote.php` زده میشود.
این صفحه با گرفتن `id` گزینه از طریق `GET` رای کاربر را به گزینهی مورد نظر ثبت میکند، دقت کنید هر کاربر باید حداکثر یکبار قابلیت رایدهی داشته باشد. (برای این موضوع، از کوکیها استفاده کنید.)
## نکات
پروژهی اولیه در زیر قرار گرفتهاست، تنها قسمتهایی که کامنت `TODO: implement` دارند را پیادهسازی کنید و تغییری در بقیهی قسمتهای کد ایجاد نکنید.
[دانلود کدهای اولیه پروژه](http://bayanbox.ir/download/448065591981142964/voting-initial.zip)
دقت کنید هر بخش به شکل جدا نمرهدهی میشود و با پیادهسازی قسمتی از سوال، میتوانید نمرهی آن قسمت را دریافت کنید.
## بارگذاری
فایلهای
`global.php`، `index.php`، `install.php`، `add_option.php` و `vote.php`
را داخل یک فایل زیپ قرار داده و بارگذاری کنید.
سیستم رایدهی
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.
آزمون پایان یافت
آزمون به پایان رسیده است، آیا میخواهید نتیجه آزمون را مشاهده کنید.