مشاريع PHP: إنشاء تطبيق لاستطلاع الرأي
⚡ ملخص ذكي
يقوم مشروع PHP هذا ببناء تطبيق استطلاع رأي من الصفر، جامعًا الدروس السابقة في مثال عملي واحد. يقسم التطبيق إلى وحدة تحكم أمامية، ونموذج منطق أعمال، وملفات عرض، ثم يخزن ويحسب الأصوات للخيار المفضل. Javaمكتبة البرامج النصية في MySQL قاعدة البيانات.

كيفية إنشاء تطبيق استطلاع رأي باستخدام لغة PHP
في مشروع PHP هذا، سنقوم بإنشاء تطبيق لاستطلاعات الرأي.
سيتألف استطلاع الرأي من 3 مكونات رئيسية:
وحدة تحكم أمامية هذه هي صفحة الفهرس التي ستحدد كود HTML الذي سيتم تحميله. وهذا يضمن أن يكون لتطبيقنا نقطة دخول واحدة، مما يمنحنا مزيدًا من التحكم فيه.
منطق الأعمال سيحتوي هذا على كود PHP للتفاعل مع قاعدة البيانات. وهذا يسمح لنا بفصل منطق العمل عن واجهة المستخدم، مما يجعل تطبيقنا سهل الصيانة.
المشاهدات سيحتوي هذا على كود HTML. سيكون لدينا صفحتان، وهما:
- الرأي.html.php – سيحتوي هذا على كود HTML مع السؤال والخيارات
- results.html.php – سيحتوي هذا على كود HTML الذي يعرض نتائج استطلاع الرأي
الافتراضات المقدمة
سيطرح استطلاع الرأي السؤال التالي: ما هو المفضل لديك؟ Javaسيناريو مكتبة؟
ستكون الإجابات كالتالي:
- مسج
- موتولز
- مكتبة YUI
- مجموعة قلو
فيما يلي خطوات إنشاء التطبيق.
الخطوة 1) الاتصال بقاعدة البيانات
هذا القسم يفترض المعرفة MySQL وكيفية استخدامه. إذا لم تكن على دراية بـ MySQL، تحقق لدينا دروس SQL والقسم الخاص به.
سيحتوي تطبيقنا على جدول واحد فقط، بثلاثة حقول، وهي:
- المعرّف – رقم يتم إنشاؤه تلقائيًا كمفتاح أساسي
- الاختيار – الرقم الذي يمثل الاختيار Javaمكتبة البرامج النصية
- ts - الطابع الزمني للتصويت
يقوم البرنامج النصي أدناه بإنشاء جدول js_libraries الخاص بنا.
CREATE TABLE `js_libraries` ( `id` int(11) NOT NULL AUTO_INCREMENT, `choice` tinyint(4) NOT NULL DEFAULT '0', `ts` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) );
الخطوة 2) ترميز تطبيقنا
لنقم الآن بإنشاء طبقة منطق الأعمال التي ستتولى الاتصال بقاعدة البيانات. review_poll_model.php
<?php class Opinion_poll_model { private $db_handle; private $host = 'localhost'; private $db = 'opinion_poll'; private $uid = 'root'; private $pwd = 'melody'; public function __construct() { $this->db_handle = mysqli_connect($this->host, $this->uid, $this->pwd); // connect to MySQL server if (!$this->db_handle) die("Unable to connect to MySQL: " . mysqli_connect_error()); if (!mysqli_select_db($this->db_handle, $this->db)) die("Unable to select database: " . mysqli_error($this->db_handle)); } private function execute_query($sql_stmt) { $result = mysqli_query($this->db_handle, $sql_stmt); // execute SQL statement return !$result ? FALSE : TRUE; } public function select($sql_stmt) { $result = mysqli_query($this->db_handle, $sql_stmt); if (!$result) die("Database access failed: " . mysqli_error($this->db_handle)); $rows = mysqli_num_rows($result); $data = array(); if ($rows) { while ($row = mysqli_fetch_array($result)) { $data = $row; } } return $data; } public function insert($sql_stmt) { return $this->execute_query($sql_stmt); } public function __destruct(){ mysqli_close($this->db_handle); } } ?>
هنا،
- "الوظيفة العامة __construct()" هي طريقة إنشاء الفئة المستخدمة لتأسيس اتصال قاعدة البيانات
- الدالة العامة `execute_query(…)` هي طريقة لتنفيذ استعلامات مثل الإدراج والتحديث والحذف.
- الدالة العامة select(...) هي طريقة لاسترجاع البيانات من قاعدة بيانات وإرجاع مصفوفة.
- "إدراج الوظيفة العامة (...)" هو أسلوب الإدراج الذي يستدعي أسلوب Execute_query.
- "الوظيفة العامة __destruct()" هي أداة تدمير الفئة التي تغلق اتصال قاعدة البيانات.
لنقم الآن بإنشاء وحدة التحكم الأمامية index.php
<?php require 'opinion_poll_model.php'; $model = new Opinion_poll_model(); if (count($_POST) == 1) { echo "<script>alert(1);</script>"; } if (count($_POST) > 1) { $ts = date("Y-m-d H:i:s"); $option = $_POST['vote'][0]; $sql_stmt = "INSERT INTO js_libraries (`choice`,`ts`) VALUES ($option,3)"; $model->insert($sql_stmt); $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries;"; $choices_count = $model->select($sql_stmt); $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow"); $table_rows = ''; for ($i = 1; $i < 5; $i++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model->select($sql_stmt); $table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } require 'results.html.php'; exit; } require 'opinion.html.php'; ?>
هنا،
- "تتطلب 'opinion_poll_model.php'؛" تحميل فئة منطق الأعمال
- "$model = new Opinion_poll_model();" إنشاء مثيل لفئة منطق الأعمال
- "إذا (العدد($_POST) == 1)..." يقوم بالتحقق من صحة البيانات واستخدامها Javaنص برمجي لعرض مربع رسالة في حالة عدم التصويت لأي مرشح.
- يتحقق الشرط "if (count($_POST) > 1)…" مما إذا تم اختيار تصويت من خلال حساب عدد العناصر في مصفوفة $_POST. إذا لم يتم اختيار أي عنصر، فستحتوي مصفوفة $_POST على عنصر الإرسال فقط. أما إذا تم اختيار مكتبة، فستحتوي مصفوفة $_POST على عنصرين: عنصر الإرسال وعنصر التصويت. يقوم هذا الكود أيضًا بإدراج سجل تصويت جديد ثم يعرض صفحة النتائج.
- يتم استخدام "exit;" لإنهاء تنفيذ البرنامج النصي بعد عرض النتائج، بحيث لا يتم عرض نموذج استطلاع الرأي.
- "تتطلب 'opinion.html.php'؛" يعرض نموذج استطلاع الرأي إذا لم يتم تحديد أي شيء.
لنقم الآن بإنشاء العروض. الرأي.html.php
<html> <head> <title>JavaScript Libraries - Opinion Poll</title> </head> <body> <h2>JavaScript Libraries - Opinion Poll</h2> <p><b>What is your favorite JavaScript?</b></p> <form method="POST" action="index.php"> <p> <input type="radio" name="vote" value="1" />JQuery <br /><input type="radio" name="vote" value="2" />MooTools <br /><input type="radio" name="vote" value="3" />YUI Library <br /><input type="radio" name="vote" value="4" />Glow </p> <p><input type="submit" name="submitbutton" value="OK" /></p> </form> </body> </html>
results.html.php
<html> <head> <title>JavaScript Libraries Poll Results</title> </head> <body> <h2>Opinion Poll Results</h2> <p><b>What is your favorite JavaScript Library?</b></p> <p><b><?php echo $choices_count[0]; ?></b> people have thus far taken part in this poll:</p> <p> <table> <?php echo($table_rows); ?> </table> </body> </html>
الخطوة 3) اختبار تطبيقنا
بافتراض أنك قمت بحفظ الملفات في مجلد استطلاعات الرأي، انتقل إلى URL http://localhost/opinionpoll/
إذا نقرت على زر "موافق" دون تحديد مكتبة جافا سكريبت، فستظهر لك نافذة الرسالة التالية.
اختر مكتبة جافا سكريبت، ثم انقر على زر "موافق". ستظهر لك صفحة نتائج مشابهة لتلك الموضحة أدناه.
طرق لتحسين تطبيق استطلاعات الرأي
هذا المشروع أساس متين. ولجعله جاهزاً للإنتاج، يُرجى مراعاة التحسينات التالية:
- استخدم البيانات المعدة مسبقاً في النموذج للقضاء على مخاطر حقن SQL من الاستعلامات المتسلسلة.
- منع التصويت المزدوج باستخدام ملف تعريف الارتباط، أو علامة الجلسة، أو عن طريق تسجيل عنوان IP الخاص بالناخب إلى جانب الطابع الزمني.
- اعرض النسب المئوية ومخططًا بيانيًا شريطيًا في صفحة النتائج بدلاً من الأعداد الخام، للحصول على رؤية أوضح للنتيجة.
- اجعل الاستطلاع ديناميكيًا عن طريق تخزين السؤال والخيارات في قاعدة البيانات، بحيث يمكنك إعادة استخدام الكود لأي استطلاع رأي.



