?
ابدأ PHP من الصفرحتى لو أول مرة تكتب كود !
شرح مبسّط خطوة بخطوة للمبتدئين — بأمثلة عملية في كل صفحة
Variables المتغيرات 📦
Operators العمليات ➕➖
Data Types أنواع البيانات 🗄️
Forms استقبال بيانات المستخدم 📝
Functions الدوال 🧩
Arrays & Loops المصفوفات والتكرار 🔁
index.php
<?php
echo "Hello PHP !" ;
?>
لا تحتاج خبرة سابقة لو عمرك ما كتبت سطر كود، الملف ده ليك. كل مصطلح هنشرحه بمثال من الحياة.
الكتاب الكامل — 3 أجزاء · 25 صفحة
PHP من الصفر
أمثلة عملية في كل صفحة
شرح سهل بالمصري
3 مشاريع عملية + تمارين
مناسب للمبتدئين تمامًا
1/25 →
?
يعني إيه PHP وبتُستخدم في إيه؟
PHP هي لغة برمجة مفتوحة المصدر (مجانية) بتشتغل على السيرفر (Server-Side )، وبنستخدمها عشان نبني مواقع وتطبيقات ويب ديناميكية — يعني محتواها بيتغيّر حسب المستخدم والبيانات.
ليه الناس بتحبها؟
مفتوحة المصدر ومجانية
سهلة التعلّم للمبتدئين
شائعة جدًا — 75%+ من مواقع الويب بتستخدمها
مجتمع ضخم وأي مشكلة ليها حل على جوجل
يعني إيه ديناميكي؟
موقع ثابت (Static ) = لوحة إعلانات مطبوعة، الكل بيشوف نفس الحاجة. موقع ديناميكي = شاشة بتقول "أهلًا يا أحمد" لأحمد و"أهلًا يا سارة" لسارة. PHP هي اللي بتعمل الفرق ده.
تسجيل الدخول وإنشاء الحسابات
التعامل مع قواعد البيانات (حفظ واسترجاع)
معالجة البيانات اللي المستخدم بيبعتها من النماذج (Forms )
بناء مواقع وأنظمة ويب كاملة (متاجر، مدوّنات، لوحات تحكم)
إرسال الإيميلات، رفع الملفات، إنشاء الـ APIs
مواقع حقيقية مبنية بـ PHP :
WordPress — بيشغّل أكتر من 40% من مواقع الإنترنت
Facebook — اتبنى بـ PHP في بدايته
Wikipedia · Slack · Etsy
وإطارات عمل شهيرة زي Laravel و Symfony
PHP بتشتغل على السيرفر مش على جهازك — والمتصفح عمره ما بيشوف كود PHP ، بيشوف الناتج بس. اللي بيحصل كالتالي:
Browser ① المتصفح يبعت طلب (Request )
→
Server ② السيرفر يشغّل كود PHP وينفّذ المطلوب (يقرأ من قاعدة البيانات مثلًا)
→
③ السيرفر يرجّع صفحة HTML جاهزة تظهر في المتصفح (Response )
تشبيه 🍽️
إنت (المتصفح) بتطلب أكلة من الجرسون. المطبخ (السيرفر) فيه الشيف (PHP ) بيحضّرها. اللي بيوصلك هو الطبق الجاهز (HTML )، مش الوصفة. عشان كده كود PHP بتاعك محمي ومحدش بيشوفه من المتصفح.
الخلاصة : PHP بتساعدنا نبني مواقع وتطبيقات ويب ديناميكية من خلال تشغيل الكود على السيرفر والتعامل مع البيانات وقواعد البيانات.
?
طيب نجهّز الجهاز إزاي عشان نشغّل أول كود؟
3/25 →
?
نجهّز جهازك في 3 خطوات عشان تقدر تشغّل PHP
PHP محتاجة سيرفر عشان تشتغل. مش لازم تأجّر سيرفر حقيقي — هنعمل سيرفر محلي على جهازك ببرنامج واحد مجاني.
برنامج مجاني بيجمع لك Apache (السيرفر) + PHP + MySQL (قاعدة بيانات) في تثبيت واحد. حمّله من apachefriends.org واعمل Next … Next … Finish 😄
بدائل: Laragon (Windows ) · MAMP (Mac ) · أو ثبّت PHP لوحده واستخدم php -S localhost:8000
Apache Running Stop
MySQL — Start
افتح XAMPP Control Panel ودوس Start جنب Apache . لما يبقى أخضر يبقى السيرفر شغّال على جهازك.
يعني إيه localhost ؟ ده عنوان جهازك نفسه. لما تفتح http://localhost إنت بتكلّم السيرفر اللي شغّال عندك.
📁 C:\xampp\
└ 📁 htdocs\
└ 📁 myproject\
└ 📄 index.php
فولدر htdocs هو "بيت" السيرفر. أي ملف تحطه فيه تقدر تفتحه من المتصفح:
localhost/myproject/index.php
Hello PHP !
تقدر تكتب PHP في أي محرر نصوص حتى Notepad ، بس الأفضل VS Code (مجاني): بيلوّن الكود، يكمّل لك الكلمات، ويقولك فين الغلط قبل ما تشغّل. ثبّت إضافة PHP Intelephense وهتبقى جاهز.
⭐ VS Code PhpStorm Sublime Text Notepad++
⚠️ أشهر غلطة للمبتدئين: بيفتحوا الملف بالدبل كليك فيظهر الكود نفسه أو صفحة بيضا. لازم تفتحه من المتصفح عن طريق localhost عشان السيرفر هو اللي يشغّله.
اختبار سريع ✅ اكتب في المتصفح localhost/dashboard — لو ظهرت صفحة XAMPP الترحيبية، يبقى كل حاجة تمام وجاهز تكتب أول كود.
?
جاهز؟ يلا نكتب أول كود PHP في 3 سطور بس!
4/25 →
!
أول كود PHP ليك في 3 سطور!
تعالَ نكتب أول برنامج بسيط. افتح VS Code ، اعمل ملف جديد اسمه index.php جوه htdocs ، واكتب:
<?php بداية كود PHP — بتقول للسيرفر: "من هنا ابدأ تفهم اللي جاي كـ PHP "
echo لعرض النصوص والقيم على الصفحة. أكتر أمر هتستخدمه في حياتك 😄
?> علامة إغلاق PHP — اختيارية لو الملف كله PHP (وبنفضّل نسيبها في الحالة دي)
index.php
1 <?php
2 echo "Hello World!" ;
3 ?>
↓
النتيجة في المتصفح :
http://localhost/index.php
Hello World!
"Hello World!" النص اللي عايزين نعرضه . أي نص لازم يبقى بين علامتي اقتباس " "
; نهاية التعليمة — زي النقطة في آخر الجملة. كل أمر لازم ينتهي بيها
أكتر من سطر
1 <?php
2 echo "أهلًا بيك" ;
3 echo "<br>" ; // سطر جديد في HTML
4 echo "في عالم PHP " ;
5 echo "<h1>عنوان كبير</h1>" ;
http://localhost/test.php
أهلًا بيك
في عالم PHP
عنوان كبير
ملاحظات مهمة:
echo بتطبع كل حاجة جنب بعض — لو عايز سطر جديد استخدم <br>
تقدر تطبع وسوم HTML عادي جوه النص — المتصفح هيفهمها
تقدر تستخدم ' ' أو " " للنصوص (الفرق في الصفحة الجاية)
print بتعمل نفس الحاجة تقريبًا، بس echo أشهر
⚠️ أشهر 3 أخطاء للمبتدئين: نسيان الفاصلة المنقوطة ; في آخر السطر · نسيان $ قبل اسم المتغير · قوس أو اقتباس مش مقفول. ورسالة الخطأ دايمًا بتقولك رقم السطر — ابدأ منه وبص على اللي قبله.
الخلاصة : PHP + echo = أول خطوة لعرض البيانات على الصفحة. الملف لازم امتداده .php ويتفتح من localhost .
?
طيب لو عايز أحفظ قيمة وأستخدمها أكتر من مرة؟
5/25 →
?
يعني إيه Variable وإزاي نخزّن البيانات؟
المتغير = مكان في الذاكرة ليه اسم، بنحفظ جوّاه قيمة، ونقدر نستخدمها أو نغيّرها بعد كده.
القيمة المخزّنة ← "Ali" اسم المتغير ← $name
تشبيه 📦
المتغير زي كرتونة كاتب عليها اسم (label ). تحط جوّاها حاجة، وبعدين لما تحتاجها تنادي باسمها: "هات اللي في كرتونة name ".
index.php
1 <?php
2 $name = "Ali" ;
3 $age = 20 ;
4
5 echo $name;
6 echo "<br>" ;
7 echo $age;
النتيجة
http://localhost/index.php
Ali
20
$name اسم المتغير — دايمًا بيبدأ بعلامة $
= إسناد: "حط القيمة اللي على اليمين في المتغير اللي على الشمال"
"Ali" القيمة المخزّنة — هنا نص (String )
$age متغير تاني باسم مختلف
20 قيمة رقمية (عدد صحيح) — الأرقام من غير اقتباس
مهم: علامة = هنا مش يعني "يساوي" زي الرياضيات، معناها "خزّن". يعني $x = $x + 1 منطقية جدًا: خد اللي في x ، زوّد 1، وخزّنه في x تاني.
لازم يبدأ بعلامة $
بعد الـ $ لازم حرف أو شرطة سفلية _ — مش رقم✔ $user1 ✘ $1user
مسموح: حروف، أرقام، _ — مش مسموح مسافات أو رموز✔ $user_name ✘ $user-name
حسّاس لحالة الأحرف: $name و $Name متغيرين مختلفين!
الخلاصة : Variable = مكان بنخزّن فيه قيمة باسم بيبدأ بـ $ ، ونقدر نستخدمها ونغيّرها بعدين.
?
طيب هل كل البيانات زي بعض؟ النص زي الرقم؟
6/25 →
!
مش كل البيانات زي بعض !
في PHP فيه أنواع مختلفة من البيانات (Data Types )، وكل نوع بيستخدم لهدف معيّن. PHP ذكية وبتحدد النوع لوحدها من القيمة.
لتخزين الكلام والنصوص. دايمًا بين علامتي اقتباس.
1 <?php
2 $name = "Ali" ;
3 $msg = 'Hello!' ;
"Ali"
حتى الرقم لو حطيته بين اقتباس بيبقى نص: "20" نص، 20 رقم.
2
Integer (الأعداد الصحيحة)
أرقام من غير كسور : موجبة أو سالبة أو صفر.
1 <?php
2 $age = 20 ;
3 $temp = -5 ;
20
بنستخدمها للعدّ: عدد المستخدمين، العمر، الكمية…
أرقام فيها كسور عشرية . الفاصل نقطة . مش فاصلة.
1 <?php
2 $price = 99.5 ;
3 $pi = 3.14 ;
99.5
بنستخدمها للأسعار والنسب والقياسات.
قيمة من اتنين بس : true (صح) أو false (غلط).
1 <?php
2 $isStudent = true ;
3 $isAdmin = false ;
أهم نوع في اتخاذ القرارات (الشروط) — هنشوفه بعد شوية.
Array (مصفوفة) قايمة من القيم في متغير واحد:$colors = ["red","blue"]; (الجزء الثاني بالتفصيل)
NULL (لا شيء) متغير معرّف بس ملوش قيمة :$x = null; بيستخدم لما القيمة لسه مش معروفة
Object (كائن) بيانات + وظائف مع بعض. ده عالم البرمجة الكائنية (OOP ) — موضوع متقدم لبعدين 😉
?
طيب إزاي أعرف نوع المتغير؟ وإيه اللي يحصل لو خلطت الأنواع؟
7/25 →
?
إزاي أعرف نوع البيانات ؟وإيه اللي يحصل لو خلطت الأنواع؟
الدالة var_dump() بتطبع لك النوع والقيمة لأي متغير. أداة لا غنى عنها لما تحتار.
types.php
1 <?php
2 $name = "Ali" ;
3 $age = 20 ;
4 $price = 99.5 ;
5 $isStudent = true ;
6
7 var_dump ($name);
8 var_dump ($age);
9 var_dump ($price);
10 var_dump ($isStudent);
النتيجة :
http://localhost/types.php
string(3) "Ali"
int(20)
float(99.5)
bool(true)
string(3) "Ali" نص طوله 3 حروف وقيمته Ali
int(20) عدد صحيح قيمته 20
float(99.5) عدد عشري قيمته 99.5
bool(true) قيمة منطقية صح
كمان في: gettype($x) بترجع اسم النوع بس، و is_int($x) / is_string($x) بترجع true/false .
2
PHP بتحوّل الأنواع لوحدها (Type Juggling )
PHP لغة مرنة : لو عملت عملية حسابية على نص شكله رقم، هتحوّله لرقم أوتوماتيك:
juggling.php
1 <?php
2 $a = "10" ; // نص
3 $b = 5 ; // رقم
4
5 echo $a + $b; // 15 (اتحوّل لرقم وجمع)
6 echo $a . $b; // 105 (دمج نصوص!)
7
8 var_dump ($a == 10 ); // bool(true)
9 var_dump ($a === 10 ); // bool(false)
⚠️ خد بالك من الفرق:
+ = جمع حسابي ← بيحوّل لأرقام
. = دمج نصوص ← بيحوّل لنصوص
نفس المتغيرين، نتيجتين مختلفتين تمامًا (15 و 105)!
التحويل اليدوي (Casting ): لو عايز تتحكم بنفسك:
1 $x = (int ) "42" ; // 42
2 $y = (string ) 42 ; // "42"
3 $z = (float ) "3.5" ; // 3.5
4 $w = (int ) "abc" ; // 0 !
== ولا === ؟ == بتقارن القيمة بس (10 == "10" صح). === بتقارن القيمة والنوع (10 === "10" غلط). استخدم === دايمًا لما تقدر — أأمن.
الخلاصة : String = نص · Integer = عدد صحيح · Float = عدد عشري · Boolean = صح أو غلط · و var_dump() بتكشف لك النوع.
?
طيب إزاي أعمل عمليات حسابية ومقارنات بين القيم؟
8/25 →
?
إزاي تعمل عمليات حسابية ومقارنات في PHP ؟
PHP بتوفّر مجموعة من المعاملات (Operators ) — رموز بتعمل عملية على قيمة أو اتنين وبترجع نتيجة.
1
العمليات الحسابية — Arithmetic
الرمز الشرح المثال
+ جمع 10 + 5 = 15
- طرح 10 - 5 = 5
* ضرب 10 * 5 = 50
/ قسمة 10 / 4 = 2.5
% باقي القسمة 10 % 3 = 1
% مفيد جدًا: $n % 2 == 0 يعني الرقم زوجي.
2
عمليات المقارنة — Comparison
بتقارن قيمتين وبترجع true أو false :
الرمز المعنى مثال (a=10, b=5 )
== متساويان في القيمة $a == "10" → true
=== نفس القيمة والنوع $a === "10" → false
!= غير متساويين $a != $b → true
> أكبر من $a > $b → true
< أصغر من $a < $b → false
>= أكبر من أو يساوي $a >= 10 → true
<= أصغر من أو يساوي $b <= 4 → false
3
معاملات الإسناد المختصرة
بدل ما تكتب $x = $x + 5 فيه اختصار:
الاختصار يساوي
$x += 5 $x = $x + 5
$x -= 5 $x = $x - 5
$x *= 2 $x = $x * 2
$x .= "!" $x = $x . "!"
$x++ $x = $x + 1 (زيادة بواحد)
ops.php
1 <?php
2 $a = 10 ;
3 $b = 5 ;
4
5 echo $a + $b; // 15
6 echo $a % $b; // 0
7 var_dump ($a > $b); // bool(true)
8
9 $a += 3 ; // a بقت 13
10 $a++; // a بقت 14
11 echo $a; // 14
الخلاصة : Arithmetic للحسابات · Comparison للمقارنات ونتيجتها true أو false · والاختصارات زي += و ++ بتوفّر كتابة.
?
طيب لو عايز أجمع شرطين مع بعض؟ "لو العمر أكبر من 18 و معاه بطاقة"
9/25 →
?
إزاي تخلّي برنامجك ياخد قرار ؟
في PHP بنستخدم الشروط (Conditions ) لتنفيذ كود معيّن بناءً على تحقق شرط . من غيرها البرنامج بينفّذ كل السطور بالترتيب وخلاص.
الشروط بتخلّي البرنامج يفحص حاجة معيّنة: لو الشرط صحيح ينفّذ كود، ولو غير صحيح ينفّذ كود تاني (أو ميعملش حاجة).
أشهر الكلمات المستخدمة: if – else – elseif
من الحياة 🌧️
"لو الدنيا بتمطر ← خد شمسية، وإلا ← اطلع عادي" ده بالظبط if / else . البرنامج بيبص على الحالة ويقرر.
الشكل العام:
1 if (الشرط) {
2 // كود ينفّذ لو الشرط صح
3 } else {
4 // كود ينفّذ لو الشرط غلط
5 }
index.php
1 <?php
2 $age = 20 ;
3
4 if ($age >= 18 ) {
5 echo "Adult" ;
6 } else {
7 echo "Minor" ;
8 }
الكود بيقارن قيمة المتغير $age : لو أكبر من أو يساوي 18 يطبع "Adult "، ولو أقل يطبع "Minor ".
النتيجة
http://localhost/index.php
Adult
هل العمر أكبر من أو يساوي 18 ؟
↓
age >= 18
False (غير صحيح)↓ echo "Minor"
if
تُستخدم لتنفيذ كود لو الشرط صحيح
لازم يكون فيها شرط بين قوسين
ممكن تيجي لوحدها من غير else
else
تُستخدم لتنفيذ كود بديل لو الشرط غير صحيح
ملهاش شرط — "في أي حالة تانية"
لازم تيجي بعد if مباشرة
⚠️ غلطة شهيرة: كتابة if ($age = 18) بعلامة واحدة! دي إسناد مش مقارنة، وهتبقى صح دايمًا. المقارنة بـ == أو === .
الخلاصة : Conditions = البرنامج ياخد قرار بناءً على شرط معيّن: if لو صح، else لو غلط.
?
طيب لو عندي أكتر من حالة؟ ممتاز · جيد · مقبول · راسب
10/25 →
?
أكتر من حالة: elseif و switch و الاختصار ?:
لما عندك أكتر من احتمال، بتفحصهم بالترتيب وأول شرط يتحقق بيتنفّذ والباقي بيتتخطّى:
grade.php
1 <?php
2 $grade = 85 ;
3
4 if ($grade >= 90 ) {
5 echo "ممتاز" ;
6 } elseif ($grade >= 75 ) {
7 echo "جيد جدًا" ;
8 } elseif ($grade >= 50 ) {
9 echo "مقبول" ;
10 } else {
11 echo "راسب" ;
12 } // → جيد جدًا
ليه الترتيب مهم؟ 85 أكبر من 50 برضه! بس PHP وقفت عند أول شرط اتحقق (≥ 75 ). لو حطيت ≥ 50 الأول كان هيطبع "مقبول" غلط. ابدأ بالأكبر.
2
switch — لما تقارن قيمة واحدة بحالات كتير
بديل أنضف لسلسلة elseif لما تقارن نفس المتغير بقيم محددة:
day.php
1 <?php
2 $day = "Fri" ;
3
4 switch ($day) {
5 case "Fri" :
6 case "Sat" :
7 echo "ويك إند 🎉 " ;
8 break ;
9 case "Sun" :
10 echo "أول الأسبوع" ;
11 break ;
12 default :
13 echo "يوم عادي" ;
14 } // → ويك إند 🎉
⚠️ متنساش break : من غيرها التنفيذ "بيقع" للحالة اللي بعدها. (استغلّينا ده عمدًا عشان Fri و Sat يدّوا نفس النتيجة.) default = الـ else بتاعة switch .
3
الشرط الثلاثي ?: — if/else في سطر
لما الـ if/else بسيط وعايز تحط النتيجة في متغير مباشرة:
ternary.php
1 <?php
2 $age = 20 ;
3
4 // الشكل: الشرط ? لو_صح : لو_غلط
5 $status = ($age >= 18 ) ? "Adult" : "Minor" ;
6 echo $status; // Adult
استخدمه للحالات البسيطة بس . لو الشرط طويل أو متداخل، if/else العادية أوضح بكتير.
4
الشروط المتداخلة (Nested )
ممكن تحط if جوه if . مثال: لازم يكون مسجّل دخول، وبعدين نشوف هو أدمن ولا لأ:
nested.php
1 <?php
2 $isLoggedIn = true ;
3 $role = "admin" ;
4
5 if ($isLoggedIn) {
6 if ($role === "admin" ) {
7 echo "أهلًا يا مدير 👑 " ;
8 } else {
9 echo "أهلًا بيك" ;
10 }
11 } else {
12 echo "سجّل دخولك الأول" ;
13 }
?
يلا نطبّق كل اللي اتعلمناه في برنامج حقيقي!
11/25 →
!
اعمل برنامج يحدد الطالب ناجح ولا راسب !
لنطبّق ما تعلمناه من المتغيرات والمقارنات والشروط في مثال عملي كامل.
عندنا طالب ونعرف درجته في الامتحان، وعايزين نحدد هو ناجح ولا راسب بناءً على شرط معيّن.
خطة الحل (قبل الكود!): ① نخزّن الدرجة في متغير ② نقارنها بحد النجاح (50) ③ لو أكبر أو تساوي ← ناجح، غير كده ← راسب ④ نطبع النتيجة
index.php
1 <?php
2 $grade = 75 ;
3
4 if ($grade >= 50 ) {
5 echo "Passed" ;
6 } else {
7 echo "Failed" ;
8 }
نخزّن درجة الطالب في متغير، ثم نقارنها بحد النجاح ونطبع النتيجة.
النتيجة
http://localhost/index.php
Passed
$grade = 75; نخزّن درجة الطالب في متغير
$grade >= 50 نقارن الدرجة بحد النجاح (50 أو أكثر)
if لو الشرط صحيح (الدرجة 50 أو أكثر) ينفّذ الكود اللي جوّاه
else لو الشرط غير صحيح (الدرجة أقل من 50) ينفّذ الكود اللي جوّاه
هل درجة الطالب أكبر من أو تساوي 50 ؟
↓
$grade >= 50
🤔 تحدّي صغير: لو غيّرنا قيمة المتغير $grade إلى 40، البرنامج هيطبع إيه؟ ولو خلّيناها 50 بالظبط؟ جرّب وشوف.
الخلاصة : باستخدام الشروط (Conditions ) يمكننا كتابة برامج تتخذ قرار بناءً على شرط معيّن.
?
الجزء الثاني: المصفوفات والتكرار يلا نبدأ!
12/25 →
?
يعني إيه Array ؟وليه مش هنعمل 100 متغير؟
الجزء الثاني يبدأ هنا 🎉 — المصفوفة (Array ) = متغير واحد بيخزّن قايمة من القيم بدل قيمة واحدة. أهم أداة في أي برنامج حقيقي.
عايز تخزّن أسماء 5 طلاب. من غير Arrays هتعمل كده:
bad.php
1 $student1 = "Ali" ;
2 $student2 = "Sara" ;
3 $student3 = "Omar" ;
4 $student4 = "Nour" ;
5 $student5 = "Hana" ;
6 // ولو 1000 طالب؟ 😱
المشكلة: صعب تعدّ، صعب تدوّر فيهم، ومستحيل تكرّر عليهم. ولو عدد الطلاب بيتغيّر؟ هتعدّل الكود كل مرة.
good.php
1 <?php
2 $students = ["Ali" , "Sara" , "Omar" , "Nour" , "Hana" ];
3
4 echo $students[0 ]; // Ali
5 echo $students[1 ]; // Sara
6 echo $students[4 ]; // Hana
7
8 echo count ($students); // 5
الرقم تحت كل خانة اسمه Index — وبيبدأ من صفر مش واحد!
array_ops.php
1 <?php
2 $colors = ["red" , "green" ];
3
4 // إضافة عنصر في الآخر
5 $colors[] = "blue" ;
6 array_push ($colors, "yellow" );
7
8 // تعديل عنصر
9 $colors[0 ] = "pink" ;
10
11 // حذف عنصر
12 unset ($colors[1 ]);
13
14 print_r ($colors);
http://localhost/array_ops.php
Array
(
[0] => pink
[2] => blue
[3] => yellow
)
$arr[] = x أسرع طريقة تضيف عنصر في الآخر
print_r() بتطبع المصفوفة كلها بشكل مقروء (للتجربة)
unset() بتمسح العنصر — لاحظ إن الـ index 1 اختفى ومترقّمش تاني
تشبيه 🚂
المصفوفة زي قطار : متغير واحد (القطار) فيه عربيات كتير، وكل عربية ليها رقم بيبدأ من 0. عايز الراكب اللي في العربية 3؟ $train[3] .
?
طيب لو عايز أسمّي الخانات بدل الأرقام؟
13/25 →
?
المصفوفات بالمفاتيح Associative Arrays
بدل الأرقام 0، 1، 2… تقدر تدّي كل خانة اسم (مفتاح / Key ) من اختيارك. مثالية لتمثيل "شيء" بصفاته: مستخدم، منتج، طلب…
user.php
1 <?php
2 $user = [
3 "name" => "Ali" ,
4 "age" => 20 ,
5 "email" => "ali@mail.com" ,
6 "isAdmin" => false
7 ];
8
9 echo $user["name" ]; // Ali
10 echo $user["email" ]; // ali@mail.com
11
12 $user["age" ] = 21 ; // تعديل
13 $user["city" ] = "Cairo" ; // إضافة مفتاح جديد
"name" المفتاح (Key ) — نص بين اقتباس
=> "يشاور على" — بيربط المفتاح بقيمته
"Ali" القيمة (Value ) — أي نوع
Indexed Associative
المفتاح أرقام تلقائية 0,1,2 أسماء من اختيارك
الاستخدام قايمة من نفس النوع (أسماء، درجات) شيء واحد بصفاته (مستخدم، منتج)
مثال ["Ali","Sara"] ["name"=>"Ali"]
الوصول $a[0] $a["name"]
تشبيه 📇
Indexed = صف من الكراسي مرقّمة. Associative = درج فيه خانات مكتوب عليها "مفاتيح"، "أقلام"، "شواحن" — بتدوّر بالاسم مش بالرقم.
⚠️ خد بالك: لو طلبت مفتاح مش موجود $user["phone"] هتاخد Warning: Undefined array key . اتأكد الأول بـ isset($user["phone"]) .
product.php
1 <?php
2 $product = [
3 "name" => "لابتوب" ,
4 "price" => 25000 ,
5 "stock" => 3 ,
6 "tags" => ["electronics" , "laptop" ]
7 ];
8
9 echo "<h3>{$product['name']}</h3>" ;
10 echo "السعر: {$product['price']} جنيه <br>" ;
11
12 if ($product["stock" ] > 0 ) {
13 echo "متاح ✅ " ;
14 } else {
15 echo "نفد ❌ " ;
16 }
http://localhost/product.php
لابتوب
السعر: 25000 جنيه
متاح ✅
لاحظ: القيمة ممكن تكون مصفوفة تانية (tags ) — ده اسمه مصفوفة متداخلة، وده شكل البيانات الحقيقية في أي موقع.
?
إزاي أكرّر أمر 100 مرة من غير ما أكتبه 100 مرة؟
14/25 →
?
التكرار: for Loop لما تعرف عدد المرات
الـ Loop = "كرّر الكود ده طالما الشرط صح". بدل ما تكتب echo عشر مرات، تكتبها مرة جوه loop وتقول له "عشر مرات".
1 for (البداية; الشرط; الخطوة ) {
2 // الكود اللي هيتكرّر
3 }
for.php
1 <?php
2 for ($i = 1 ; $i <= 5 ; $i++) {
3 echo "رقم $i <br>" ;
4 }
http://localhost/for.php
رقم 1
رقم 2
رقم 3
رقم 4
رقم 5
$i = 1 البداية: بتتنفّذ مرة واحدة بس. بنعمل عدّاد اسمه $i ونبدأه من 1
$i <= 5 الشرط: بيتفحص قبل كل دورة. لو صح ← نفّذ. لو غلط ← اخرج من الـ loop
$i++ الخطوة: بتتنفّذ بعد كل دورة. زوّد العدّاد بواحد
تتبّع التنفيذ:
الدورة $i $i <= 5 ؟ يطبع
1 1 true رقم 1
2 2 true رقم 2
… … … …
5 5 true رقم 5
6 6 false يخرج ⛔
1 // جدول الضرب 7
2 for ($i = 1 ; $i <= 10 ; $i++) {
3 echo "7 × $i = " . (7 * $i) . "<br>" ;
4 }
5
6 // العدّ بالعكس
7 for ($i = 10 ; $i >= 1 ; $i--) {
8 echo $i . " " ; // 10 9 8 ... 1
9 }
10
11 // الأرقام الزوجية بس (خطوة 2)
12 for ($i = 0 ; $i <= 20 ; $i += 2 ) {
13 echo $i . " " ; // 0 2 4 ... 20
14 }
1 $names = ["Ali" , "Sara" , "Omar" ];
2
3 for ($i = 0 ; $i < count ($names); $i++) {
4 echo "$i: {$names[$i]} <br>" ;
5 }
6 // 0: Ali
7 // 1: Sara
8 // 2: Omar
⚠️ ليه < مش <= ؟ المصفوفة فيها 3 عناصر بس آخر index هو 2 (لأننا بنبدأ من 0). لو كتبت <= count() هتحاول توصل لـ index 3 اللي مش موجود ← Warning .
الخلاصة: for مثالية لما تعرف عدد المرات مسبقًا أو محتاج الـ index نفسه.
?
طيب لو مش عارف عدد المرات وعايز أكرّر "لحد ما" حاجة تحصل؟
15/25 →
?
while و do…while كرّر طالما الشرط صح
لما مش عارف عدد المرات مقدّمًا، بس عارف إمتى تقف : "لحد ما الرصيد يخلص"، "لحد ما المستخدم يكتب exit "، "لحد ما نلاقي النتيجة".
1 while (الشرط) {
2 // يتكرّر طالما الشرط صح
3 }
while.php
1 <?php
2 $balance = 100 ;
3 $day = 1 ;
4
5 while ($balance > 0 ) {
6 echo "يوم $day: الرصيد $balance <br>" ;
7 $balance -= 30 ; // صرف يومي
8 $day++;
9 }
10 echo "الرصيد خلص 💸 " ;
http://localhost/while.php
يوم 1: الرصيد 100
يوم 2: الرصيد 70
يوم 3: الرصيد 40
يوم 4: الرصيد 10
الرصيد خلص 💸
1 do {
2 // يتنفّذ مرة على الأقل
3 } while (الشرط);
dowhile.php
1 <?php
2 $tries = 0 ;
3 $password = "1234" ;
4 $input = "0000" ;
5
6 do {
7 $tries++;
8 echo "محاولة $tries <br>" ;
9 // هنا في الواقع بناخد الإدخال من المستخدم
10 if ($tries == 3 ) $input = "1234" ;
11 } while ($input !== $password);
12
13 echo "تم الدخول ✅ " ;
الفرق: do…while بتنفّذ الكود مرة واحدة على الأقل حتى لو الشرط غلط من البداية — لأن الفحص بيحصل في الآخر. مناسبة لـ"اعرض القايمة ثم اسأل: تاني؟"
⚠️ أخطر غلطة: الـ Infinite Loop لو الشرط
عمره ما هيبقى غلط ، البرنامج هيفضل شغّال للأبد ويهنّج السيرفر:
1 $i = 1 ;
2 while ($i <= 5 ) {
3 echo $i;
4 // نسينا $i++ → $i هتفضل 1 للأبد! ♾️
5 }
القاعدة: جوه أي
while لازم في حاجة
بتغيّر الشرط. لو حصلت معاك، اقفل التاب وأوقف
Apache .
استخدم الحالة
for عارف عدد المرات (10 مرات، لكل عنصر في مصفوفة)
while مش عارف العدد، بس عارف شرط التوقف
do…while لازم ينفّذ مرة على الأقل قبل الفحص
foreach بتلف على مصفوفة (الأشهر على الإطلاق)
الحقيقة: أي loop تقدر تكتبها بأي نوع. الاختيار عن الوضوح : اللي بيخلّي الكود أسهل في القراءة.
?
الأهم على الإطلاق للمصفوفات…foreach !
16/25 →
!
foreach — أفضل صديق للمصفوفات
"لكل عنصر في المصفوفة، اعمل كذا". من غير عدّادات ولا index ولا count() — PHP بتمرّ على العناصر واحد واحد لوحدها. 80% من الـ loops اللي هتكتبها هتبقى foreach .
1 foreach ($array as $item) {
2 // $item = العنصر الحالي
3 }
foreach1.php
1 <?php
2 $fruits = ["تفاح 🍎 " , "موز 🍌 " , "عنب 🍇 " ];
3
4 foreach ($fruits as $fruit) {
5 echo "<li>$fruit</li>" ;
6 }
http://localhost/foreach1.php
• تفاح 🍎
• موز 🍌
• عنب 🍇
قارن بالـ for : مفيش $i ولا count() ولا $fruits[$i] . أقصر وأوضح ومفيش فرصة لغلطة الـ index .
1 foreach ($array as $key => $value) {
2 // $key = المفتاح ، $value = القيمة
3 }
foreach2.php
1 <?php
2 $user = [
3 "name" => "Ali" ,
4 "age" => 20 ,
5 "city" => "Cairo"
6 ];
7
8 foreach ($user as $key => $value) {
9 echo "$key: $value <br>" ;
10 }
http://localhost/foreach2.php
name: Ali
age: 20
city: Cairo
3
مع المصفوفات المتداخلة — هنا السحر ✨
table.php
1 <?php
2 $students = [
3 ["name" => "Ali" , "grade" => 85 ],
4 ["name" => "Sara" , "grade" => 92 ],
5 ["name" => "Omar" , "grade" => 47 ],
6 ];
7
8 echo "<table border=1>" ;
9 foreach ($students as $s) {
10 $status = $s["grade" ] >= 50 ? "✅" : "❌" ;
11 echo "<tr><td>{$s['name']}</td>" ;
12 echo "<td>{$s['grade']}</td>" ;
13 echo "<td>$status</td></tr>" ;
14 }
15 echo "</table>" ;
ده بالظبط اللي بيحصل في أي موقع: البيانات جاية من قاعدة البيانات كمصفوفة متداخلة، و foreach بتحوّلها لجدول HTML . لو زاد الطلاب لـ 1000، الكود مش هيتغيّر حرف .
💡 تعديل العناصر أثناء اللف: افتراضيًا $s نسخة. لو عايز تعدّل الأصل حط & : foreach ($arr as &$item)
?
يلا نبني برنامج حقيقي بالمصفوفات والـ loops !
17/25 →
!
مشروع: تقرير درجات الفصل متوسط · أعلى درجة · عدد الناجحين · ترتيب
report.php
1 <?php
2 // 1) البيانات
3 $students = [
4 "Ali" => 85 ,
5 "Sara" => 92 ,
6 "Omar" => 47 ,
7 "Nour" => 78 ,
8 "Hana" => 33 ,
9 ];
10 const PASS = 50 ;
11
12 // 2) الإحصائيات
13 $total = 0 ;
14 $passed = 0 ;
15 $topName = "" ;
16 $topGrade = 0 ;
17
18 foreach ($students as $name => $grade) {
19 $total += $grade;
20 if ($grade >= PASS) $passed++;
21 if ($grade > $topGrade) {
22 $topGrade = $grade;
23 $topName = $name;
24 }
25 }
26 $count = count ($students);
27 $avg = round ($total / $count, 1 );
28
29 // 3) الترتيب تنازلي (مع حفظ الأسماء)
30 arsort ($students);
31
32 // 4) العرض
33 echo "<h3>تقرير الفصل 📊 </h3>" ;
34 echo "عدد الطلاب: $count <br>" ;
35 echo "المتوسط: $avg <br>" ;
36 echo "الأعلى: $topName ($topGrade) <br>" ;
37 echo "ناجح: $passed / راسب: " . ($count - $passed) . "<hr>" ;
38
39 $rank = 1 ;
40 foreach ($students as $name => $grade) {
41 $icon = $grade >= PASS ? "✅" : "❌" ;
42 echo "$rank. $name — $grade $icon <br>" ;
43 $rank++;
44 }
النتيجة :
http://localhost/report.php
تقرير الفصل 📊
عدد الطلاب: 5
المتوسط: 67
الأعلى: Sara (92)
ناجح: 3 / راسب: 2
1. Sara — 92 ✅
2. Ali — 85 ✅
3. Nour — 78 ✅
4. Omar — 47 ❌
5. Hana — 33 ❌
إيه اللي استخدمناه؟
Associative array لربط كل اسم بدرجته
foreach بالمفتاح والقيمة لحساب كل حاجة في لفّة واحدة
متغيرات تراكمية ($total, $passed ) بتتزوّد كل دورة
تتبّع الأعلى : قارن كل درجة بأعلى واحدة شفناها
arsort() للترتيب التنازلي مع حفظ الأسماء
round() لتقريب المتوسط، و ?: للأيقونة
🧪 جرّب تضيف:
أقل درجة ($minName )
نسبة النجاح المئوية
التقدير بجانب كل طالب (ممتاز/جيد/…) باستخدام elseif من الجزء الأول
طالب جديد وشوف الترتيب بيتحدّث لوحده
💡 نمط "التراكم": ابدأ بمتغير = 0، ولفّ وزوّد عليه. ده النمط اللي بتتحسب بيه إجمالي السلة في أي متجر إلكتروني.
?
الجزء الثالث: الدوال والفورم يلا!
18/25 →
?
يعني إيه Function ؟اكتب الكود مرة، واستخدمه 100 مرة
الجزء الثالث 🎉 — الدالة = مجموعة أوامر ليها اسم . بتكتبها مرة واحدة، وبعدين تناديها بالاسم في أي مكان وأي وقت.
عايز تطبع رسالة ترحيب منسّقة في 5 أماكن في الموقع:
1 echo "<div class='box'>أهلًا بيك في موقعنا 👋 </div>" ;
2 // ... سطر 200 ...
3 echo "<div class='box'>أهلًا بيك في موقعنا 👋 </div>" ;
4 // ... سطر 300 ...
5 echo "<div class='box'>أهلًا بيك في موقعنا 👋 </div>" ;
6 // لو عايز تغيّر الرسالة؟ 5 أماكن 😩
قاعدة DRY: Don't Repeat Yourself — لو لقيت نفسك بتنسخ وتلصق نفس الكود، ده وقت الدالة.
greet.php
1 <?php
2 // 1) التعريف (مرة واحدة)
3 function greet() {
4 echo "<div class='box'>أهلًا بيك 👋 </div>" ;
5 }
6
7 // 2) الاستدعاء (أي عدد مرات)
8 greet();
9 greet();
10 greet();
function كلمة محجوزة: "هعرّف دالة"
greet اسم الدالة — نفس قواعد المتغيرات (من غير $ )
( ) الأقواس — هنحط فيها المدخلات بعد شوية
{ } جسم الدالة — الكود اللي هيتنفّذ
3
الفكرة الأهم: التعريف ≠ التنفيذ
order.php
1 <?php
2 echo "1 " ;
3
4 function sayHi() {
5 echo "Hi " ; // مش هيتطبع هنا!
6 }
7
8 echo "2 " ;
9 sayHi(); // هنا بيتطبع
10 echo "3 " ;
http://localhost/order.php
1 2 Hi 3
💡 في PHP تقدر تنادي الدالة حتى قبل سطر تعريفها في الملف — PHP بتقرأ التعريفات الأول.
لما تكتب function greet() {...} مفيش حاجة بتحصل . إنت بس بتعلّم PHP "لو حد نادى greet ، اعمل كده". الكود بيتنفّذ فعليًا لما تكتب greet();
تشبيه 📖
الدالة زي وصفة في كتاب طبخ : كتابة الوصفة مش بتطبخ حاجة. الطبخ بيحصل لما تفتح الكتاب وتنفّذها. وتقدر تنفّذ نفس الوصفة كل يوم.
?
طيب لو عايز الدالة تشتغل على بيانات مختلفة كل مرة؟
19/25 →
?
المدخلات Parameters والمخرجات return
الدالة زي الماكينة : بتحط فيها مدخلات (Parameters )، بتعمل عليها شغل، وبترجّع لك ناتج (return ).
params.php
1 <?php
2 function greet($name) {
3 echo "أهلًا يا $name! <br>" ;
4 }
5
6 greet("Ali" ); // أهلًا يا Ali!
7 greet("Sara" ); // أهلًا يا Sara!
8
9 // أكتر من مدخل
10 function add($a, $b) {
11 echo $a + $b;
12 }
13 add(5 , 3 ); // 8
$name Parameter : متغير "فاضي" في التعريف، بيستقبل القيمة
"Ali" Argument : القيمة الفعلية اللي بتبعتها عند الاستدعاء
قيمة افتراضية: function greet($name = "ضيف") ← لو ناديتها greet() من غير قيمة هتستخدم "ضيف".
بدل ما الدالة تطبع ، خلّيها ترجّع النتيجة. كده تقدر تخزّنها أو تستخدمها في حسابات تانية:
return.php
1 <?php
2 function add($a, $b) {
3 return $a + $b;
4 }
5
6 $sum = add(5 , 3 ); // 8 — اتخزّن
7 echo add(10 , 20 ); // 30 — اتطبع
8 $big = add(1 , 2 ) * 10 ; // 30 — دخل في حسبة
9
10 function isAdult($age) {
11 return $age >= 18 ; // بترجّع true/false
12 }
13 if (isAdult(20 )) echo "بالغ" ;
⚠️ return بتنهي الدالة فورًا: أي كود بعدها جوه الدالة مش هيتنفّذ. ودالة من غير return بترجّع null .
3
echo جوه الدالة ولا return ؟
echo جوّاهاreturn
بتعمل إيه بتطبع على طول بترجّع القيمة للي ناداها
تقدر تخزّن النتيجة؟ لأ أيوه
تستخدمها في حسبة؟ لأ أيوه
مناسبة لـ عرض HTML جاهز أي حسابات أو منطق ⭐
القاعدة الذهبية: خلّي الدالة تحسب وترجّع ، وخلّي الكود اللي بره هو اللي يقرّر يطبع ولا يخزّن. دوال "بترجّع" أسهل في إعادة الاستخدام والاختبار.
💡 تحديد الأنواع (اختياري بس احترافي): function add(int $a, int $b): int { ... } كده PHP بتتأكد إن المدخلات أرقام والناتج رقم.
?
طيب إزاي أخلط PHP مع HTML وأعمل صفحة ويب حقيقية؟
20/25 →
?
دمج PHP جوه HTML الطريقة الصح لبناء صفحة
ملف .php ممكن يحتوي HTML عادي، وتفتح <?php ?> بس في الأماكن اللي محتاج فيها منطق. الفكرة: HTML للشكل، PHP للبيانات.
1
الطريقة الغلط (echo لكل حاجة)
bad.php
1 <?php
2 $title = "منتجاتنا" ;
3 echo "<!DOCTYPE html>" ;
4 echo "<html><head>" ;
5 echo "<title>$title</title>" ;
6 echo "</head><body>" ;
7 echo "<h1>$title</h1>" ;
8 echo "</body></html>" ;
9 ?>
المشكلة: الـ HTML مش بيتلوّن في المحرر، الاقتباسات بتتلخبط، وصعب أي مصمّم يعدّل الشكل.
2
الطريقة الصح (HTML أساسي + PHP جوّاه)
good.php
1 <?php
2 // المنطق فوق
3 $title = "منتجاتنا" ;
4 $products = ["لابتوب " , "ماوس " , "كيبورد " ];
5 ?>
6 <!DOCTYPE html>
7 <html><head>
8 <title><?= $title ?> </title>
9 </head><body>
10 <h1><?= $title ?> </h1>
11 <ul>
12 <?php foreach ($products as $p): ?>
13 <li><?= $p ?> </li>
14 <?php endforeach ; ?>
15 </ul>
16 </body></html>
<?= $x ?> اختصار echo : بيطبع القيمة. نفس <?php echo $x; ?> بس أقصر بكتير
foreach (…): … endforeach; الصيغة البديلة : بدل الأقواس المعقوفة، بتبقى أوضح لما تتخلّل HTML
if (…): … else: … endif; نفس الفكرة للشروط
1 <?php if ($isLoggedIn): ?>
2 <a href="logout.php" >خروج</a>
3 <?php else : ?>
4 <a href="login.php" >دخول</a>
5 <?php endif ; ?>
4
تقسيم الملفات: include / require
الهيدر والفوتر بيتكرّروا في كل صفحة؟ حطّهم في ملفات منفصلة وضمّنهم:
index.php
1 <?php require "header.php" ; ?>
2
3 <h1>الصفحة الرئيسية </h1>
4 <p>المحتوى هنا... </p>
5
6 <?php require "footer.php" ; ?>
لو الملف مش موجود
include Warning ويكمّل
require Error ويوقف (أأمن للملفات الأساسية)
require_once زي require بس مش بيضمّن الملف مرتين (للدوال والإعدادات)
?
دلوقتي نخلّي المستخدم يبعت لنا بيانات!
21/25 →
?
استقبال بيانات المستخدمForms · GET · POST
لحد دلوقتي البيانات كنا بنكتبها إحنا في الكود. الفورم (Form ) هو الباب اللي المستخدم بيبعت منه بياناته للسيرفر — تسجيل، بحث، تعليق، شراء…
form.html
1 <form action ="welcome.php" method ="POST" >
2 <input type="text" name ="username" >
3 <input type="number" name ="age" >
4 <button type="submit" >إرسال</button>
5 </form>
action ملف PHP اللي هيستقبل البيانات
method طريقة الإرسال: GET أو POST
name الأهم! ده المفتاح اللي هتقرأ بيه القيمة في PHP . من غيره البيانات مش بتتبعت
welcome.php
1 <?php
2 $name = $_POST["username" ];
3 $age = $_POST["age" ];
4
5 echo "أهلًا يا $name، عمرك $age سنة " ;
http://localhost/welcome.php
أهلًا يا Ali، عمرك 20 سنة
$_GET و $_POST = مصفوفات associative جاهزة PHP بتملاها أوتوماتيك ببيانات الفورم. المفتاح = الـ name بتاع الـ input .
تشبيه 📬
الفورم = ظرف فيه ورق مكتوب عليه "username: Ali " و"age: 20 ". $_POST = الظرف بعد ما وصل السيرفر وانفتح.
GET POST
فين البيانات؟ في الرابط نفسهpage.php?q=php&page=2 مخفية في جسم الطلب
تظهر للمستخدم؟ أيوه، في شريط العنوان لأ
الحجم محدود (~2000 حرف) غير محدود (ملفات كمان)
ممكن تعمل Bookmark ؟ أيوه لأ
استخدمه لـ البحث والفلترة والترقيم تسجيل، دخول، شراء ، أي بيانات حسّاسة أو بتغيّر حاجة
search.php
1 // الرابط: search.php?q=laptop
2 $q = $_GET["q" ];
3 echo "نتائج البحث عن: $q " ;
القاعدة البسيطة: لو الطلب بيجيب حاجة (بحث، عرض) ← GET . لو بيغيّر حاجة (حفظ، حذف، دخول) ← POST .
💡 $_REQUEST بتجمع الاتنين، بس الأوضح تستخدم المحدد.
?
بس لو المستخدم ساب الخانة فاضية أو كتب كود خبيث؟ 😨
22/25 →
!
متثقش في أي بيانات جاية من المستخدمالتحقق (Validation ) والحماية (Security )
القاعدة رقم 1 في أمان الويب: كل اللي جاي من $_POST و $_GET ممكن يكون غلط أو خبيث . لازم تفحصه قبل ما تستخدمه.
لما تفتح welcome.php مباشرة من غير فورم، $_POST فاضية ← Warning . اتأكد الأول:
1 if ($_SERVER["REQUEST_METHOD" ] === "POST" ) {
2 // الفورم اتبعت فعلًا
3 }
4
5 // أو: الخانة دي موجودة؟
6 if (isset ($_POST["username" ])) {
7 // ...
8 }
1 $name = trim ($_POST["username" ] ?? "" );
2
3 if (empty ($name)) {
4 $errors[] = "الاسم مطلوب" ;
5 } elseif (strlen ($name) < 3 ) {
6 $errors[] = "الاسم قصير جدًا" ;
7 }
?? "" لو المفتاح مش موجود استخدم "" (بدل Warning )
trim() عشان " " (مسافات بس) تتعدّ فاضية
$errors[] نجمع كل الأخطاء في مصفوفة ونعرضها مرة واحدة
1 $email = $_POST["email" ] ?? "" ;
2 $age = $_POST["age" ] ?? "" ;
3
4 if (!filter_var ($email, FILTER_VALIDATE_EMAIL)) {
5 $errors[] = "الإيميل غير صحيح" ;
6 }
7
8 if (!filter_var ($age, FILTER_VALIDATE_INT)
9 || $age < 1 || $age > 120 ) {
10 $errors[] = "العمر غير منطقي" ;
11 }
💡 فيه كمان FILTER_VALIDATE_URL و FILTER_VALIDATE_FLOAT . ولا تعتمد على type="email" في HTML بس — المستخدم يقدر يتخطّاه.
4
④ الحماية من XSS: htmlspecialchars
لو المستخدم كتب في الاسم: <script>alert("hacked")</script> وإنت طبعته بـ echo مباشرة ← المتصفح هينفّذه! ده اسمه هجوم XSS .
1 // خطر ❌
2 echo "أهلًا $name " ;
3
4 // آمن: بيحوّل < > " لرموز بتتعرض كنص ✅
5 echo "أهلًا " . htmlspecialchars ($name);
6
7 // دالة مساعدة تستخدمها في كل مكان
8 function e($s) {
9 return htmlspecialchars ($s, ENT_QUOTES, "UTF-8" );
10 }
11 echo e($name);
القاعدة: أي قيمة جاية من المستخدم وهتتعرض في HTML ← لفّها بـ htmlspecialchars() . من غير استثناء.
?
يلا نجمع كل ده في أول مشروع ويب كامل!
23/25 →
!
المشروع الختامي: فورم تسجيل كامل فورم + تحقق + عرض الأخطاء + رسالة نجاح — في ملف واحد
register.php
1 <?php
2 // دالة تنضيف النص
3 function e($s) {
4 return htmlspecialchars ($s, ENT_QUOTES, "UTF-8" );
5 }
6
7 $errors = [];
8 $success = false ;
9 $name = $email = $age = "" ;
10
11 // لو الفورم اتبعت
12 if ($_SERVER["REQUEST_METHOD" ] === "POST" ) {
13 $name = trim ($_POST["name" ] ?? "" );
14 $email = trim ($_POST["email" ] ?? "" );
15 $age = trim ($_POST["age" ] ?? "" );
16
17 if (strlen ($name) < 3 )
18 $errors[] = "الاسم لازم 3 حروف على الأقل " ;
19 if (!filter_var ($email, FILTER_VALIDATE_EMAIL))
20 $errors[] = "الإيميل غير صحيح" ;
21 if (!filter_var ($age, FILTER_VALIDATE_INT) || $age < 13 )
22 $errors[] = "العمر لازم يكون 13 أو أكتر " ;
23
24 if (count ($errors) === 0 ) {
25 $success = true ;
26 }
27 }
28 ?>
29 <!DOCTYPE html>
30 <html lang="ar" dir="rtl" ><body>
31 <h2>إنشاء حساب</h2>
32
33 <?php if ($success): ?>
34 <p style="color:green" >✅ أهلًا <?= e($name) ?> ، تم التسجيل!</p>
35 <?php else : ?>
36
37 <?php foreach ($errors as $err): ?>
38 <p style="color:red" >❌ <?= e($err) ?> </p>
39 <?php endforeach ; ?>
40
41 <form method="POST" >
42 الاسم: <input name="name" value="<?= e($name) ?> " ><br>
43 الإيميل: <input name="email" value="<?= e($email) ?> " ><br>
44 العمر: <input name="age" value="<?= e($age) ?> " ><br>
45 <button>تسجيل</button>
46 </form>
47
48 <?php endif ; ?>
49 </body></html>
① أول فتح للصفحة
localhost/register.php
إنشاء حساب
الاسم:
الإيميل:
العمر:
تسجيل
② بعت بيانات غلط
localhost/register.php
إنشاء حساب
❌ الاسم لازم 3 حروف على الأقل
❌ الإيميل غير صحيح
الاسم: Al
الإيميل: @ali
العمر: 20
تسجيل
ملف واحد بيعرض الفورم وبيستقبله (action فاضي = نفس الصفحة)
القيم بترجع في الخانات بعد الغلط (value="<?= e($name) ?>" ) — المستخدم مش بيعيد الكتابة
كل عرض لبيانات المستخدم بيمر على e()
الأخطاء متجمّعة في مصفوفة وبتتعرض بـ foreach
🧪 طوّره: ضيف خانة "كلمة السر" وتأكيدها (لازم يتطابقوا و8 حروف+)، وخانة "الدولة" بـ select .
?
مبروك! خلّصت الكتاب 🎉 إيه الخطوة الجاية؟
24/25 →
?
مبروك! خلّصت أساسيات PHP إيه اللي بعد كده؟
✅ الجزء الأول ☑ إيه هي PHP وتجهيز الجهاز ☑ echo · Variables · Constants ☑ Data Types · var_dump ☑ Operators (حسابية · مقارنة · منطقية) ☑ if · elseif · switch · ?:
✅ الجزء الثاني ☑ Indexed · Associative · Multidimensional ☑ دوال المصفوفات ☑ for · while · do…while ☑ foreach ⭐ ☑ break · continue · Nested
✅ الجزء الثالث ☑ Functions · Parameters · return ☑ Scope · الدوال الجاهزة ☑ PHP + HTML · include ☑ Forms · GET · POST ☑ Validation · htmlspecialchars
دالة function f($x) { $x * 2; } — ليه echo f(5) مش بتطبع 10؟
إيه الفرق بين $_GET و $_POST ؟ وأنهي للبحث؟
ليه لازم htmlspecialchars() قبل عرض بيانات المستخدم؟
foreach ($a as $k => $v) — $k و $v إيه؟
إمتى تستخدم require_once بدل include ؟
1) ناقص return — الدالة بترجّع null · 2) GET في الرابط وللقراءة (البحث)، POST مخفي وللتغيير · 3) عشان أي <script> يتعرض كنص مش يتنفّذ (XSS ) · 4) المفتاح والقيمة · 5) للملفات الأساسية (دوال/إعدادات) عشان ميتضمّنش مرتين ويوقف لو مش موجود
2
خريطة الطريق بعد الكتاب 🗺️
① قواعد البيانات — MySQL + PDO دلوقتي بياناتك بتضيع لما تقفل الصفحة. الخطوة الجاية: تحفظها في قاعدة بيانات وتقرأها. (ابحث: PHP PDO tutorial )
② Sessions & Cookies عشان الموقع "يفتكر" المستخدم بعد تسجيل الدخول من صفحة لصفحة. (session_start() و $_SESSION )
③ OOP — البرمجة الكائنية Classes و Objects : الطريقة اللي بتتبني بيها المشاريع الكبيرة. كل اللي اتعلمته هنا هو الأساس ليها.
④ Laravel أشهر إطار عمل PHP . بيوفّر لك الدخول والأمان وقاعدة البيانات جاهزين. متبدأش بيه قبل ما تتقن 1 و 2 و 3.
⑤ مشروع حقيقي مدوّنة بسيطة: مقالات + تعليقات + تسجيل دخول. هتتعلم فيها أكتر من 10 كورسات.
⑥ Git & GitHub احفظ كودك وشاركه. أي وظيفة هتطلب منك حساب GitHub فيه مشاريعك.
💾احفظ الكتاب وارجع له كل ما تحتار — دلوقتي عندك مرجع كامل للأساسيات.
📤ابعته لصاحبك اللي بيبدأ يتعلم البرمجة — ممكن يكون ده أول خطوة في رحلته.
⌨️اكتب الكود بإيدك — متنسخش. الكتابة بتثبّت المعلومة 10 مرات أكتر من القراءة.
25/25 ✓