مشاريع PHP: إنشاء تطبيق لاستطلاع الرأي

⚡ ملخص ذكي

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

  • 🧭 وحدة التحكم الأمامية: تحدد نقطة دخول واحدة في ملف index.php طريقة عرض التطبيق التي سيتم تحميلها، مما يمنح التطبيق مكانًا واحدًا يمكن التحكم فيه لتوجيه الطلبات.
  • 🧠 منطق الأعمال: يتولى صنف النموذج جميع أعمال قاعدة البيانات، ويحتفظ بـping يتم فصل الوصول إلى البيانات عن العرض لتسهيل الصيانة.
  • 🖼️ عرض الملفات: تحتوي ملفات العرض .html.php على نموذج الاستطلاع وصفحة النتائج، حيث تمزج بين HTML وعلامات إخراج PHP صغيرة.
  • 🗃️ جدول قاعدة البيانات: يقوم جدول js_libraries واحد بتخزين كل صوت كرقم اختيار وطابع زمني، ويتم فهرسة كل صوت بواسطة معرف تزايدي تلقائي.
  • ✅ التحقق من الصحة: صغير Javaيقوم برنامج فحص النصوص البرمجية بتنبيه المستخدم عند إرسال النموذج دون تحديد أي مكتبة.
  • 📊 فرز الأصوات: يقوم المتحكم بإدخال التصويت، ثم يقوم بتشغيل استعلامات العد لكل خيار لإنشاء جدول النتائج.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن لأدوات الذكاء الاصطناعي توسيع نطاق هذا الاستطلاع ليصبح تطبيق استطلاع كامل، ومراجعة الكود بحثًا عن الأخطاء والمشاكل الأمنية.

تطبيق استطلاعات الرأي بلغة PHP

كيفية إنشاء تطبيق استطلاع رأي باستخدام لغة 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 الخاص بالناخب إلى جانب الطابع الزمني.
  • اعرض النسب المئوية ومخططًا بيانيًا شريطيًا في صفحة النتائج بدلاً من الأعداد الخام، للحصول على رؤية أوضح للنتيجة.
  • اجعل الاستطلاع ديناميكيًا عن طريق تخزين السؤال والخيارات في قاعدة البيانات، بحيث يمكنك إعادة استخدام الكود لأي استطلاع رأي.

الأسئلة الشائعة

يقوم المتحكم الأمامي بتوجيه كل طلب عبر نقطة دخول واحدة، عادةً ما تكون index.php، والتي بدورها تقوم بتحميل المنطق والعرض المناسبين. وهو يُركز التوجيه والمصادقة والإعدادات المشتركة، ويُعد أساس معظم أطر عمل PHP.

تشمل الأساليب الشائعة وضع ملف تعريف ارتباط بعد التصويت، أو وضع علامة على الجلسة بأنها قد تم التصويت عليها، أو تخزين عنوان IP الخاص بالمصوت والطابع الزمني في قاعدة البيانات. لا يوجد أسلوب مضمون تمامًا، لذا يُنصح بدمج الأساليب، أو اشتراط تسجيل الدخول لمزيد من التحكم.

استبدل الاستعلامات المتسلسلة بعبارات مُجهزة في mysqli أو PDO، مع ربط قيمة التصويت كمعامل. تحقق أيضًا من أن الاختيار هو أحد الأرقام المتوقعة قبل وصوله إلى الاستعلام.

نعم. يمكن للذكاء الاصطناعي إضافة أسئلة متعددة، وخيارات ديناميكية من قاعدة البيانات، ونتائج نسب مئوية مع رسم بياني، وصفحة إدارة. صف الميزات التي تريدها، ثم راجع واختبر الكود المُنشأ قبل نشره.

نعم. قم بلصق النموذج ووحدة التحكم والعروض، وسيتمكن الذكاء الاصطناعي من اكتشاف المتغيرات غير المعرفة، ووسائط الاتصال المفقودة، ومخاطر الحقن، والمخرجات غير المعالجة، ثم يقترح إصدارات مصححة وأكثر أمانًا للاختبار.

تلخيص هذه التدوينة بـ: