☰ خطة العام · تكنولوجيا المعلومات والاتصالات (بالعربية)

بوابة AND في صفحة ويب

الأسبوع 10 · الوحدة ٢ الموضوع الثالث: محاكاة بوابة AND كصفحة ويب بلغة PHP: التصميم والكود وشرحه والحالات الأربع · 3 دروس
3

تتبع أربع حالات وجعل الصفحة أكثر أمانًا

ICT Secondary 3 Term 1, Unit 2, Topic 3: pp. 32–39
الهدفتتبّع الحالات الأربع لصفحة AND، ثم اجعل الصفحة أكثر أمانًا بقبول القيمتين on وoff فقط.
كلمات جديدة
قائمة المسموح ⁦(allowed list)⁩ · القيم التي تقبلها الصفحة؛ وما سواها يُستبدل بقيمة آمنة⁦in_array⁩ · تفحص هل القيمة موجودة في قائمة=== · تقارن قيمتين مقارنة صارمة: القيمة نفسها والنوع نفسهالتتبع (trace) · متابعة الكود بمدخلات معطاة وكتابة النتيجة
الشرح

تتبّع الآن الصفحة بالاختيارات الأربعة وبلا Apply أيضًا. لا يضيء المصباح إلا مع on وon. تعمل الصفحة، لكنها تثق بما يصلها. فالمتصفح يستطيع أن يرسل أي نص، لا الخيارات التي عرضناها فقط: قد يرسل زائر، أو برنامج آخر، النص maybe أو ON. وتنسخ الصفحة النص دون فحص، فتتوقف النتيجة على نص لم نخطط له. والنسخة الأكثر أمانًا تحتفظ بقائمة القيم المسموحة on وoff. فإن كانت القيمة المستلمة في القائمة استُعملت، وإلا استُبدلت بـ off. ويستعمل الفحص === لكي لا يُقبل إلا on وoff تمامًا، وتعطي ?? نصًا فارغًا حين تغيب قيمة. والدالة lamp تفعل ذلك كله وتعيد الاختيارين المقبولين والمصباح. وثمة زلة أخرى في صفحة الكتاب تستحق أن نعرفها: إذا كان المصباح نفسه صورة يُنقر عليها فإن النقر يرسل النموذج دون اسم زر Apply، فتنسى الصفحة الاختيارين وتعرض الحالة الابتدائية.

القيمة المستلمةتستعمل الصفحة الأكثر أمانًا
onon
offoff
maybeoff
ONoff
(غائبة)off
أمثلة محلولة
list1list2ماذا تقول الصفحة
offoff⁦The lamp is unlit.⁩
onoff⁦The lamp is unlit.⁩
offon⁦The lamp is unlit.⁩
onon⁦The lamp is lit.⁩
(بلا Apply)(بلا Apply)⁦The lamp is unlit.⁩
الحالات الأربع والزيارة الأولى في جدول لما تقوله الصفحة. شُغّل على صفحة هذا الدرس.
Php
1function lamp(array $post): string {
2    $allowed = ["on", "off"];
3    $first = "off";
4    $second = "off";
5    $state = "unlit";
6    if (isset($post['apply'])) {
7        $first = in_array($post['list1'] ?? "", $allowed, true) ? $post['list1'] : "off";
8        $second = in_array($post['list2'] ?? "", $allowed, true) ? $post['list2'] : "off";
9        $state = ($first === "on" && $second === "on") ? "lit" : "unlit";
10    }
11    return "$first $second $state";
12}
13
14echo lamp([]), "\n";
15echo lamp(['apply' => 'Apply', 'list1' => 'on', 'list2' => 'on']), "\n";
16echo lamp(['apply' => 'Apply', 'list1' => 'on', 'list2' => 'off']), "\n";
17echo lamp(['apply' => 'Apply', 'list1' => 'maybe', 'list2' => 'on']);
Output
off off unlit
on on lit
on off unlit
off on unlit
الدالة الأكثر أمانًا. تعرض أسطر الناتج الاختيار الأول والثاني والمصباح، في الزيارة الأولى، ومع on وon، ومع on وoff، ومع النص maybe في القائمة الأولى.
اقرأ آخر سطر في الناتج: النص maybe ليس في قائمة المسموح، فاستُبدل بـ off، وبقي المصباح مطفأ مع أن القائمة الثانية قالت on.
نشاط الفصل

تتبّع الدالة الأكثر أمانًا على الورق للاستدعاءات الآتية: Apply مع ⁦list1 = off⁩ و⁦list2 = on⁩؛ وApply مع ON وON؛ وApply مع ⁦list2 = on⁩ فقط؛ واستدعاء بلا Apply. اكتب النص المعاد لكل منها.

تدرّب
1
لماذا تعرض الزيارة الأولى مصباحًا مطفأ؟
2
أي عامل تستعمله الدالة الأكثر أمانًا لمقارنة القيم؟
3
ماذا تعيد الدالة الأكثر أمانًا مع off وoff وApply مضغوط؟
4
لماذا لا تثق الصفحة بالقائمتين؟