JS_PHP
JS_PHP
PHP @ @ñ‰ì–Ûa@kíŠÔm@¿@†ÇbŽm@òÇìänß@òîÜàÇ@pbÔîjİm
@ @@ ﻣﻌﻠوﻣﺎتòîäÔm@áÓ
@ @@ @ @ @@ @@ @@@ ﻣﺣﻣد اﻟﺑرﯾﮭﻲ.د
اﻟﺟزء اﻷول
JavaScript
تمهيد :
JavaScript هً لغة برمجة كائنٌة التوجه أو لغة البرمجة الشٌئٌة oop
Objectsتتكون من Attributes
وإذا كانت هذه attributeتحتوي على ، functionففى هذه الحالة تسمى method
وإذا كانت هذه attributeال تحتوي على ، functionففى هذه الحالة تسمى property
: Object Propertiesخصائص الكائن
أنواع بٌانات خصائص الكائن :لد تكون خصائص الكائنات أى نوع من األنواع التالٌة
: primitive data types أنواع البٌانات األولٌة وهى numberو booleanو string
: abstract data types أنواع البٌانات المجردة مثل object
لد تكون خصائص الكائن عبارة عن ٌ local variableتم استخدامها داخلًٌا فً ، methodsولد
تكون global variablesأو ٌ visible variableتم استخدامها بشكل عام خالل الصفحة.
فى السطر السابك حجزنا متغٌر اسمه " "anyNameوخصصنا فٌه لٌمة الخاصٌة
مثال :فى المثال التالى نستخدم الدالة writeلطباعة أى محتوى نرٌده داخل document
: User-Defined Objectsكائنات معرفة من لبل المستخدم
جمٌع الكائنات المعرفة من لبل المستخدم تسمى user-defined objectsوالكائنات المعرفة مسبما ً
داخل اللغة تسمى built-in objectsوهً عبارة عن سالالت للكائن descendants of object
والتى ترث من الكائن الذى ٌسمى ""Object
مثال :
الحظ الناتج
الحظ الناتج
الحظ الناتج
فى المثال السابك نالحظ أننا لد استخدمنا الطرٌمة الثانٌة النشاء كائن create objectثم لمنا
بتخصٌص propertiesوأٌضا ً لمنا بتعٌٌن methodاسمها addpriceللكائن book
ٌ : The 'with' Keywordمكن استخدام الكلمة المحجوزة withكنوع من لالشارة إلى خصائص
الكائن object propertiesأو دوال الكائن object methodsبطرٌمة مختصرة
Object الذى ٌستخدم ٌ withعتبر default objectولذلن ٌمكن استخدام كالً من propertiesو
methodsلهذا الكائن بدون استخدام اسم الكائن naming the objectوبدون استخدام النمطة ( ) .
مثال :
الحظ الناتج
ال داعً للملك بشأن Number Objectألن المتصفح ٌموم تلمائًٌا بتحوٌل المٌم الحرفٌة العددٌة
number literalsإلى فئة المثٌلة العدد instances of the number class
ٌ تم كتابة الرلم بداخل الموسٌن مكان كلمة numberولكن عندما نموم بادخال لٌمة غٌر رلمٌة بٌن
الموسٌن أو ما ٌسمى بالبارامٌتر argumentفلن ٌتم تحوٌل argumentإلى لٌمة رلمٌة وسوف
ٌموم بارجاع لٌمة NaNأى ()Not-a-Number
ال داعً للملك بشأن String Objectألن المتصفح ٌموم تلمائًٌا بتحوٌل بٌن string primitives
وبٌن ، String objectsفٌمكنن استدعاء أي من الطرق المساعدة String objectوتنفٌذها على
.string primitive
ٌ تم كتابة المٌمة النصٌة بداخل الموسٌن مكان كلمة string
البارامٌترات التى نمررها للمصفوفة Array parameterهً عبارة عن listمن السالسل النصٌة
stringsأو األعداد الصحٌحة integers
عند تحدٌد معامالت رلمٌة مفردة باستخدام ، constructorفإنن تحدد الطول المبدئً للمصفوفة.
الحد األلصى المسموح به للمصفوفاتهو هو 4,294,967,295
ٌ بدأ العد أو الفهرسة indexللمصفوفة من الرلم 0
العنصر األول ٌبدأ ب ][0
العنصر الثانى ٌبدأ ب ][1
العنصر الثالث ٌبدأ ب ][2
ال ٌمكن كتابة أكثر من نوع داخل المصفوفة ولكن ٌجب كتابة نوع واحد فمط
: Array Propertiesالخصائص الخاصة بالكائن Array
Property Description
length خبصٞخ ىزؾذٝذ غ٘ه ػْبصش اىَصف٘فخ
prototype خبصٞخ صبثزخ ىينبئْبد رغزخذً ىزؼ ِٞٞخصبئص ٗدٗاه عذٝذح ىينبئْبد فٜ
documentاىؾبىٞخ
constructor خبصٞخ رغزخذً ىزشعغ اىذاىخ اىز ٜأدد إى ٚإّشبء ٕزا اىنبئِ اىقَٞخ االفزشاظٞخ
ْٕب ٕArray object ٚ
input ٕزٓ اىخبصٞخ ٍ٘ع٘دح فقػ ف ٜاىَصف٘فبد اىز ٜرٌ إّشبؤٕب ث٘اعطخ ٍطبثقبد
اىزؼجٞش اىؼبدregular expression matches ٛ
index خبصٞخ رغزخذً ىزشعغ قَٞخ indexػْذ قَٞخ ٍ stringؼِٞ
:Date التارٌخ هو نوع من انواع البٌانات المضمن داخل لغة java script
ٌ تم إنشاء objectمن Dateعن طرٌك ) (new Date
: pattern النمط
هو عبارة عن stringبٌحدد patternللتعبٌر المنطمى regular expression
: attributes الخصائص
هو عبارة عن stringاختٌارى ٌحتوى على 3خصائص وهى :
global matches: "g" التً تحدد مطابمات عالمٌة
case-insensitive matches: "i" التً تحدد مطابمات غٌر حساسة لحالة األحرف
multiline matches : "m" التً تحدد مطابمات مجموعات متعددة
سوف نتعرف على بعض الرموز التى لها معنى داخل لغات البرمجة
أوال ا : Brackets :األلواس المعكوفة ( [ ] )
لها معنى خاص عند استخدامها فً سٌاق التعبٌرات العادٌة حٌث ٌتم استخدامها للعثور على
مجموعة من الحروف range of characters
الحظ الجدول التالى للتعرف على معنى كل Brackets
Expression Description
][... أ ٛؽشف ٗاؽذ ث ِٞق٘عِٞ
][^... أ ٛؽشف ٗاؽذ ىٞظ ث ِٞاألق٘اط
][0-9 ٝزطبثق ٍغ أ ٛسقٌ ػشش 0 ٍِ ٛإى9 ٚ
][a-z ٝزطبثق ٍغ أ ٛؽشف ٍِ أؽشف صغٞشح aإى ٚاألؽشف صغٞشح z
][A-Z ٝزطبثق ٍغ أ ٛؽشف ٍِ األؽشف اىنجٞشح Aإى ٚاألؽشف اىنجٞشح Z
][a-Z ٝزطبثق ٍغ أ ٛؽشف ٍِ أؽشف صغٞش aإى ٚاألؽشف اىنجٞشح Z
كل صفحة وٌب web pageموجودة داخل نافذة المتصفح ٌ browser windowمكن اعتبارها
ككائن object
كل ٌ Document objectعتبر أو ٌمثل HTML documentحٌث ٌتم عرضه داخل window
وٌحتوي Document objectعلى خصائص متنوعة propertiesتشٌر إلى كائنات أخرى
والتى تسمح بالوصول إلى محتوى المستند والتعدٌل علٌه
وٌطلك على الطرٌمة التً ٌتم بها الوصول إلى محتوى المستند والتعدٌل علٌه اسم نموزج كائن
المستند ). Document Object Model(DOM
ٌ تم تنظٌم objectsفً تسلسل هرمً ٌ ، hierarchyتم تطبٌك هذه البنٌة الهرمٌة أو ما ٌسمى ب
hierarchical structureلكى تنظم objectsفً مستند الوٌب .Web document
نستطٌع باستخدام لغة JavaScriptالوصول إلى جمٌع عناصر مستند HTMLوتغٌٌرها وذلن من
خالل استخدام HTML DOM
عند تحمٌل صفحة الوٌب ٌ ،موم browserبإنشاء نموذج كائن المستند DOMالخاص بالصفحة وٌتم
إنشاء نموذج HTML DOMكشجرة من الكائنات tree of objects
باستخدام نموذج الكائن ، object modelتستطٌع لغة javascriptالحصول على جمٌع الصالحٌات
الالزمة إلنشاء HTMLدٌنامٌكً:
تستطٌع JavaScriptتغٌٌر جمٌع العناصر elementsالخاصة ب HTMLفً الصفحة
ٌ مكن لـ JavaScriptتغٌٌر جمٌع الخصائص Attributesالخاصة ب HTMLفً الصفحة
تستطٌع JavaScriptتغٌٌر كل األنماط stylesالخاصة ب CSSفً الصفحة
ٌ مكن JavaScriptإزالة elementsوسمات HTMLالموجودة فى HTMLفً الصفحة
ٌ مكن أن تضٌف JavaScriptعناصر elementsو Attributes
ٌ مكن أن تتفاعل JavaScriptمع جمٌع أحداث HTML eventsالموجودة فً الصفحة
تستطٌع JavaScriptإنشاء HTML eventsجدٌدة فً الصفحة
فً الدروس المادمة من هذا البرنامج التعلٌمً سوف تتعلم اآلتى :
كٌفٌة تغٌٌر محتوى contentعناصر HTML
كٌفٌة تغٌٌر CSS stylesلعناصر HTML
كٌفٌة التفاعل مع DOM HTML events
كٌفٌة إضافة وحذف عناصر HTML
: What is the DOM? ما هو DOM
معٌارا للوصول إلى documents
ً ٌ حدد DOM
ٌ : W3C Document Object Model (DOM) عتبر منصة platformوواجهة عرض
محاٌدة حٌث تسمح للبرامج programsوالبرامج النصٌة scriptsبالوصول والتحدٌث الدٌنامٌكً
لمحتوى المستند contentوبنٌة المستند structureونمط المستند style
ٌ تم فصل معٌار W3C DOMإلى 3أجزاء مختلفة:
- Core DOM نموذج لٌاسً لجمٌع All document types
- XML DOM نموذج لٌاسً ل XML documents
- HTML DOM نموذج لٌاسً ل HTML documents
سوف نشرح كل نوع على حدة فى جزء منفصل خالل الدروس المادمة
إذا كنت ترٌد كتابة scriptبمرونة الستخدام W3C DOMأو IE 4 DOMحسب توفرها ،فٌمكنن
استخدام نهج اختبار المدرة الذي ٌتحمك أوالً من وجود طرٌمة أو خاصٌة لتحدٌد ما إذا كان المتصفح المدرة
التً ترٌدها .على سبٌل المثال -
الدرس الثانً :كائن مستند DOM
ٌ مكن الوصول إلى HTML DOMباستخدام ( JavaScriptوأٌضا ً مع لغات البرمجة األخرى).
دوال HTML DOMتعتبر إجراءات أو احداث actionsالتى ٌمكنن تنفٌذها على عناصر HTML
مثل إضافة addأو حذف delete
خصائص HTML DOMتعتبر لٌم valuesعناصر HTMLالتً ٌمكنن الحصول علٌها getأو
تعٌٌنها setأو تغٌٌرها . change
األحداث HTML DOMتعتبر تفاعل reactionعلى عناصر HTMLمثلما ٌحدث عندما ٌنمر
المستخدم على عنصر .HTML
فى الخاصٌة ٌ querySelectorAllتم تحدٌد selectorعن طرٌك آخر الخواص التالٌة id :أو
typesأو class namesأو attributesأو values of attributesأو أى خاصٌة آخرى
: Changing HTML Elementsكٌفٌة تغٌٌر عناصر HTML
هنان طرق مختلفة لمجموعة من الدوال التى ٌمكن استخدامها لتغٌٌر العناصر
method Description
Element.innerHTML = Content ذغٞٞش HTMLاىذاخي ٜىعْظش HTML
element.attribute = new value ذغٞٞش قَٞح اىخاطٞح ىعْظش HTML
)element.setAttribute(attribute, value ذغٞٞش قَٞح اىخاطٞح ىعْظش HTML
element.style.property = new style ذغٞٞش styleىعْظش HTML
objects هنان خصائص كثٌرة ومختلفة ٌمكن استخدامها للحصول على معلومات عن
property Description
document.anchors[] (1) name حٞ اىخاطٚ عيٛ٘ ذذرٜ> اىرa< ع عْاطشَٞىعشع ج
document.applets[] (1) )HTML5 ٜ> (ٍ٘ق٘فح فapplet< ع عْاطشَٞىعشع ج
document.baseURI للمستندbase URI لعرض
document.body (1) >body< إرجاع العنصر
document.cookie (1) الخاص بالمستندcookie إرجاع
document.doctype إلرجاع نوع المستند
document.documentElement >html< إرجاع عنصر
document.documentMode (الوضع المستخدم) بواسطة المتصفحmode لعرض
document.documentURI الخاص بالمستندURI إرجاع
document.domain (1) document server لخادم المستندdomain إرجاع اسم
document.domConfig )ً (خاصٌة لدٌمة جداDOM ٌرجع تكوٌن
document.embeds[] >embed< لعرض جمٌع عناصر
document.forms[] (1) >form< لعرض كل عناصر
document.head >head< إرجاع العنصر
document.images[] (1) >img< لعرض كل عناصر
document.implementation DOM implementation إرجاع
document.inputEncoding )character set( للوثٌمةencoding لعرض تشفٌر
document.lastModified لعرض التارٌخ والولت الذي تم فٌه تحدٌث المستند
document.links[] (1) href > التً تحتوي علىa< > وarea< لعرض كل عناصر
document.readyState )loading( إرجاع حالة المستند
document.referrer (1) )linking document( للمحٌلURL إرجاع عنوان
document.scripts[] >script< لعرض جمٌع عناصر
document.strictErrorChecking error checking إرجاع إذا تم فرض فحص األخطاء
document.title (1) >title< إرجاع عنصر
document.URL (1) اىناٍو اىخاص تاىَسرْذURL ُىعشع عْ٘ا
(3) والبالً ٌشٌر إلىHTML DOM Level 1 ( تشٌر إلى1):
واآلن سوف نخوض فى بعض األمثلة مع شرح مبسط لخطوات كتابة األكواد عند تنفٌذ مهمة معٌنة
مثال : 1كٌفٌة عرض محتوى contentداخل عنصر innerText
: documentهى root of treeأى هى رأس الشجرة أو رأس الصفحة التى تحتوى على جمٌع
nodes
الناتج
: document objectهذا الكائن ٌمثل مستند صفحة الوٌب الخاصة بن .وإذا كنت ترٌد الوصول إلى
أي عنصر فً صفحة ، HTMLفستبدأ دائ ًما بالوصول إلى كائن المستند.
: innerHTML Propertyهذه الخاصٌة هى أسهل طرٌمة للحصول على محتوى عنصر أو استبدال
محتوى عناصر أو تغٌٌره
مثال : 5إٌجاد العناصر عن طرٌك HTML Object Collections
عند الضغط على Try itسوف ٌظهر جمٌع العناصر الموجودة داخل form
ٌ مكن الوصول إلى HTML objectsأو ( )object collectionsالتالٌة بنفس الطرٌمة التى ذكرناها
فى المثال رلم 5وسوف نذكر أمثلة من مولع w3schools
document.anchors
: length property هذه خاصٌة تستخدم لعرض طول objectأو collectionأى عدد العناصر
الموجودة بداخل الكائن أو المجموعة
document.body
document.embeds
document.head
document.images
document.links
document.scripts
document.title
DOM أمثلة عن كائن مستند: الدرس الثالث
مثال JavaScript HTML DOM Animation : 6كٌفٌة إنشاء رسوم HTMLمتحركة باستخدام
JavaScript
: الناتج
: الناتج
ثالثا ً Create an Animation Container :
الناتج :
عند الضغط على Click Meسوف ٌنتمل المربع األحمر تدرٌجٌا ً بممدار 1 pxفى كل مرة من الجهة
األعلى والجهة الٌسرى معا ً حتى ٌصل للمٌمة 350 pxثم ٌتولف
الدرس الرابع :استخدام األحداث للــ DOM
الناتج :
عند الضغط على محتوى النص الموجود سوف ٌتغٌر المحتوى إلى الشكل التالى :
مثال : 2فً هذا المثال ٌ ،تم استدعاء دالة عن طرٌك معالج االحداث events handler
الناتج :
عند الضغط على محتوى النص الموجود سوف ٌتغٌر المحتوى إلى الشكل التالى :
عند الضغط على " " The time isسوف ٌظهر التارٌخ
مثال ٌ : 4تٌح لن HTML DOMتعٌٌن eventsلعناصر HTMLباستخدام : JavaScript
ٌ تم تعٌٌن دالة باسم displayDateلعنصر HTMLالذى له خاصٌة " id = "myBtnوهذه الدالة تنفذ
عند الضغط على العنصر
الناتج :عند الضغط على " " try itسوف ٌظهر التارٌخ
خالل األمثلة التالٌة سوف نتحدث عن بعض األحداث الشائعة داخل javascriptوسوف نأخذ بعض
األمثلة علٌها (سوف نذكر األمثلة المذكورة فى مولع ) w3schools
الدرس الخامس :استخدام دالة مستمع األحداث للــ DOM
ٌ مكنن إضافة العدٌد من event handlersمن نفس النوع إلى عنصر واحد مثالً ٌمكن إضافة حدثان
من نوع " "clickلعنصر واحد وسوف ٌتم تنفٌذ الحدثان بالتتابع
ٌ مكنن إضافة event listenersإلى أي DOM objectولٌس فمط HTML elementsفمثالً
ٌمكن إضافة event listenerإلى كائن النافذة window object
: addEventListener() هذه الدالة تسهل التحكم فً كٌفٌة تفاعل الحدث مع الفماعات .bubbling
الناتج :عند الضغط على Try itسوف ٌظهر التارٌخ الحالى :
مثال : 2إضافة event listenerللعنصر (الحظ شكل الدالة المستخدمة)
الحظ أن هنان حدثان تم تنفٌذهما على عنصر واحد فمط ،وتم تنفٌذ الحدثان بالتتابع
مثال : 5إضافة العدٌد من event listenersالمختلفة إلى نفس العنصر
: سوف ٌتغٌر لٌمة الرلم العشوائً الحظ اآلتىresize window كلما تغٌر حجم النافذة
مثال : Passing Parameters: 7مثال على تمرٌر المعامالت parameters
عند الضغط على الزرار Try itسوف ٌظهر هذه النتٌجة :
عند تمرٌر لٌم المعامالت استخدم " "anonymous functionالتً تستدعً دالة محددة مع
المعامالت
ما هو Event Bubblingو Event Capturing؟
هنان طرٌمتان النتشار األحداث فً ، HTML DOMوهى االحتواء bubblingوالتماط .capturing
ٌ عد نشر األحداث Event propagationطرٌمة لتحدٌد ترتٌب العناصر element orderعند ولوع
الحدث .فإذا كان لدٌن عنصر < >pداخل عنصر < ، >divوكان المستخدم ٌنمر على العنصر <، >p
فأى عنصر ٌجب معالجة حدث " "clickله أوالً؟
فً حالة ٌ : bubblingتم التعامل أوالً مع حدث العنصر الداخلى innerثم الخارجً : outerحٌث
تتم معالجة حدث النمر على عناصر < >pأوالً ،ثم حدث النمر على العنصر <.>div
فً حالة ٌ : capturingتم التعامل أوالً مع حدث العنصر الخارجً outerثم الداخلً : innerحٌث
ٌتم التعامل مع حدث النمر على عنصر < >divأوالً ،ثم حدث النمر لعنصر <.>p
باستخدام الدالة ()ٌ addEventListenerمكنن تحدٌد نوع االنتشار propagation typeباستخدام
المعامل " "useCaptureوالتى تكون لٌمتها trueأو false
: الناتج
الشرح :
فى حالة : Bubbling
عند الضغط على "! "Click meالموجود بداخل Bubblingفسوف تظهر هذه الرسالة
oالحظ انه تم تنفٌذ الكود الخاص بالعنصر الداخلى أوالً ،ثم ٌنفذ الكود الموجود على العنصر
الخارجً بعد ذلن
oالحظ انه تم تنفٌذ الكود الخاص بالعنصر الخارجً أوالً ،ثم ٌنفذ الكود الموجود على العنصر
الداخلى بعد ذلن
فى حالة الضغط على العنصر الخارجً فى كال الحالتٌن سوف ٌتم تنفٌذ الكود الخاص بالعنصر
الخارجً
مثال : removeEventListener(): 9مثال على حذف event listener
هذه الدالة )( removeEventListenerتستخدم إلزالة event listenersالتً تم إرفالها مع الدالة
)(addEventListener
عندما ٌتحرن المؤشر على مستوى myDivفسوف ٌموم عند كل حركة بتولٌد رلم عشوائً جدٌد
وعند الضغط على removeفسوف نموم بإزالة event listenerولذلن عندما ٌتحرن المؤشر ال
ٌتولد لٌم جدٌدة
مالحظة مهمة :
)(removeEventListener والدالة الدالة )(addEventListener
ال ٌتم دعم الدوال )( addEventListenerو )( removeEventListenerفً IE 8واإلصدارات السابمة.
ومع ذلن ،بالنسبة لهذه اإلصدارات الخاصة بالمتصفح ٌ ،مكنن استخدام الدلة )( attachEventإلضافة
event listenerبالعنصر ،والدالة )( detachEventإلزالتة : event listener
(DOM Navigation )
node relationships باستخدامnode tree ً ٌمكنن التنمل ف، HTML DOM باستخدام
HTML document فإن كل شًء داخلW3C HTML DOM standard وفمًا: DOM Nodes
: كاآلتىnode بمثابة عمدة
document node ً هentire document
element node هوHTML element كل
text nodes ً هtext inside HTML elements النص داخل العناصر
) (ولكن تم إٌمافهاattribute node ًهHTML attribute كل
comment nodes ً هcomments جمٌع
بواسطة لغةnode tree ً فnodes ٌمكن الوصول إلى جمٌع، HTML DOM باستخدام
.JavaScript
أو حذفهاmodified وٌمكن تعدٌل جمٌع العمد، New nodes وٌمكن أٌضا ً إنشاء عمد جدٌدة
.deleted
nodes العاللات بٌن العمد: Node Relationships
مع بعضهاhierarchical relationship لها عاللة هرمٌةnode tree الموجودة داخلnodes
.البعض
لوصف العاللات الحظsibling واألشماءchild والطفلparent تستخدم مصطلحات الوالدٌن
nodes وصف العاللة الهرمٌة لل
)root node( أوroot تسمى الجزرtop node العمدة العلٌا، node tree ً ف
parent لٌس لهاroot باستثناء، واحد بالضبطparent لهاnode كل
children ٌمكن أن ٌكون لها عدد من األطفالnode
parent التى لها نفسnodes (اإلخوة أو األخوات) همSiblings األشماء
From the HTML above you can read: ٚذٟو اىشنو ماَٞنِ ذذيٝ ٍِ اىشنو اىساتق
and:
firstChildتستخدم هذه الخاصٌة للحصول على أول عنصر للـ parent
lastChildتستخدم هذه الخاصٌة للحصول على آخر عنصر للـ parent
nextSiblingتستخدم هذه الخاصٌة للحصول على العنصر التالى للـ parent
previousSiblingتستخدم هذه الخاصٌة للحصول على العنصر السابك للـ parent
مثال :
فى المثال السابك ،ال تحتوى element nodeأى > <titleعلى textوإنما تحتوى على عمدة
النص text nodeولٌمة text nodeهى ""DOM Tutorial
ٌ مكن الوصول إلى لٌمة text nodeمن خالل الخاصٌة innerHTML
الوصول إلى الخاصٌة innerHTMLهو نفس الوصول إلى node Valueالخاصة بـالطفل األول
first child
ٌ مكن أٌ ً
ضا الوصول إلى الطفل األول first childعلى النحو التالً:
مثال : 2
مثال : 3
فً هذا البرنامج التعلٌمً ،نستخدم خاصٌة innerHTMLالسترداد محتوى عنصر HTMLومع
ذلن ،فإن تعلم الطرق األخرى مفٌد لفهم بنٌة الشجرة tree structureوالتنمل فً .DOM
: DOM Root Nodesالعمد الخاصة بالجزر root
هنان نوعان من الخصائص الخاصة التً تسمح بالوصول إلى المستند الكامل:
The body Property
: document.body تستخدم هذه الخاصٌة للحصول نص المستند الموجود بداخل > <bodyفمط
The documentElement Property
: document.documentElement تستخدم هذه الخاصٌة للحصول المستند الكامل الموجود
بداخل ><html
مثال : 1
مثال : 1
أهم أنواع العمد هً :
الشرح :
تم إهمال النوع 2فً ( DOM HTMLلكنه ٌعمل) .لم ٌتم إهمالها فً .XML DOM
الدرس السابع :العُـقـد
)(DOM Nodes
فى هذا الدرس سوف نتعلم كٌفٌة إضافة nodesجدٌدة وكٌفٌة حذف nodesموجودة بداخل المستند
مثال :
الشرح :
أوالً :تم إنشاء عنصر جدٌد اسمه > <pعن طرٌك الدالة createElement
ثانٌا ً :تم إنشاء عمدة نص text nodeعن طرٌك الدالة createtextNode
رابعا ً :نلحك العنصر الجدٌد بالعنصر الموجود الذى نرٌده عن طرٌك خطوتٌن :
الخطوة األولى :نحدد العنصر الموجود عن طرٌك الدالة getElementById
الخطوة الثانٌة :نلحك العنصر الجدٌد بالعنصر الموجود عن طرٌك الدالة appendChild
مثال :
تم إضافة خطوة جدٌدة وهى تحدٌد العنصر الذى نرٌد إضافة العنصر الجدٌد لبله
: Removing Existing HTML Elementsإزالة عناصر موجودة أو nodes
إلزالة عنصر ٌ ، HTMLجب علٌن معرفة أصل العنصر parent
مثال :
الشرح :
أوالً :تم تحدٌد parentعن طرٌك الدالة getElementById
الشرح :
أوالً :تم تحدٌد parentعن طرٌك الدالة getElementById
ثالثا ً :تم إنشاء عنصر جدٌد اسمه > <pعن طرٌك الدالة createElement
مالحظة :
نالحظ أننا عندما نرٌد استبدال لمنا بعمل عنصر جدٌد وأضفنا له نص ثم لمنا باستبداله بالعنصر
المدٌم
الدرس الثامن :المجموعات والقوائم داخل DOM
مثال :
فى المثال السابك نالحظ أن الدالة )( getElementsByTagNameتموم بإرجاع مجموعة من
العناصر التى نوعها > <pوتموم بحجزها داخل متغٌر myCollection
ٌ مكن الوصول إلى العناصر الموجودة فً المجموعة عن طرٌك رلم الفهرسindex number
وٌبدأ الفهرس من المٌمة 0
ٌمكنن استخدام الخاصٌة lengthعلى HTMLCollectionوتكون هذه الخاصٌة مفٌدة عندما ترٌد
التكرار خالل العناصر داخل المجموعة
مثال :
عند الضغط على الزرار Try itسوف ٌتغٌر لون كل عنصر من نوع ><p
لد ٌبدو HTMLCollectionوكأنه مصفوفة ، arrayلكنها لٌست كذلن .حٌث ٌمكنن عمل
تكرار loopخالل المائمة listواإلشارة إلى العناصر برلم (مثل المصفوفة) .ومع ذلن ،ال ٌمكنن
استخدام دوال المصفوفات مثل )( valueOfو )( popو () pushمع .HTMLCollection
: The NodeList Objectكائن NodeList
كائن NodeListعبارة عن لائمة ( listأو )collectionمن العمد nodesالمستخرجة من المستند
كائن NodeListهو تمرٌبا ً نفس كائن .HTMLCollection
بعض المستعرضات (األلدم) تموم بإرجاع كائن NodeListبدالً من HTMLCollectionلبعض
الدوال مثل )(getElementsByClassName
جمٌع المتصفحات تموم بإرجاع كائن NodeListللخاصٌة childNodes
معظم المستعرضات تموم بإرجاع كائن NodeListللدالة )(querySelectorAll
مثال :
فى المثال السابك نالحظ أن الدالة )( querySelectorAllتموم بإرجاع مجموعة من العناصر
التى نوعها > <pوتموم بحجزها داخل متغٌر myNodelist
ٌ مكن الوصول إلى العناصر الموجودة فً المجموعة عن طرٌك رلم الفهرسindex number
وٌبدأ الفهرس من المٌمة 0
ٌمكنن استخدام الخاصٌة lengthعلى NodeListوتكون هذه الخاصٌة مفٌدة عندما ترٌد التكرار
خالل العناصر داخل المجموعة
لد ٌبدو NodeListوكأنه مصفوفة ، arrayلكنها لٌست كذلن .حٌث ٌمكنن عمل تكرار loop
خالل المائمة listواإلشارة إلى العناصر برلم (مثل المصفوفة) .ومع ذلن ،ال ٌمكنن استخدام دوال
المصفوفات مثل )( valueOfو )( popو () pushمع .NodeList
الفرق بٌن الكائن HTMLCollectionوبٌن الكائن NodeList؟
HTMLCollection عبارة عن مجموعة من HTML elements
سا (الفهرس ٌبدأ من المٌمة ) 0للوصول إلى كل عنصر مثل المصفوفة .
ٌ وفر كالهما فهر ً
ٌ HTMLCollection مكن الوصول إلى عناصرها حسب nameأو idأو index number
NodeList ال ٌمكن الوصول إلى عناصرها إال عن طرٌك index numberفمط
ٌ NodeList مكن أن ٌحتوي فمط على attribute nodesو text nodes
الدرس التاسع :مقدمة فى نموزج كائن المتصفح (المستعرض)
)Introduction to Browser Object Model (HTML BOM
كل صفحة وٌب web pageموجودة داخل نافذة المتصفح ٌ browser windowمكن اعتبارها
ككائن object
وبعدما شرحنا نموزج كائن المستند DOMفى الجزء الرابع نأتى اآلن إلى شرح نموزج كائن
المستعرض BOM
ٌ تٌح نموذج كائن المستعرض ) Browser Object Model (BOMالتحدث إلى المستعرض.
مثال :
الناتج :
هذه المٌم لٌست ثابتة وإنما تتغٌر مع تغٌر حجم النافذة (أى عند عمل )resize
ٌ عرض المثال السابك لٌم االرتفاع والعرض لنافذة المتصفح ( :لٌس بما فً ذلن أشرطة األدوات
toolbarsوأشرطة التمرٌر )scrollbars
ٌ : Other Window Methodsوجد مجموعة من الدوال التى ٌمكن استخدامها معWindow
: open() تستخدم هذه الدالة لفتح نافذة جدٌدة
: close() تستخدم هذه الدالة لغلك النافذة الحالٌة
: moveTo() تستخدم هذه الدالة بتحرٌن النافذة الحالً
: resizeTo() تستخدم هذه الدالة بتغٌٌر حجم النافذة الحالٌة
الدرس العاشر :كائن الشاشة
()Screen object
: screen.availWidth تستخدم هذه الخاصٌة لتحدٌد عرض شاشة الزائر بالبكسل بدون خصائص
الواجهة interface featuresمثل شرٌط مهام النافذة .Windows Taskbar
: screen.availHeight تستخدم هذه الخاصٌة لتحدٌد ارتفاع شاشة الزائر بالبكسل بدون
خصائص الواجهة interface featuresمثل شرٌط مهام النافذة .Windows Taskbar
: screen.colorDepth تستخدم هذه الخاصٌة لتحدٌد عدد bitsالمستخدمة لعرض لون واحد
ٌ وجد مجموعة مختلفة من األنظمة المستخدمة فى أجهزة الكمبٌوتر :
تستخدم كافة أجهزة الكمبٌوتر الحدٌثة أجهزة 24bitsأو 32bitsلدلة األلوان:
24 bits = 16,777,216 different "True Colors"
32 bits = 4,294,967,296 different "Deep Colors"
تستخدم أجهزة الكمبٌوتر المدٌمة :16bits
16bits = 65,536 different "High Colors" resolution
تستخدم أجهزة الكمبٌوتر المدٌمة جدًا والهواتف المحمولة المدٌمة :8bits
8 bits = 256 different "VGA colors"
الناتج :
مالحظة :
لٌم ) #rrggbb(rgbالموجودة داخل HTMLهى عبارة عن " "True Colorsأى أنها 24 bits
24 bits = 16,777,216 different "True Colors"
بالنسبة ألجهزة الكمبٌوتر الحدٌثة ٌ ،تساوى كالً من الخاصٌتٌن Color Depthو .Pixel Depth
الدرس الحادي عشر :كائن الموقع
()Location object
: The window.location Object كائن المولع
ٌ مكن استخدام كائن window.locationللحصول على عنوان الصفحة الحالً ( )URLوإعادة
توجٌه المستعرض إلى صفحة جدٌدة .redirection a page
ٌ مكن كتابته بدون استخدام كلمة windowبهذا الشكل location
: location.hostname تستخدم هذه الخاصٌة للحصول على اسم المجال domain name
لمضٌف الوٌب web host
: location.pathname تستخدم هذه الخاصٌة للحصول على المسار واسم الصفحة الحالٌة
: location.protocol تستخدم هذه الخاصٌة للحصول على بروتوكول الوٌب web protocol
المستخدم ( http:أو ) https:
:location. port تستخدم هذه الخاصٌة لتحدٌد رلم منفذ مضٌف اإلنترنت (من الصفحة الحالٌة) او
ما ٌسمى ب the number of the internet host port
: location.assign تستخدم هذه الخاصٌة لتحمٌل مستند جدٌد loads a new document
مثال : 1
الناتج :
عند الضغط على الزرار Load new documentسوف ٌموم بتحمٌل صفحة جدٌدة التى لها
هذا المسار أو urlالتالى https://www.w3schools.com :
الدرس الثانً عشر :كائن التارٌخ
()History object
: The window.history Object كائن التارٌخ
ٌ حتوي الكائن window.historyعلى محفوظات المستعرضات browsers history
ٌ مكن كتابته بدون استخدام كلمة windowبهذا الشكل history
لحماٌة خصوصٌة المستخدمٌن ، users privacyتوجد لٌود limitationsعلى كٌفٌة وصول
JavaScriptإلى هذا الكائن.
مثال :
الناتج :
الدرس الثالث عشر :كائن ال ُمستعرض
()Navigator object
: The window.navigator Object كائن المستعرض
ٌ حتوي كائن window.navigatorعلى معلومات حول متصفح الزائر visitor's browser
ٌ مكن كتابته بدون استخدام كلمة windowبهذا الشكل navigator
:navigator. appVersion تستخدم هذه الخاصٌة للحصول على معلومات اإلصدار version
حول المستعرض
:navigator. product تستخدم هذه الخاصٌة لتحدٌد اسم المنتج product nameلمحرن
المستعرض browser engine
:navigator. language تستخدم هذه الخاصٌة لتحدٌد لغة المتصفح browser's language
:navigator. userAgent تستخدم هذه الخاصٌة لتحدٌد عنوان عامل المستخدم او ما ٌسمى ب
user-agent headerالمرسل من لبل المستعرض browserإلى الخادم server
:navigator. online تستخدم هذه الخاصٌة تحدٌد اتصال المتصفح باإلنترنت online
بترجع : trueفى حالة اتصال المتصفح باإلنترنت browser is online
بترجع : falseفى حالة عدم اتصال المتصفح باإلنترنت browser is offline
:navigator. cookieEnabled تستخدم هذه الخاصٌة لتحدٌد إذا تم تمكٌن cookieأو ال
بترجع : trueفى حالة أنه تم تمكٌن ملفات االرتباط cookies are enabled
بترجع : falseفى حالة أنه لم ٌتم تمكٌن ملفات االرتباط cookies are not enabled
:navigator. javaEnabled() تستخدم هذه الدالة لتحدٌد إذا تم تمكٌن javaأو ال
بترجع : trueفى حالة أنه تم تمكٌن أو تفعٌل java
بترجع : falseفى حالة أنه لم ٌتم تمكٌن أو لم ٌتم تفعٌل java
الناتج :
الدرس الرابع عشر :المربعات ال ُمنبثقة Dialog
()Popup Boxes
فى هذا الفصل سوف نتعرف على كٌفٌة استخدام المربع المحورى وسوف نتعرف على انواع مربعات
الحوار فى لغة javascript
تدعم لغة JavaScriptثالثة أنواع مهمة من مربعات الحوارٌ .مكن استخدام مربعات الحوار هذه
لعمل رسالة تنبٌه alertأو الحصول على تأكٌد confirmationعلى أي إدخال أو الحصول على
نوع من المدخالت inputsمن المستخدمٌن.
عند الضغط على " "Click Meسوف ٌظهر رسالة تحذٌرٌة كمربع محورى dialog boxهذا
المربع مكتوب بداخله الرسالة التالٌة " !"This is a warning message
عند الضغط على الزرار " " Okسوف تظهر النتٌجة التالٌة
النوع الثانى : confirmation Dialog Box :
ٌتم استخدام مربع حوار التأكٌد فً الغالب للحصول على موافمة المستخدم على أي خٌار
وٌحتوى هذا المربع على 2 buttons
األول Ok :إذا لام المستخدم بالنمر فوق هذا الزر ،buttonفإن الدالة )( confirmتموم
بإرجاع لٌمة .true
الثانً Cancel :إذا لام المستخدم بالنمر فوق هذا الزر ،buttonفإن الدالة )( confirmتموم
بإرجاع لٌمة .false
: confirm("string") هذه الدالة تظهر رسالة تأكٌد وبتأخذ لٌمة نصٌة string
سوف تظهر النتٌجة على المتصفح كاآلتى :
عند الضغط على " "Click Meسوف ٌظهر رسالة تأكٌد كمربع محورى dialog boxهذا المربع
مكتوب بداخله الرسالة التالٌة " ? " Do you want to continue
عند الضغط على الزرار " " Okسوف تظهر النتٌجة التالٌة
عند ادخال لٌمة نصٌة مثال " "Mahmoudولمنا بالضغط على الزرار " " Okسوف تظهر
النتٌجة التالٌة
عند ادخال لٌمة نصٌة مثال " "Mahmoudولمنا بالضغط على الزرار " " Cancelسوف تظهر
النتٌجة التالٌة
هذه الدوال السابمة )( alertو )( promptو )( confirmهى دوال تنتمى للكائن windowلذلن
ٌمكن كتابتها بهذا الشكل :
window.alert()
window.prompt()
window.confirm()
الدرس الخامس عشر :األحداث المرتبطة بالوقت
()Timing Events
ٌ مكن تنفٌذ JavaScriptفً الفترات الزمنٌة time-intervalsوهذا ما ٌسمى أحداث التولٌت
timing eventsأى أحداث ٌتم تنفٌذها مع مرور الولت أو عند ولت معٌن أو عند فترات زمنٌة
ٌ سمح كائن windowبتنفٌذ التعلٌمات البرمجٌة فً فترات زمنٌة محددة.و تسمى هذه الفترات الزمنٌة
أحداث التولٌت timing events
هنان دالتان رئٌسٌتان تستخدم مع JavaScriptلتنفٌذ التعلٌمات البرمجٌة فى فترات زمنٌة محددة :
: window.setTimeout(function, milliseconds) -1
تستخدم هذه الدالة لتنفٌذ ، functionبعد فترة زمنٌة ( انتظار عدد محدد من المللً ثانٌة ).
إلٌماف تنفٌذ هذه الدالة نستخدم الدالة ) window.clearTimeout(variableوهذا المتغٌر
variableهو لٌمة المتغٌر الذي تم إرجاعه من الدالة )(window.setTimeout
الناتج :عند الضغط على Try itسوف ٌتم تنفٌذ الدالة myFunctionبعد مرور 3ثوانً
مثال : 2
تم تصمٌم cookieفً األصل لبرامج ٌ .CGIتم نمل البٌانات الموجودة فً داخل cookieتلمائًٌا
بٌن متصفح الوٌب وخادم الوٌب ،بحٌث ٌمكن CGI scriptsالموجودة على الخادم لراءة وكتابة
لٌم cookieالمخزنة على العمٌل.
ضا معالجة ملفات تعرٌف االرتباط باستخدام خاصٌة cookie property ٌ مكن لـ JavaScriptأٌ ً
الموجودة بعنصر المستند .Document objectتستطٌع JavaScriptلراءة ملفات تعرٌف
االرتباط التً تنطبك على صفحة الوٌب الحالٌة وإنشائها وتعدٌلها وحذفها.
تموم ملفات التتبع cookieبتسجٌل 5حمول متغٌرة الطول variable-length fields
ٌ : Name=Value -1تم تعٌٌن setملفات تعرٌف االرتباط واستردادها retrieveفً شكل
أزواج لٌم مفتاحٌة key-value pairs
: Expires -2معناها انتهاء الصالحٌة ومن خاللها ٌمكن تعٌٌن تارٌخ انتهاء صالحٌة ملف تعرٌف
غا ، blankفستنتهً صالحٌة ملف تعرٌف االرتباط الذى سوف ٌنتهى فٌه .وإذا كان هذا فار ً
االرتباط عند مغادرة الزائر المتصفح.
: Domain -3معناها المجال ومن خاللها ٌتم تحدٌد اسم المجال الخاص بمولعن.
: Path -4معناها المسار ومن خاللها ٌتم تحدٌد المسار إلى directoryأو صفحة الوٌب التً
تحدد ملف تعرٌف االرتباط.و لد ٌكون هذا فار ً
غا blankإذا كنت ترٌد استرداد ملف تعرٌف
االرتباط من أي دلٌل أو صفحة.
: Secure -5معناها آمن فإذا كان هذا الحمل ٌحتوي على كلمة " ، "secureفٌمكن استرداد ملف
تعرٌف االرتباط فمط من خالل خادم آمن . secure serverوإذا كان هذا الحمل فار ً
غا ،فال
ٌوجد مثل هذا المٌد.
: expires هذه الخاصٌة اختٌارٌة .فإذا لدمت بتعٌٌن بتارٌخ أو ولت صالح لهذه الخاصٌة ،
فحٌنئذ سوف تنتهً صالحٌة cookieفً التارٌخ أو الولت الذى تم تعٌٌنه ،وبعد ذلن لن ٌتم
الوصول إلى لٌمة . cookie
عند ادخال لٌمة " "mahmoudسوف ٌظهر لنا النتٌجة كاآلتى :
: Deleting a Cookieتحدٌد تارٌخ انتهاء صالحٌة cookies
فً بعض األحٌان ،ستحتاج إلى حذف cookieال ترجع لنا أى لٌمة ،وٌتم ذلن عن طرٌك تعٌٌن ولت
ماضً للخاصٌة ""expires
مثال :من على مولع tutorialspoint
عند ادخال لٌمة " "mahmoudسوف ٌظهر لنا النتٌجة كاآلتى :
اﻟﺟزء اﻟﺛﺎﻧﻲ
PHP
المحتويات
الصفحة الموضوع
١ تمھيد
ما ھي PHP
) PHPترمز إلى ( PHP:Hypertext Preprocessorعبارة عن لغة برمجة مفتوحة المصدر تُستخدم بشكل
واسع ألغراض متعددة ،و صُممت خصيصا لتطوير مواقع إنترنت تفاعلية .و تختلف PHPعن JavaScriptفي
أن الشفرة البرمجية يتم تنفيذھا على الخادم web serverو من ثم يُرسل ناتج التنفيذ على ھيئة HTMLللمستخدم.
ما ھي مميزاتھا
تتميز PHPبعدد من المزايا منھا:
.١يمكن تنفيذھا على العديد من أنظمة التشغيل منھا
أMicrosoft Windows -
بLinux -
تUnix -
ثMac OS X -
٢ الفصل األول :تمھيد
تدعم العديد من خوادم الويب كـ Apacheو .IIS .٢
تدعم العديد من أنظمة قواعد البيانات كـ .٣
أOracle -
بMySql -
تSQL Server -
ثMicrosoft Access -
جPostgre SQL -
تدعم البرمجة الكينونة object oriented programmingوالبرمجة االجرائية procedural- .٤
programmingو يمكن الخلط بينھما.
ال تدعم PHPعرض البيانات على ھيئة HTMLفقط بل يمكن عرض البيانات على ھيئة صورة PDF ، .٥
أو حتى اخراج البيانات على ھيئة ملفات فالش.
متطلبات PHP
قبل أن نستطيع تنفيذ ملفات PHPسنحتاج إلى خادم serverو ذلك ألن PHPمن لغات برمجة الخادم server side
. scripting
لغات البرمجة النصية : Scripting Languagesيقصد بھا لغات البرمجة عالية المستوى و التي يتم
تفسيرھا عن طريق برنامج آخر وقت التنفيذ Run Timeبدال من عملية الترجمة و التي تتم بواسطة معالج
الكمبيوتر كما ھو الحال في لغات برمجة كـ Cو .C++من أمثلة ھذا النوع . Javascript,PHP,ASP,JSP,Perl
االباتشي Apacheعبارة عن خادم ويب وظيفته األساسية استقبال الطلبات Http Requestو تسليمھا إلى محرك
الشفرة Script Engineو من ثم الحقا يقوم Apacheباستالم الرد Http Responseمن محرك الشفرة و
تسليمھا الى مرسل الطلب على ھيئة .HTMLوقد صمم االباتشي ليعمل مع نظام التشغيل يونكس . Unixالحقا تم
تھيئته للعمل مع نظام التشغيل ويندوز Windowsوبعض أنظمة التشغيل الخاصة بالشبكات.
و يمتاز خادم األباتشي بمجموعة المزايا و اإلمكانيات منھا:
إمكانية عمل صفحات خطأ مخصصة .Customized error pages
إمكانية إخفاء عناوين االنترنت .URL
سجالت األخطاء و االستخدام بأكثر من ھيئة.
و يمكن الحصول على نسخة من البرنامج من خالل زيارة موقع فريق عمل االباتشي التالي:
. http://httpd.apache.org/download.cgi
MySqlعبارة عن نظام قواعد بيانات مفتوح المصدر .و تصنف MySqlعلى انھا من أنظمة إدارة قواعد البيانات
صممت للعمل مع االستعالمات المعقدة و األحمال الثقيلة .كما تتيح إمكانية ربط عدد كبير من العالئقية ُ RDBMS
الجداول ببعضھا البعض للوصول إلى أعلى قدر من الكفاءة و السرعة.
أخيرا يمكن تحميل نسخة من البرنامج من خالل الرابط التالي:
. /http://dev.mysql.com/downloads
٣ الفصل األول :تمھيد
برنامج XAMMP
الكثيرون يعرفون أن عملية تركيب خادم ويب Apacheو تھيئته للعمل مع PHPو MySqlليست بالعملية السھلة
و دائما ما تستھلك وقت و جھد للتوفيق بينھا .لذلك يأتي دور برنامج XAMMPو الذي جعل من عملية التركيب تتم
بشكل سھل و سريع جدا .يمكن تحميل نسخة من البرنامج من خالل الرابط التالي:
. http://www.apachefriends.org/en/xampp.html
تحميل XAMMP
تركيب XAMMP
بعد االنتھاء من تحميل برنامج XAMMPسنبدأ اآلن في خطوة تركيب البرنامج و الذي سيقوم بتھيئة ، Apache
PHPو MySqlللعمل معا .خطوات التركيب:
.١انقر بزر الفأرة االيسر مرتين على ايقونة البرنامج.
.٢أول نافذة ھي نافذة تحديد اللغة و التي من خاللھا سنختار الخيار االفتراضي Englishو من ثم نضغط
.Nextو من النافذة التالية نضغط على Nextأيضا.
.٣في النافذة التالية نحدد مكان مسار البرنامج ) و يفضل .(C:\xampp
٤ الفصل األول :تمھيد
.٤النافذة التالية من خاللھا نحدد ما إذا كنا نرغب في تركيب Apacheو Mysqlكخدمة Serviceمن
خدمات ويندوز ،بمعنى أنھما سيعمالن بمجرد تشغيل نظام التشغيل.
.٥بعد ذلك سيقوم البرنامج باستخراج و تركيب الملفات المطلوبة .و من ثم عند االنتھاء ستظھر النافذة التالية و
التي ستخبرنا بانتھاء عملية التركيب بنجاح و نستطيع تشغيل لوحة تحكم البرنامج بالضغط على زر .Yes
٥ الفصل األول :تمھيد
.٦بعد االنتھاء من تركيب XAMMPسنقوم بفتح متصفح االنترنت و كتابة العنوان التالي:
. http://localhostعندھا ستظھر صفحة إختيار اللغة لتطبيق XAMPPو التي من خاللھا سنقوم
بإختيار اللغة االنجليزية Englishلكي ننتقل الى الصفحة الرئيسية لـ .XAMMP
٦ الفصل األول :تمھيد
يمكن تغيير المجلد الجذر من خالل تغيير القيمة االفتراضية المحددة في ملف إعدادات االباتشي و الموجودة
في c:\xammp\apache\conf\httpd.confو تغيير قيمة لـ . DocumentRootأخيرا ال تنسى القيام
بإعادة تشغيل االباتشي لكي تصبح التغييرات الجديدة نافذة.
تطبيق عملي
قم بفتح برنامج .Notepad++بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة .قم بكتابة الشفرة التالية:
><html
><head
><tilte> </tilte
></head
><body
آ آ د>"<font color="blue >PHP</font
><p
<?php
;' echo 'PHP
>?
></p
></body
></html
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . test.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التالي http://localhost/test.php :و من ثم
الحظ الناتج.
أخيرا ،اضغط على زر الفأرة األيمن )على نافذة المتصفح ( و من ثم اختر عرض المصدر ، view sourceأو من
القائمة المنسدلة عرض viewاختر المصدر ) sourceقد تختلف من متصفح آلخر ( ،ماذا تالحظ؟
٧ الفصل األول :تمھيد
.٣أين سيتم حفظ ملفات PHPلكي نتمكن من عرضھا الحقا .و كيف سيتم استدعاء الصفحة؟
.٥قم بتحميل برنامج XAMMPو تركيبه على جھازك الشخصي متبعا خطوات التركيب المذكورة سابقا.
٨ الفصل الثاني :أساسيات PHP
ھذا الفصل يغطي:
كما ذكرنا سابقا ،تعتبر PHPمن لغات برمجة جھة الخادم .Server-side programmingبمعنى أن
خادم الويب Apache Web Serverيقوم بإرسال شفرة PHPإلى محرك الشفرة PHP script engine
و الذي يقوم بتنفيذ الشفرة و من ثم إرجاع نتيجة التنفيذ إلى خادم الويب و الذي يقوم بإرجاع ناتج التنفيذ الى
جھاز العميل و غالبا يكون على ھيئة ) HTMLراجع الرسم التوضيحي في الفصل السابق( .و لكي يتمكن
خادم الويب من فھم و معالجة شفرة PHPالبد من إخباره بأن صفحة االنترنت تحتوي على شفرة .PHPو
لتحقيق ذلك يجب أن نتبع الخطوات التالية:
.١يجب حفظ صفحة االنترنت بامتداد .phpمثال index.php
.٢يجب حصر شفرة PHPبين وسوم .PHP
<?php
>?
وسوم PHP
<?phpلضمان عدم حصول مشاكل تتعلق بالتوافقية و ينصح دائما باستخدام الطريقة القياسية >?
compatibilityو ألن كل خوادم الويب web serversتدعم العمل بھا.
٩ الفصل الثاني :أساسيات PHP
تتطلب PHPأن يتم إنھاء أغلب تعليماتھا بواسطة فاصلة منقوطة );( .وسم إغالق ?> PHPيشتمل على فاصلة
منقوطة لذلك ليس ھناك حاجة إلنھاء آخر سطر من شفرة PHPبواسطة فاصلة منقوطة.
<?php
;'echo 'This is a test
>?
)ا"!ر(php.net
التعليقات )(Comments
إلدراج تعليق في سطر واحد فقط ،نستخدم ) (//أو ) .(#أما في حالة الرغبة في إدراج تعليق ألكثر من سطر واحد
فنستخدم ).(/* */
<?php
*/
' &
أآ* )(
% */
>?
يقصد بعبارة ) تعليق ،(commentكل تعليمة سيتجاھلھا مفسر) (Parserلغة PHPأثناء عملية التنفيذ.
يتم استخدام االقواس الكبيرة عند الحاجة لتنفيذ مجموعة من األوامر في حالة محددة .كما في حالة الدوال functions
أو جمل الشرط condition statementsأو حلقات التكرار .loops
<?php
) if( $i > 2
{
//Statement1
//Statement2
}
>?
PHPو HTML
><html
><head><title>PHP inside HTML</title
></head
><body
> ' </h1ا <h1>,% - .
<?php
; "ه 12ا -ا0وecho "/
>?
></body
></html
.٢أن يتم كتابة HTMLداخل عبارة echoأو الدالة printلكن البد أن تكون محصورة بين عالمات
االقتباس المفردة أو المزدوجة.
<?php
;'>echo '<html
;'></title></headا -ا*echo '<head><title>3
;'>print '<body
ه 12ه ا -ا* 3و ا !ل ) /وprint '<h1> 3
;'>PHP</h1
;'>echo'</body></html
>?
١١ الفصل الثاني :أساسيات PHP
عند كتابة أي شفرة برمجية باستخدام PHPينصح األخذ في االعتبار تحسين مظھر الشفرة المكتوبة .و يتم ذلك عادة
بإضافة مسافة محددة )أربع خانات مثال( قبل كل تعليمة تكون تابعة للتعليمة التي تسبقھا باإلضافة إلى استخدام
التعليقات . comments
<?php
ه2ا ا - B)3م @ر ? ا> // x
;$x=5
)if(x < 1
; " echo " x is less than 1
else
; " echo " x is bigger than 1
>?
علما أن تنسيق شفر PHPليس له أي تأثير في عملية التنفيذ .لكنھا مفيدة في :
echoو print
لطباعة النتائج في PHPنستطيع استخدام إما echoأو . printوالفرق الوحيد بينھما أن printتعتبر من دوال
PHPبينما echoتُعتبر من تصاريح ) PHPراجع المثال في الصفحة السابقة(.
عالمة االقتباس المفردة ) ' ( Single quoteو المزدوجة )'' (Double quotes
عند التعامل مع النصوص يجب أن يتم تضمينھا بين عالمات االقتباس المفردة أو المزدوجة .و الفرق بين
العالمتين ھو أن المفسر PHP interpreterسيقوم بالتعامل مع أي بيانات موضوعة بين عالمة االقتباس
المفردة و كأنھا نص عادي .بينما في حالة عالمة االقتباس المزدوجة فسيقوم المفسر بالبحث عن أي
متغيرات أو حروف خاصة لكي يقوم بمعالجتھا.
><html
><head><title>Single and Double quotes</title
></head
><body
<?php
;$x = 1
;" >echo " x =\t$x <br/
;' >echo ' x =\t$x <br/
>?
></body></html
١٣ الفصل الثاني :أساسيات PHP
PHPمن لغات البرمجة الحساسة لحالة الحرف .بمعنى أن $xتختلف عن $Xو ) ( testتختلف أيضا عن ) (Test
و ھكذا.
<?php
;$number = 60
;echo'$number='.$number
;echo'<br>$number='.$Number
>?
$number=60
=$number
بدال من الطريقة القياسية لتنفيذ ملفات PHPو التي نستخدم فيھا متصفح االنترنت ،نستطيع تنفيذ شفرة PHPمن
خالل موجه األوامر .و الطريقة كالتالي:
.١قم بكتابة شفرة PHPالتالية:
<?php
;'…echo 'executing PHP in command line
>?
>C:\xampp\php
١٤ الفصل الثاني :أساسيات PHP
.٦قم بكتابة شفرة ، PHPالغرض منھا طباعة اسمك .مع االخذ في االعتبار ضرورة أن يظھر االسم
.٧صح أم خطأ:
المتغيرات variables
المتغير ھو عبارة عن حاوية containerتستخدم لحفظ البيانات بشكل مؤقت .في PHPيمكن أن تحتوي المتغيرات
على أي نوع من البيانات كاألرقام أو النصوص أو المصفوفات .و تعتبر PHPمن اللغات الغير صارمة من ناحية
نوع البيانات .loosely typedبمعنى أن نوع البيانات يختلف باختالف القيمة المخزنة داخل المتغير.
عملية إعطاء المتغيرات قيم تتم بطريقة سھلة في . PHPكل ما علينا عمله ھو استخدام رمز المساواة ) = ( .عند
استخدام ھذا الرمز تتم عملية اسناد القيمة الموجودة في اليسار الى المتغير الموجود في الطرف االيمن.
><html
><head><title>Variables</title
></head
><body
<?php
;" )$name = " T ! !S
>?
><b> #) </b> <h4> <?php echo $name; ?> </h4
></body></html
<?php
إ ء )> ? //
;$now = 2012
تدعم PHPميزة أخرى عند التعامل مع المتغيرات و ذلك عن طريق االسناد بواسطة المرجع .بمعنى أن المتغير
الجديد يقوم باإلشارة إلى المتغير األساسي .ولإلسناد بواسطة المرجع نقوم بإدراج العالمة & قبل اسم المتغير الذي
ستتم االشارة إليه .في ھذه الحالة ستصبح المتغيرات مرتبطة ببعضھا البعض.
<?php
;'$foo = 'Bob // Assign the value 'Bob' to $foo
;$bar = &$foo // Reference $foo via $bar.
$bar = "My name is $bar<br/>"; // Alter $bar...
;echo $bar
;echo $foo // $foo is altered too.
>?
١٧ الفصل الثالث :التعامل مع المتغيرات و الثوابت
تدعم PHPالعديد من أنواع البيانات .data typesو يمكن تصنيف أنواع البيانات في PHPإلى ثالث فئات:
أنواع بيانات بقيمة واحدة scalarو تنقسم إلى أربعة أقسام:
int رقم صحيح بدون فاصلة عشرية كـ ٤٥٦٠
float رقم صحيح بفاصلة عشرية كـ ٤٥٫٣٢٥
string بيانات ثنائية كالنصوص أو الصور ....الخ
boolean قيمة تحتمل أن تكون TRUEأو FALSE
<?php
;$valid_student = TRUE
;$student_id = 181280000
;$student_gpa = 3.75
;$student_phone=null
;)"$student_courses = ("cs101","cs102","cs103
>?
١٨ الفصل الثالث :التعامل مع المتغيرات و الثوابت
كما سبق وأن اشرنا بأن PHPمن اللغات التي ال تفرض تحديد نوع بيانات المتغير عند تعريفه كما ھو الحال في
لغات البرمجة كـ Cو .javaلكن مفسر اللغة PHP interpreterيقوم بتحديد نوع البيانات تلقائيا استنادا على القيمة
المخزنة في المتغير .لكن قد نحتاج في بعض الحاالت لفرض نوع بيانات محدد.
<?php
!د $value1 = 10; // OSP
!د OSPي $value2 = 20.38; //
;$value3 = $value1 + $value2
;echo $value3
>?
30.38
و كما ھو مالحظ فإن ناتج المتغير $value3عبارة عن رقم صحيح عشري .floatو في حال أردنا أن يكون الناتج
عدد صحيح فإننا نقوم بفرض نوع البيانات intكما يلي:
<?php
!د $value1 = 10; // OSP
!د OSPي $value2 = 20.38; //
;$value3 = $value1 + $value2
echo $value3.'<br/>';// before type casting
echo (int)$value3; // type casting
>?
30.38
30
على عكس المتغير و الذي من الممكن أن تتغير قيمته في أثناء سير البرنامج ،فإن الثابت يحتوي على قيمة ثابتة ال
تتغير .و لتعريف الثابت في PHPيجب األخذ في االعتبار مايلي:
إتباع القواعد الخاصة بتعريف المتغير باستثناء عالمة $و التي ليست مطلوبة مع الثوابت.
استخدام الدالة ) (.define
ينصح عند تسمية الثوابت بأن تكتب بأحرف كبيرة . capital letters
<?php
$x = 20 + 14 ; addition الجمع
$x = 30 – 10 ; subtraction الطرح
$x = 12 * 10 ; multiplication الضرب
$x = 30 / 10 ; division القسمة
$x = 10 % 3 ; modulus باقي القسمة
<?php
// `Sآ ا') )} ا')|ت ا
$num1 = 10;
$num2 = 3;
echo $num1 * $num2;
echo '</br>'.$num1 / $num2;
echo '</br>'.$num1 % $num2;
?>
30
3.3333333333333
1
٢٠ الفصل الثالث :التعامل مع المتغيرات و الثوابت
عند التعامل مع المعامالت الحسابية في ،PHPفإننا نتبع نفس القواعد المتبعة مع العمليات الحسابية في علم الحساب.
لذلك عند تنفيذ أي عملية حسابية ،يجب األخذ في االعتبار أسبقية المعامالت من حيث التنفيذ .الجدول التالي يوضح
ترتيب المعامالت وفقا ألسبقيتھا في التنفيذ.
أعلى )(
* / %
أقل + -
معامالت الزيادة ) (++و معامالت النقصان) (--من الممكن أن تأتي قبل أو بعد المتغير .في حال أتيا قبل المتغير
فستتم عملية الزيادة أو النقصان بمقدار ) ( ١قبل إجراء أي عملية على المتغير .و على العكس تماما إذا أتى أيا ً من
المعاملين بعد المتغير سيتم إجراء أي عملية على المتغير و من ثم ستتم عملية الزيادة أو النقصان.
<?php
;$num1 = 10
;$num2 = 3
تتيح PHPلنا مقارنة المتغيرات أو القيم عن طريق استخدام معامالت المقارنة .الجدول التالي يوضح معامالت
المقارنة في :PHP
من الجدول السابق يجب اإلشارة إلى أن المقصود بالتماثل ،Identicalھو أن تكون المتغيرات متساوية في القيمة و
من نفس نوع البيانات .data type
عالمة )=( المفردة ال تستخدم في عملية المقارنة ،تستخدم فقط عند إسناد القيم للمتغيرات.
تُستخدم المعامالت المنطقية عادة مع الشروط المركبة و تكون النتيجة إما TRUEأو . FALSE
يُستخدم المعامل @ في PHPإلجبار مفسر اللغة interpreterبمنع عرض رسائل الخطأ error
messagesأو التحذير warning messagesللمستخدم.
<?php
*/
& ه 12ا - ( Sم )` ا> 'ض ر %ا 2Sا )(
)Sو ا / `-ا" و ا` -% 30ا> @ )' x
*/
;@$x = 10/0
;echo $x
>?
٢٢ الفصل الثالث :التعامل مع المتغيرات و الثوابت
تطبيق عملي
في ھذا التطبيق سنقوم بتعريف اربع متغيرات aو bو cو . dو سنقوم بإسناد القيم التالية للمتغيرات على التوالي:
PHP
40
25.32
TRUE
سنستعين في ھذا التطبيق بالدالة ) ( gettypeو التي تقوم بإرجاع نوع البيانات و من ثم طباعة الناتج .قم بفتح برنامج
Notepad++ثم قم بكتابة الشفرة التالية:
<?php
ه ? ' uا>ات ا //
;'$a = 'PHP
;$b = 40
;$c = 25.32
;$d = TRUE
*/
)(!% ? gettypeء ا!ا
-3م 'ض 3ع ا3ت )>
*/
;'>"echo'<table border="1" dir="rtl" align="center
;'> 3:'.gettype($a).'</td></trع $a R 3ا>>echo'<tr><td
;'> 3:'.gettype($b).'</td></trع $b R 3ا>>echo'<tr><td
;'> 3:'.gettype($c).'</td></trع $c R 3ا>>echo'<tr><td
;'> 3:'.gettype($d).'</td></trع $d R 3ا>>echo'<tr><td
;'>echo'</table
>?
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . variables.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التالي http://localhost/variables.php :و
من ثم الحظ الناتج.
٢٣ الفصل الثالث :التعامل مع المتغيرات و الثوابت
.١قم بكتابة برنامج يقوم بتحويل العملة من دوالر امريكي الى ﷼ سعودي .علما بأن سعر صرف
في ھذه الحالة سيتم تنفيذ الجزء التابع لجملة ifإذا كان ناتج الشرط .TRUEبخالف ذلك سيتم تنفيذ الجزء البرمجي
التابع لـ :else
<?php
;$student_mark = 73
)if($student_mark <60
{
;"هـ" = $result
}
)elseif($student_mark<70
{
;"د" = $result
}
)elseif($student_mark<80
{
;"ج" = $result
}
)elseif($student_mark<90
{
;"ب" = $result
}
else
{
;"أ" = $result
}
;'>";echo'<div style="direction:rtl
;!- : '.$resultك & ادة ه ' echo
;'>echo'</div
>?
تستخدم جملة القرار switchكبديل لجملة الشرط . if elseفي حالة جملة switchنقوم باختبار قيمة متغير ما مقابل
مجموعة من القيم .الصيغة العامة لجملة القرار switchكالتالي:
٢٦ الفصل الرابع :التحكم في سير البرنامج
)switch(variable
{
case value1:
ا د ا2ي # & 2%ل آ ? t3ا> `وي ه 12ا//-
;break
case value2:
ا د ا2ي # & 2%ل آ ? t3ا> `وي ه 12ا//-
;break
………
………
default:
`وي ? ا> ا )( ا// - ا د ا2ي # & 2%ل
ا`-
}
المتغير الذي سيتم اختبار قيمتة سيوضع بين القوسين التابعين لـ . switchأما العبارة caseفتمثل القيمة أو القيم التي
سيتم اختبار قيمة المتغير مقابلھا .بعد ادخال المتغير المراد اختباره سيقوم مفسر PHPباختبار قيمة ذلك المتغير
مقابل كل جملة . caseفي حال كانت نتيجة اختبار ايا من جمل caseتساوي TRUEسيقوم مفسر PHPبتنفيذ
الشفرة التابعة لھا حتى يصل عند جملة ،breakبعد ذلك سيقوم بالخروج من جملة .switch
لكن ما الذي سيحدث في حال نسي المبرمج كتابة عبارة breakألي من عبارة case؟
في ھذه الحالة ،سيقوم مفسر PHPبتنفيذ الشفرة البرمجية و التوقف عند أقرب عبارة breakحتى و ان كانت تتبع
لعبارة caseاخرى.
اخيرا ،اذا لم يجد مفسر PHPايا من جمل caseقيمتھا تساوي قيمة المتغير المراد اختباره ،سيقوم المفسر بتنفيذ
الشفرة التابعة لعبارة .default
<?php
دا ار )(/* date
- timestampم Sا ا)
"> ر ? -اءة
*/
;)"$d=date("D
;'>";echo'<div style="direction:rtl
)switch ($d
{
case "Mon":
;"ا م ه ا(" echo
;break
case "Tue":
;"ا م ه ا*|ء" echo
;break
case "Wed":
;"ا م ه ار'ء" echo
;break
٢٧ الفصل الرابع :التحكم في سير البرنامج
case "Thu":
;"ا م ه ا" echo
;break
case "Fri":
;"ا م ه ا'" echo
;break
case "Sat":
;"ا م ه ا`echo "t
;break
case "Sun":
;"ا م ه اecho "!#0
;break
default:
;"ا م ') Qوف؟" echo
}
;'>echo'</div
>?
القيم النصية لعبارة caseيجب أن تحصر بين عالمتي تنصيص ،على عكس القيم الرقمية التي ال تتطلب
حصرھا بين عالمات التنصيص.
المعامل الشرطي ?:يستخدم كطريقة مختصرة للتحقق من الشروط البسيطة .الصيغة العامة للمعامل الشرطي
كالتالي:
<?php
;$age=20
; '$result = $age>18? '' : 'a
;echo $result
>?
تستخدم جملة التكرار whileلتكرار تنفيذ شفرة برمجية طالما كانت نتيجة الشرط التابع لھا تساوي .TRUE
و الصيغة العامة لجملة whileھي كالتالي:
) while ( condition
{
# & 12ل آ 3 t3اط // SSP اء ا) ا2ي %
}
٢٨ الفصل الرابع :التحكم في سير البرنامج
<?php
;$i = 0
;$num = 50
) while( $i < 10
{
;$num--
;$i++
}
;'>"echo'<div align="right
?echo'! t ;'> '.'<br/اار
;'>echo'$i='.$i.'<br/
;echo'$num='.$num
;'>echo'</div
>?
كما ھو مالحظ مع جملة التكرار ،whileيتم اختبار الشرط في بداية التكرار .على العكس في جملة التكرار do-
، whileفإن الشرط يتم اختباره في نھاية التكرار .ھذا يعني أن التكرار سيتم تنفيذه مرة واحدة على األقل .المثال
التالي نسخة معدلة من المثال السابق:
<?php
;$i = 0
;$num = 50
*/
& اار ه 12ا@ر اط & ,3اء اص ,
2 % 2اء ا) ا} اار )ة وا!#ة
/ا?0
*/
do
{
;$num--
;$i++
;) }while( $i < 10
;'>"echo'<div align="right
?echo'! t ;'> '.'<br/اار
;'>echo'$i='.$i.'<br/
;echo'$num='.$num
;'>echo'</div
>?
٢٩ الفصل الرابع :التحكم في سير البرنامج
جملة التكرار for
جملة التكرار تستخدم لتكرار جزء من الشفرة البرمجية لعدد محدد يتم تحديده في جملة التكرار ) forعلى عكس
جملة التكرار .(whileو صيغتھا العامة كالتالي:
و كما ھو مالحظ من الصيغة العامة لجملة التكرار forفھي تتكون من ثالث اجزاء:
Initial valueالقيمة االبتدائية للعداد.
Conditionالشرط.
Increment or decrementالزيادة أو النقصان.
المثال التالي يقوم بطباعة مجموع األعداد الزوجية من ٠الى :١٠٠
<?php
;$count=0
)for($i=0;$i<=100;$i+=2
{
;$count = $count + $i
}
;echo $count
>?
2550
جمل forالمتداخلة
كما عملنا مع جملة الشرط ،ifفإنه من الممكن أن تتداخل أكثر من جملة .forالمثال يوضح كيفية التعامل مع جمل
forالمتداخلة:
<?php
-م 3ء !ول ن )( //
أ!ة P, 4ف // 3
;">"\echo "<table border=\"1
{ )for ($row=1; $row<4; $row++
;">echo "<tr
{ )for ($col=1; $col<5; $col++
;">echo "<td>Row $row, Column $col</td
}
;">echo "</tr
}
;">echo "</table
>?
كما ھو واضح من المثال السابق ،لدينا جملتي ،forاألول ھي جملة forالخارجية outer loopو التي تقوم بطباعة
الصفوف .و األخرى ھي جملة forالداخلية inner loopوالمسئولة عن طباعة الخاليا داخل الصفوف.
٣٠ الفصل الرابع :التحكم في سير البرنامج
الشرط في حال أردنا ايقاف تنفيذ التكرار ألي سبب كان فإننا نقوم بإدراج breakداخل جملة شرط .عند تحقق ذلك
ستقوم breakبإنھاء جملة التكرار كاملة.
على النقيض من عبارة breakالتي تقوم بالخروج من التكرار ،تُستخدم عبارة continueفي حال أردنا تجاھل
التكرار الحالي و االنتقال الى قيمة التكرار التالية.
ھذا النوع من جمل التكرار يُستخدم فقط مع المصفوفات .و تأتي على شكلين .و في كال الحالتين يتم استخدام متغير
مؤقت temporary variableللتعامل مع عناصر المصفوفة.
في حال أردنا التعامل فقط مع القيم لكل عنصر داخل المصفوفة ، elements valuesفتكون الصيغة
العامة لجملة foreachكالتالي:
الشكل الثاني من جملة التكرار foreachيُستخدم عادة في حال أردنا التعامل مع القيم valuesو المفاتيح
keysلعناصر المصفوفة .ھذا النوع يستخدم عادة مع المصفوفات الترابطية .associative arrays
الصيغة العامة لھذا النوع من جملة foreachكالتالي:
الحقا ،في الفصل الخامس سنتطرق الى العديد من األمثلة لجملة التكرار foreachعندما نتعامل مع المصفوفات.
٣١ التحكم في سير البرنامج: الفصل الرابع
تطبيق عملي
.في ھذا التطبيق سنقوم بكتابة شفرة برمجية تقوم بطباعة جدول الضرب
<html>
<head>
<style>
/*
ةcss
ا!ول,) ` , و ا
*/
table{
border:1px solid #333;
text-align:center;
}
td{
border:1px solid #CCC;
}
.higlight{
background-color:#0C9;
}
</style>
</head>
<body>
<?php
echo'<table>';
echo'<tr>';
// ا!ول,) / ظS Qء @ &ر3 ? ه
echo'<td>*</td>';
/*
ول )( ا!ول0 اu" اa ( ¢`) اار ا
*/
for($i=1;$i<=10;$i++)
{
echo "<td class='higlight'>$i</td>";
}
echo'</tr>';
/*
ي2ول & ا!ول و ا0 م ا' د ا- اار ار-#
١ ?!أ ( ا
ب¤ ا, م- @ اار ا!ا-#
>ب ا¤ م-3 هj
ي ? ا' د2و ا
> t
١٠ ! , و١ ن رة ? )ا!ة !أ ب% ي2وا
*/
for($j=1;$j<=10;$j++)
{
echo "<tr><td class='higlight'>$j</td>";
for($t=1;$t<=10;$t++)
٣٢ الفصل الرابع :التحكم في سير البرنامج
;'>echo '<td>'.($t*$j).'</td
;'>echo'</tr
}
;'>echo'</table
>?
></body
></html
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . multitable.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التاليhttp://localhost/ multitable.php :
و من ثم الحظ الناتج.
٣٣ الفصل الرابع :التحكم في سير البرنامج
.٥أكتب برنامج يقوم بطباعة القيم من ١الى ١٠مع تجاھل طباعة القيمة . ٥
٣٤ الفصل الخامس :التعامل مع المصفوفات Arrays
ما ھي المصفوفة
المصفوفة arrayعبارة عن متغير لديه االمكانية لتخزين أكثر من قيمة حتى لو اختلفت أنواعھا .كل مصفوفة تتكون
من مجموعة من العناصر .و كل عنصر يتكون من جزئين قيمة valueو مفتاح . keyو تنقسم المصفوفات في
PHPإلى ثالثة أنواع و ھي :
في ھذا النوع من المصفوفات يتم استخدام األرقام لفھرسة عناصر المصفوفة لتسھيل عملية التعامل معھا
الحقا.
key value
0 أحمر
1 أخضر
$colors أزرق
2
3 أبيض
4 أسود
كما ھو واضح من الشكل السابق ،فإن اسم المصفوفة ھو colorsو تحتوي على خمس عناصر .يتم بدء فھرسة
العناصر من الرقم صفر الى ن ، (0 …. n-1) ١-حيث تمثل ن مجموع عناصر المصفوفة .السترجاع قيمة عنصر
ما في المصفوفة ،نقوم بكتابة اسم المصفوفة و من ثم قوسين مربعين ،و بينھما رقم المفتاح لذلك العنصر كالتالي:
]$colors[2
٣٥ الفصل الخامس :التعامل مع المصفوفات Arrays
الطريقة األولى
=]$colors[0 ;'أ'#
=]$colors[1 ;'أ@'¤
=]$colors[2 ;'أزرق'
=]$colors[3 ;'أ©'
=]$colors[4 ;'أ %د'
الطريقة الثانية
;)'أ %د'',أ©'',أزرق'',أ@','¤أ$colors = array ('#
في ھذه الطريقة ،يالحظ أننا لم نقم بتحديد المفتاح لكل عنصر في المصفوفة .بدال من ذلك استخدمنا الدالة ) (array
إلنشاء المصفوفة .و لذلك فإن عملية الفھرسة تتم بشكل تلقائي بدءا من أول عنصر )المفتاح .( 0
<?php
)for($i=0;$i<sizeof($colors);$i++
{
;">echo "<h3>".$colors[$i]."</h3
}
>?
في ھذا المثال استخدمنا جملة التكرار forلطباعة قيم المصفوفة . colorsو كما ھو واضح فإننا استخدمنا
الدالة ) ( sizeofلتحديد حجم المصفوفة لكي نتمكن من عرض جميع قيمھا .أخيرا بدأنا التكرار عند القيمة
صفر ألن المفتاح ألول عنصر في المصفوفة الرقمية ھو . 0
٣٦ الفصل الخامس :التعامل مع المصفوفات Arrays
<?php
)foreach($colors as $value
{
;">echo "<h3>".$value."</h3
}
>?
في ھذا الطريقة استخدمنا النوع األول من جملة التكرار ) foreachتم شرحه في الفصل السابق(
السترجاع قيم المصفوفة الرقمية .في ھذا المثال ستقوم جملة foreachبتخزين قيمة أول عنصر داخل
المتغير المؤقت $valueو من ثم نقوم بطباعة قيمة ذلك المتغير .ستقوم foreachبعد ذلك بالعودة و تكرار
نفس الخطوات السابقة مع العنصر الثاني و ھكذا حتى االنتھاء من جميع عناصر المصفوفة الرقمية تلقائيا.
عملية تغيير قيمة عنصر ما تتم بسھولة .كل ما علينا عمله ھو كتابة اسم المصفوفة متبوع بالمفتاح للعنصر المحدد بين
قوسين مربعة و من ثم نقوم بإسناد القيمة الجديدة له.
<?php
>?
;)sizeof( array_name
٣٧ الفصل الخامس :التعامل مع المصفوفات Arrays
المصفوفة الترابطية مشابھه للمصفوفة الرقمية من ناحية الوظيفة لكنھا تختلف عنھا من ناحية عملية الفھرسة .في ھذا
النوع من المصفوفات ،يتم استخدام النصوص stringفي فھرسة عناصر المصفوفة بدال من االرقام.
key value
title البرمجة باستخدام php
author محمد عبدﷲ
$books دار النشر
publisher
isbn ١٢-٢٥٠-١٦٣
الطريقة األولى
;'phpا) !%ام ' =]'$books['title
;')$books['author']= 'T! !S
;'دار ا' =]'$books['publisher
;'$books['isbn']= '12-250-163
الطريقة الثانية
php',ا) !%ام ' >= '$books = array('title
'author' => 'T! !S)' ,
',دار ا' >= ''publisher
;)''isbn' => '12-250-163
و كما ھو مالحظ في الطريقة الثانية استخدمنا الدالة ) (. arrayكذلك فإننا استخدمنا الرمز >= للفصل بين القيمة
valueو المفتاح .key
٣٨ الفصل الخامس :التعامل مع المصفوفات Arrays
أسھل طريقة السترجاع قيم المصفوفة الترابطية ھو عن طريق استخدام جملة التكرار . foreach
<?php
)foreach($books as $key=>$value
{
;">echo "<h3>$key => $value</h3
}
>?
كما ھو واضح من المثال السابق فإننا قمنا بتعريف المصفوفة booksو قمنا بتعبئة قيمھا كما ھو واضح كذلك .بعد
ذلك قمنا باستخدام جملة التكرار foreachلطباعة قيم المصفوفة .في ھذه الحالة قمنا باستخدام متغيرين مؤقتين
temporary variablesلتخزين القيم valuesو المفاتيح keysلعناصر المصفوفة الترابطية .في كل مرة سنقوم
بتخزين قيم و مفاتيح العنصر األول في المصفوفة في المتغيرين المؤقتين ثم الذي يليه و ھكذا حتى االنتھاء من كل
عناصر المصفوفة.
كما سبق أن عملنا مع المصفوفة الرقمية من تغيير قيمة عنصر ،نستطيع عمل نفس الطريقة مع المصفوفة الترابطية
عن طريق تحديد المفتاح للعنصر المطلوب و من ثم إسناد القيمة الجديدة له.
<?php
>?
كما ذكرنا سابقا بأن المصفوفة تُستخدم لتخزين أي نوع من البيانات .و كما ذكرنا أيضا بأن المصفوفة تعتبر من أنواع
البيانات في . PHPلذلك نستطيع القول بأنه من الممكن تخزين مصفوفة كأحد عناصر مصفوفة أخرى .في ھذه الحالة
تسمى المصفوفة التي تحتوي على مصفوفة كأحد عناصرھا بالمصفوفة ذات البعدين.
($books = array
php',ا) !%ام' >= 'array('title
'author' => 'T! !S)' ,
',دار ا' >= ''publisher
'isbn' => '12-250-163'),
;)
في ھذه الحالة إذا اردنا االشارة الى عنصر محدد داخل المصفوفة ذات البعدين فنتبع الطريقة التالية:
$books[1][ 'isbn']; // value is 12-250-163
تحتوي PHPعلى عدد من المصفوفات المبنية مسبقا و التي تستخدم بشكل متكرر في PHPو تسھل عملية الوصول
للبيانات حتى لو كانت من صفحات مختلفة .جميع ھذه المصفوفات تبدأ بعالمة الدوالر $متبوعة بشرطة سفلية _ .
من أشھر ھذه المصفوفات $_GET ،و $_POSTو اللتان تحتويان على بيانات ھامة يتم تمريرھا عن طريق
نماذج ) HTMLكما سنرى الحقا( .كل المصفوفات العامة تُعتبر مصفوفات ترابطية .المفاتيح لكال من $_POSTو
$_GETيتم اشتقاقھما من اسماء العناصر في نموذج .HTML
فلو افترضنا أنه لدينا النموج التالي:
Address:
Send
لنفترض أن أسم مربع النص ھذا ھو addressو الطريقة المستخدمة في ارسال النموذج ھي .POSTعند الضغط
على مربع االرسال ،submitيقوم مفسر PHPتلقائيا بإنشاء العنصر ]' $_POST['addressو الذي ستكون قيمته
ھي القيمة المدخلة في مربع النص من قبل المستخدم.
٤٠ الفصل الخامس :التعامل مع المصفوفات Arrays
$_POST تحتوي على بيانات مرسلة عن طريق نموذج HTMLباستخدام طريقة . post
$_GET تحتوي على بيانات مرسلة عن طريق نموذج HTMLباستخدام طريقة . get
$_SERVER تحتوي على معلومات مخزنة بواسطة خادم الويب Web Serverكـ :اسم الملف و مساره.
$_FILE يحتوي معلومات خاصة بالملفات المحملة.
$_SESSION يحتوي على معلومات يتم حفظھا ،لكي تستخدم في أكثر من صفحة.
يجب األخذ في االعتبار أن اسماء المصفوفات العامة في PHPتكتب بأحرف كبيرة ،باإلضافة
لذلك فھي حساسة لحالة الحرف .case sensitive
في حال اردنا معرفة المحتوى لمصفوفة ما ،نقوم باستدعاء الدالة ) ( print_rو التي تقوم بعرض محتوى المصفوفة
ال ُممررة لھا كالتالي:
تطبيق عملي
في ھذا التطبيق سنقوم بكتابة شفرة برمجية تقوم بتخزين درجات الطالب في مصفوفة رقمية ،و من ثم نقوم بطباعة
إحصائية عن درجات الطالب تشمل الطلبة الناجحين و الراسبين و بعض االحصائيات األخرى.
قم بفتح برنامج .Notepad++بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة .قم بكتابة الشفرة التالية:
><html
><head
><style
*/
cssة
,) ` ,ا!ول و ا
*/
{body
;direction:rtl
}
{fieldset
;width:300px
}
{legend
;font-weight:bold
}
{p
;background-color:#CCC
}
></style
></head
><body
<?php
إ3ء )" & Sي /درت ا |ب//
($grades = array
25, 64, 23, 87, 56, 38, 78, 57, 98, 95,
81, 67, 75, 76, 74, 82, 36, 39,
54, 43, 49, 65, 69, 69, 78, 17, 91
;)
`#ب !د ا!رت //
;)$count = count($grades
إ ) ع ا!رت و ا -ا0و ه // P
;$total = 0
!د ا اا (%و ا -ا0و ه //P
;$fail = 0
!د ا ا (Sو ا -ا0و ه //P
;$success = 0
)foreach($grades as $grade
{
;$total += $grade
٤٢ الفصل الخامس :التعامل مع المصفوفات Arrays
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . grades.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التالي http://localhost/grades.php :و
من ثم الحظ الناتج.
٤٣ الفصل الخامس :التعامل مع المصفوفات Arrays
.٢باستخدام جملة التكرار ،do-whileاكتب برنامج يقوم بطباعة قيم المصفوفة التالية:
الدالة functionھي عبارة عن شفرة برمجية تقوم بتنفيذ مھمة محددة .و ھي مھمة ألنھا تساعد على فصل جزء من
البرنامج بغرض إعادة استخدامه أكثر من مرة .و تنقسم الدوال في PHPالى قسمين:
تحتوي PHPعلى أكثر من ١٠٠٠دالة مبنية مسبقا و جاھزة لالستخدام ،كما يتم إضافة العديد من الدوال بشكل
مستمر .لذلك تعتبر PHPمن أكثر لغات برمجة الويب تكيفا مع التوسع الكبير في التطبيقات الخاصة بشبكة
االنترنت .و للمزيد عن دوال PHPالجاھزة يمكن زيارة الموقع http://php.net/quickref.php :و اختيار أي
دالة لإلطالع على كيفية التعامل معھا .
قبل البدء في إنشاء أي دالة يجب األخذ في االعتبار محتويات الدالة .تحتوي كل دالة على ثالث أقسام:
عند تعريف أي دالة يجب البدء بالكلمة المحجوزة functionمتبوعة باسم الدالة و من ثم قوسين صغيرين متبوعة
بجسم الدالة كالتالي:
function ) (function_name
{
اة ا) دا@ ` ا!ا //
}
٤٥ الفصل السادس :الدوال في Functions in, PHP
في حال كانت الدالة تحتوي على معطيات فيصبح شكل الدالة كما يلي:
><html
><head
></titleآ ا3ء دا !ون )' ت><title
></head
><body
<?php
' uا!ا //
)(function writeMessage
{
;'إ3ء دا !ون )' ت'echo
}
إ!%ء ا!ا //
;)(writeMessage
>?
></body
></html
كما ھو واضح ،قمنا بتعريف دالة اسمھا )( writeMessageبدون معطيات .عند استدعاء الدالة ستقوم بتنفيذ
جملة الطباعة echoو طباعة النص المضمن بداخلھا .المثال التالي يوضح كيفية تعريف و استدعاء دالة بمعطيات.
><html
><head
></titleآ ا3ء دا ' ت><title
></head
><body
<?php
' uدا ' ت //
)function add($number1,$number2
{
;$result = $number1 + $number2
; B 3'.$resultا} ه echo':
}
إ!%ء ا!ا //
;)add(10,20
>?
></body></html
٤٦ الفصل السادس :الدوال في Functions in, PHP
يمكن أن تقوم الدالة بإرجاع قيمة عن طريق العبارة . returnعند الوصول للعبارة returnفإن الدالة ستتوقف .و
سيتم ارجاع القيمة للسطر من البرنامج الذي تم فيه استدعاء الدالة.
><html
><head
></titleآ ا3ء دا ' ت><title
></head
><body
<?php
' uدا ' ت //
)function add($number1,$number2
{
;$result = $number1 + $number2
أرع ? ا> // $result
;return $result
}
ا!%ء ا!ا و ا -ا' )( ا!ا ` }%ا //
;)$return_value = add(10,20
; B 3'. $return_valueا} ه echo':
>?
></body
></html
يمكن إسناد قيم افتراضية لمعطيات الدالة parametersيتم استخدمھا في حال تم استدعاء الدالة بدون تمرير قيم
لمعطياتھا.
><html
><head
></titleآ ا3ء دا ' ت><title
></head
><body
<?php
' uدا ' ت //
)function add($number1=30,$number2=40
{
;$result = $number1 + $number2
ارع ? ا> // $result
;return $result
}
٤٧ الفصل السادس :الدوال في Functions in, PHP
من المھم أن نعرف أن أي متغير يتم تعريفه داخل جسم الدالة فسوف يكون متاحا للدالة فقط .بمعنى أنه من غير
الممكن االشارة لذلك المتغير خارج إطار الدالة.
><html
><head
>)</titleل رؤ ا>><title
></head
><body
<?php
' uدا ' ت //
)function add($number1=30,$number2=40
{
;$result = $number1 + $number2
}
;)add(53,32
; ?: '.$resultا> ه'echo
>?
></body
></html
كما ھو واضح من المثال السابق ،المتغير $resultمتغير محلي localخاص بالدالة . addعندما قمنا بمحاولة
طباعة قيمة المتغير خارج الدالة ،عرض مفسر PHPرسالة خطأ تفيد بأن المتغير غير معرف.
٤٨ الفصل السادس :الدوال في Functions in, PHP
و في حال أردنا أن يكون المتغير $resultمتاحا داخل و خارج الدالة أيضا ،فنقوم بكتابة العبارة globalقبل اسم
المتغير .في ھذه الحالة سيصبح المتغير $resultمتغيرا عاما .publicو سيتأثر بأي تغيير يحدث على المتغير
خارج إطار الدالة.
><html
><head
></titleآ ا3ء دا ' ت><title
></head
><body
<?php
;$result = 0
' uدا ' ت //
)function add($number1=30,$number2=40
{
ا> ا´ن ا>) OPا ) //
;global $result
;$result = $number1 + $number2
}
;)add(53,32
تدعم PHPإمكانية تضمين محتوى ملف PHPفي ملف PHPآخر قبل أن يقوم الخادم بإتمام عملية التنفيذ .ھذه
الطريقة تساعد في إعادة استخدام الشفرة برمجية . reusabilityو تكون شائعة في تضمين شفرات برمجية تُستخدم
بشكل متكرر عند بناء موقع ديناميكي خصوصا ملفات . copy right footer ، header
و لتحقيق ذلك نستطيع استخدام الدالتين التاليتين:
) (include
) (require
كال الدالتين تقوم بتضمين شفرة برمجية من ملف آخر .لكن الفرق بينھما ھو في كيفية تعامل الدالتين مع األخطاء.
في حال استخدمنا ) ( ، includeو كان الملف المضمن الذي يحتوي على الشفرة البرمجية المدرجة غير موجود ،
ففي ھذه الحالة سيقوم مفسر PHPبإنشاء رسالة تحذير warning messageو من ثم يتابع تنفيذ بقية البرنامج.
٤٩ الفصل السادس :الدوال في Functions in, PHP
على النقيض تماما في حال استخدمنا الدالة ) ( requireو كان الملف المضمن غير موجود ،فسيقوم مفسر PHP
بإنشاء رسالة خطأ مميت fatal errorو من ثم ايقاف تنفيذ البرنامج.
menu.php
<a </a> -اhref="home.php">`±
<a )!@</a> -ت>"href="services.php
<a #</a> -ل ا ?}>"href="about.php
<a ></a> <br /ا " >"href="contactus.php
index.php
><html
>"<body dir="rtl
>? ;)"<?php include("menu.php
> PHP</pه2ي (¤ -aات &><p
></body
></html
كما ھو واضح من المثال السابق استخدمنا الدالة ) ( includeلتضمين محتوى الملف menu.phpفي الملف
.index.phpو بنفس الطريقة نستطيع استخدام الدالة ) ( requireكذلك.
تطبيق عملي
في ھذا التطبيق سنقوم بتصميم واجھة لموقع تخيلي .و الھدف ھو تطبيق ميزة تضمين الملفات في . PHP
عندما نقوم بتصميم الواجھة الرئيسية لموقع فيُنصح دائما بفصل األجزاء المتكررة من ملفات مستقلة بھدف استخدامھا في كامل
صفحات الموقع .فمثال شعار الموقع و القوائم الرئيسية )تسمى رأس الصفحة أو (headerتكون ثابتة لذلك نقوم بوضعھا في
ملف مستقل .ايضا حقوق الموقع و التي تظھر عادة في أسفل الصفحة )تسمى ذيل الصفحة أو (footerتكون ثابتة لذلك نقوم
بوضعھا في ملف مستقل .و ھكذا مع أي محتوى يتم استخدامه عبر كل ملفات الموقع فيُنصح أن يوضع في ملف مستقل .ھذه
الطريقة تساعد في إعادة استخدام الشفرة البرمجية reusabilityكما تسھل من عملية التطوير و الصيانة للموقع.
بعد أن نقوم بفصل المحتوى المتكرر نقوم بإنشاء الصفحة الرئيسية للموقع و من ثم تضمين المحتوى المطلوب
باستخدام ) ( includeأو ) (.require
قم بفتح برنامج .Notepad++بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة .قم بكتابة الشفرة التالية:
٥٠ Functions in, PHP الدوال في: الفصل السادس
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<style>
body{
direction:rtl;
margin:0px 200px 0px 200px;
font-family:"Times New Roman", Times, serif;
}
a{
text-decoration:none;
color:#000;
}
a:hover{
text-decoration:underline;
color:#FFF;
}
#logo{
background-color:#6CC;
}
#titleLogo{
text-align:right;
font-size:42px;
font-weight:bold;
padding-right:50px;
}
#menu{
padding-top:5px;
text-align:center;
}
#menu td{
background-color:#6CC;
font-size:16px;
font-weight:bold;
}
#content{
margin-top:20px;
margin-bottom:20px;
font-size:16px;
font-weight:bold;
}
#footer{
margin-top:100px;
padding:2px;
background-color:#6CC;
text-align:center;
font-size:16px;
font-weight:bold;
}
٥١ الفصل السادس :الدوال في Functions in, PHP
></style
> </titleا" ا?><title
></head
><body
>"<div id="header
>"<table width="100%" id="logo
><tr
> </tdا" ا?>"<td width="86%" id="titleLogo
<td width="14%"><img "src="cammera.png "width="128
>height="128" /></td
></tr
></table
>"<table width="100%" cellpadding="3" id="menu
><tr
></a></tdا<td><a href="home.php">`±
></a></tdدروس ا" >"<td><a href="tutorials.php
> </a></tdا)ات>"<td><a href="camsworld.php
> #</a></tdل ا ?}>"<td><a href="about.php
></a></tdا " >"<td><a href="contact.php
></tr
></table
></div
> ,3 --رأس ا"<!-- S
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . header.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
اآلن قم بالضغط على مفتاح Ctrl+Nإلنشاء مساحة عمل فارغة ثم قم بكتابة الشفرة التالية.
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . footer.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
٥٢ الفصل السادس :الدوال في Functions in, PHP
مرة أخرى ،قم بالضغط على مفتاح Ctrl+Nإلنشاء مساحة عمل فارغة ثم قم بكتابة الشفرة التالية.
<?php
header.phpه ? S) (¤ى ا//u
;)'require('header.php
>?
>"<div id="content
& #).ا" ا?
ه2ا ا ?} !,ف إ23 !- /ة ( )"ة ( &( ا" ا?
و `'! 3أن !-3م ا ±ا ا'!! )( ا!روس و ا" # O±ل
(&.ا"
></div
<?php
footer.phpه ? S) (¤ى ا//u
;)'require('footer.php
>?
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقه ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . index.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التالي http://localhost/index.php :و من
ثم الحظ الناتج.
٥٣ الفصل السادس :الدوال في Functions in, PHP
.٢ما ھي الطرق المستخدمة في PHPلتضمين شفرة برمجية من ملف آخر ،و ما الفرق بينھا.
.٣أكتب برنامج يقوم بإنشاء دالة تقوم بتحويل العملة من دوالر أسترالي إلى ﷼ سعودي ،مع
لذلك تكون الحاجة ملحة للتعامل مع البيانات المدخلة عن طريق. أكثر تعقيداPHP مع مرور الوقت تصبح تطبيقات
.HTML forms و أكثر الشائعة استخداما للتعامل مع ُمدخالت المستخدم ھو عن طريق النماذج.المستخدم
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<style>
/*
ةcss
ا!ول,) ` , و ا
*/
body{
direction:rtl;
}
form{
font-weight:bold;
}
.button{
font-weight:bold;
width:75px;
}
</style>
</head>
<body>
<form name="contact " method="post" action="contact.php">
<p>%ا:
<input type="text" name="name" />
</p>
<p>3ا! او:
<input type="text" name="email" />
</p>
<p>%ا:
<textarea name="message" cols="45" rows="5"></textarea>
</p>
<p>
<input class="button" type="submit" name="send"
value="% "أر/>
<input class="button" type="reset" name="reset" value="O`)"
/>
</p>
</form>
</body></html>
٥٥ الفصل السابع :التعامل مع النماذج Handling forms
من خالل الشفرة السابقة ،قمنا بإنشاء نموذج يحتوي على حقل إلدخال االسم من نوع نص ، textحقل إلدخال البريد
االلكتروني من نوع نص كذلك .باإلضافة الى مساحة نص textareaإلدخال الرسالة .أخيرا لدينا زر إلرسال
البيانات من نوع submitو زر لمسح قيم الحقول من نوع .reset
كما يجب اإلنتباه الى انه عند الرغبة في التعامل مع بيانات حقل معين ،يجب تحديد اسم ذلك الحقل عن طريق
الخاصية nameلنتمكن من استخدامھا الحقا .
بقي أن نشير أن الوسم formيحتوي على خاصيتين مھمتين:
كما سبق و أن أشرنا في الفصل الخامس ،ھناك عدد من المصفوفات العامة في PHPتُستخدم ألغراض محددة .من
ضمن ھذه المصفوفات المصفوفتين $_POSTو $_GETو التي تُستخدمان لجمع البيانات ال ُمرسلة عبر النموذج.
بمعنى أننا نقوم بالنظر للنموذج formو تحديدا للخاصية . methodإذا كانت القيمة ھي postفإن البيانات ال ُمرسلة
من النموذج سيتم تخزينھا في المصفوفة العامة $_POSTو العكس صحيح إذا كانت القيمة ھي getفإن البيانات
ال ُمرسلة من النموذج سيتم تخزينھا في المصفوفة العامة .$_GET
بعد ذلك نقوم بكتابة قوسين مربعة ] [ و من ثم نقوم بكتابة اسم الحقل و التي تمثل قيمة الخاصية name
لعناصر النموذج بين عالمات اقتباس مفردة أو مزدوجة.
٥٦ الفصل السابع :التعامل مع النماذج Handling forms
order.html
...
>'<form action='ordere.php' method='post
>:<input type='text' name='name'/ا%
>: :<input type='text' name='phone'/اu ,
...
سنقوم اآلن بالعودة للمثال األول في ھذا الفصل و سنقوم بحفظ الشفرة السابقة باسم contact.htmlو في نفس المكان
الذي تعودنا لحفظ ملفاتنا فيه )داخل المجلد االفتراضي .( htdocs
اآلن سنقوم بإنشاء الصفحة التي سوف تستقبل البيانات و الموضحة في الخاصية ' action=' contact.phpفي
النموذج السابق .و كما ال يجب أن ننسى الخاصية األخرى المھمة و التي تحدد طريقة ارسال البيانات وھي الخاصية
'.method = 'post
<?php
*/ & اء ا ? '>) uات ,& ¸S3ا-
*/ا|@ () %ل ا ذج
;]'$name = $_POST['name
;]'$email = $_POST['email
;]'$message = $_POST['message
;'>";echo'<div style="direction:rtl;font-size:16px
ا أ@ اا ±ا3 ') Pت رecho'<h2> %
;'>:</h2آ
;'>echo'<hr align="right" style="width:500px"/
;">:</b>$name</pاecho"<p><b>%
;">:</b>$email</pا! اوecho"<p><b>3
;">:</b>$message</pاecho"<p><b>%
;'>echo'</div
>?
نقوم بحفظ الشفرة السابقة باسم contact.phpداخل المجلد االفتراضي و ستكون ھذه الصفحة ھي المسئولة عن
استقبال و التعامل مع البيانات المرسلة من الصفحة .contact.html
نقوم اآلن باستدعاء الصفحة التي تحتوي على النموذج كالتالي http://localhost/contact.html
٥٧ الفصل السابع :التعامل مع النماذج Handling forms
]'$_POST['name
]'$_POST['email
]'$_POST['message
نقوم بتعبئة البيانات كما ھو واضح و من ثم نضغط على زر االرسال .عند الضغط على زر االرسال سوف تُرسل
البيانات للصفحة contact.phpو التي ستقوم بطباعة البيانات كما يلي:
في بعض الحاالت قد يكون من األفضل ارسال النموذج لنفس الصفحة لتتم معالجته بدال من ارسال الى صفحة أخرى
مستقلة .الفائدة من ھذه الخطوة أن البيانات ال ُمدخلة في النموذج تبقى ،مما يتيح للمستخدم تعديل البيانات الخاطئة
فقط.
لكن ستواجھنا مشكلة بأن مفسر PHPسيقوم بتنفيذ شفرة PHPحتى و إن لم يتم ارسال النموذج؟
لذلك الحل أن يتم حصر الشفرة البرمجية داخل جملة شرط .و يتحقق الشرط فقط عندما يتم ارسال النموذج و بالتالي
يتم تنفيذ الشفرة البرمجية التي ستتعامل مع البيانات المرسلة من النموذج.
و لكي نرسل النموذج لنفس الصفحة سنستخدم المصفوفة العامة الجاھزة $_SERVERمع المتغير
SCRIPT_NAMEو الذي يحتوي على اسم الصفحة التي يتم تنفيذھا حاليا و نضعھا داخل الخاصية actionفي
النموذج .سنقوم بالتعديل على الملفين السابقين contact.htmlو contact.phpبحيث يصبح النموذج والشفرة
البرمجية في صفحة واحدة.
٥٨ Handling forms التعامل مع النماذج: الفصل السابع
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<style>
body{
direction:rtl;
}
form{
font-weight:bold;
}
.button{
font-weight:bold;
width:75px;
}
</style>
</head>
<body>
<?php
if(array_key_exists('send',$_POST))
{
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
echo'<div style="direction:rtl;font-size:16px;">';
echo'<h2> %ت ر3 ') P ا±ا أ@ اا
آ:</h2>';
echo'<hr align="right" style="width:500px"/>';
echo"<p><b>%ا:</b>$name</p>";
echo"<p><b>3ا! او:</b>$email</p>";
echo"<p><b>%ا:</b>$message</p>";
echo'</div><br/>';
}
?>
<form name="contact " method="post" action="<?php echo
$_SERVER['SCRIPT_NAME'];?>">
<p>%ا:
<input type="text" name="name" />
</p>
<p>3ا! او:
<input type="text" name="email" />
</p>
<p>%ا:
<textarea name="message" cols="45" rows="5"></textarea>
<p>
<input class="button" type="submit" name="send"
value="% "أر/>
<input class="button" type="reset" name="reset" value="O`)"
/>
</p>
</form></body></html>
٥٩ الفصل السابع :التعامل مع النماذج Handling forms
في الشفرة السابقة استخدمنا الدالة ) ( array_key_existsو التي تأخذ معطيين .األول عبارة عن مفتاح keyيتم
البحث عن وجوده في مصفوفة و التي تمثل المعطى الثاني للدالة .المفتاح في المثال السابق يمثل اسم زر اإلرسال
sendو المصفوفة ھي المصفوفة العامة .$_POST
تقوم الدالة بالبحث عن المفتاح sendداخل المصفوفة $_POSTألن طريقة ارسال البيانات في النموذج ھي .post
عند الضغط على زر االرسال سيتم ارسال المفتاح sendللمصفوفة $_POSTو ستكون نتيجة اختبار الدالة ھي
trueو يتم تنفيذ الجزء التابع لجملة الشرط ifو العكس صحيح اذا لم يتم ارسال النموذج أي سوف تكون نتيجة
اختبار الدالة ھي .false
في الجزء actionالخاص بالنموذج قمنا بطباعة المتغير العام ]' $_SERVER['SCRIPT_NAMEو الذي
سيقوم بإرجاع اسم الصفحة الحالية .contact.php
أزرار االختيار radioمن العناصر البسيطة و الفعالة عند التعامل مع نماذج .HTMLفي الوضع االفتراضي ،نقوم
بتحديد أحد أزرار االختيار radioليكون ھو القيمة االفتراضية وذلك عن طريق أعطاءه الخاصية checkedللداللة
على أن ھذا الحقل ھو القيمة االفتراضية .بمعنى أنه ،إذا لم يقم المستخدم بإختيار أيا من أزرار االختيار ،فسيتم ارسال
قيمة الحقل المحدد مسبقا كقيمة افتراضية الى ايا من المصفوفتين $_POSTأو $_GETعند ارسال النموذج.
في حال كانت قيم أزرار االختيار radioمرتبطة ببعضھا ،مثل لو أردنا تحديد ما إذا كان المستخدم ذكر أم أنثى .ففي
ھذه الحالة يجب أن نعطي جميع أزرار االختيار نفس االسم.
في بعض الحاالت قد نحتاج الى حماية صفحة انترنت من الوصول اليھا مباشرة عن طريق كتابة عنوان الصفحة في
شريط عنوان المتصفح.
لنفترض أنه لدينا صفحة انترنت باسم admin.phpو للوصول لھذه الصفحة بطريقه صحيحة يجب على المستخدم
المرور أوال عبر الصفحة login.phpو تعبئة بيانات الدخول .إذا حاول المستخدم الوصول للصفحة admin.php
عن طريق كتابة عنوان الصفحة مباشرة في شريط عنوان المتصفح سنقوم بمنعه و طباعة رسالة مناسبة.
login.php admin.php
×
٦٠ Handling forms التعامل مع النماذج: الفصل السابع
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<style>
body{
direction:rtl;
}
form{
font-weight:bold;
}
.button{
font-weight:bold;
width:75px;
}
</style>
</head>
<body>
<form method="post" action="admin.php">
<p> ا`!م%ا
<label for="user_name"></label>
<input type="text" name="user_name" id="user_name" />
</p>
<p>آ اور
<label for="password"></label>
<input type="password" name="password" id="password" />
</p>
<p>3آ2
<input type="checkbox" name="remeber_me" id="remeber_me" />
<label for="remeber_me"></label>
</p>
<p>
<input type="submit" name="login" id="login" value=""د@ ل
/>
</p>
</form>
</body>
</html>
في الفصول السابقة كنا نقوم بإرسال البيانات عن طريق النماذج باستخدام POSTأو GETإلى صفحات PHP
لكي يتم معالجتھا .لكن ماذا لو أردنا بدال من إرسال المعلومات عن طريق النماذج أن نقوم بإرسالھا عن طريق
الروابط التشعبية ضمن الوسم > .<aفي ھذه الحالة سيتم إرسال البيانات إلى المصفوفة العامة ) $_GETعبارة عن
مصفوفة ترابطية . ( associative arrayو كما ھو معلوم لدينا أنه في المصفوفات الترابطية المفاتيح عبارة عن
نصوص و ليست أرقام .لذلك لو أردنا أن نضيف عنصر داخل المصفوفة $_GETو له القيمة Ahmadفنقوم
بما يلي :
لكن كيف سيتم إرسال رابط تشعبي و يتم تخزين قيمه داخل المصفوفة $_GET؟
لكي نقوم بذلك نقوم أوال بكتابة اسم الصفحة التي ستقوم باستقبال البيانات ،مثال login.phpمتبوعة بعالمة استفھام
? و من ثم اسم المفتاح متبوعا بعالمة يساوي = يليھا قيمة العنصر كالتالي:
>"<a href= "login.php?name=Ahmad
في حال أردنا إضافة أكثر من قيمة نقوم بالفصل بين القيم كالتالي:
><html
><head
<meta "http-equiv="Content-Type ;content="text/html
>charset=utf-8" /
><style
{body
;direction:rtl
}
></style
></head
><body
<a
ا'"<اواhref="dynamicLinks.php?firstName=T!&&lastName= °
> </a><br /ا
٦٢ الفصل السابع :التعامل مع النماذج Handling forms
<?php
)if(array_key_exists('firstName',$_GET
))&& array_key_exists('lastName',$_GET
{
]'echo'<h2> #) ' . $_GET['firstName . ' ' .
;'>$_GET['lastName'] .'</h2
}
>?
></body
></html
http://localhost/dynamicLinks.php
العلي=&&lastNameعبدﷲ=http://localhost/dynamicLinks.php?firstName
تعتبر الدالة ) ( trimمن دوال PHPالمبنية مسبقا وتُستخدم إلزالة المسافات الفارغة في بداية و نھاية النص string
.و تعتبر من الدوال التي يشيع استخدامھا مع نماذج HTMLو ذلك إلزالة أي مساحات فارغة في القيم المدخلة من
قبل المستخدم قبل إجراء أي عملية على تلك البيانات كتخزينھا في قواعد البيانات مثال.
<?php
// remove leading and trailing whitespace
// output 'a b 'c
$str = ' a b c ;'
;)echo trim($str
>?
٦٣ Handling forms التعامل مع النماذج: الفصل السابع
تطبيق عملي
وقبل أن يتمكن الزائر من البدء في تعبئة النموذج يجب أن.في ھذا التطبيق سنقوم بتصميم نموذج تسجيل زائر جديد
.يقوم الزائر بالموافقة على الشروط التسجيل
: قم بكتابة الشفرة التالية. بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة.Notepad++ قم بفتح برنامج
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<title>` ذج ا3</title>
<style>
body{
direction:rtl;
}
.agreement{
border:1px solid #CCC;
width:350px;
padding:5px;
}
form input{
border:1px solid #CCC;
}
form .button{
width:80px;
}
form fieldset{
width:350px;
border:1px solid #CCC;
}
form fieldset legend{
font-weight:bold;
border:1px solid #CCC;
}
</style>
</head>
<body>
<?php
/*
` ا ? ا/ & ا اt )( ) اذاR|@ () -S3 اط
ام.
`ل ذج ا-3 ( ا-&اذا ا ا
*/
if(!array_key_exists('agreement',$_POST) &&
!array_key_exists('register',$_POST))
{
٦٤ Handling forms التعامل مع النماذج: الفصل السابع
echo"
<p class='agreement'>
وط/ -& ا` & ا ?} ا ا
!ام ا ?} " رة%( ا¤ ا` ?} و ا
ا ص/ , و!م ا'½ ?} أو ا. ....
</p>
<form method='post'>
<p>` وط ا/ &<أواinput type='checkbox'
name='agreement'/></p>
<p><input type='submit' name='accept_agreement'
value=' 'ا ة اclass='button'/></p>
</form>
";
}
/*
!' ا ? ا` و/ & )( ان ا`!م وا-S3 ه
` ا
*/
elseif(array_key_exists('agreement',$_POST) &&
!array_key_exists('register',$_POST))
{
?>
<form method='post'>
<fieldset >
<legend>!! ¤ ` ذج3</legend>
<table>
<tr>
<td>) ا%*ا: </td>
<td><input type='text' name='name' id='name'
maxlength="50" /></td>
</tr>
<tr>
<td>3*ا! او:</td>
<td><input type='text' name='email' id='email'
maxlength="50" /></td>
</tr>
<tr>
<td> ا`!م%*ا:</td>
<td><input type='text' name='username' id='username'
maxlength="50" /></td>
</tr>
<tr>
<td>*آ اور:</td>
<td><input type='password' name='password'
id='password' maxlength="50" /></td>
</tr>
<tr>
<td><br />* ) ب-S<ا/td><td><br /><input
type='submit' name='register' value='`'ا م ا
class="button"/></td>
</tr>
٦٥ الفصل السابع :التعامل مع النماذج Handling forms
></table
></fieldset
></form
<?php
}
else
{
;]'$name = $_POST['name
;]'$username = $_POST['username
;]'$email = $_POST['email
;]'$pass = $_POST['password
.و من النافذة التالية قم بما يلي: بعد االنتھاء من كتابة الشفرة السابقة ،قم بالنقر على زر حفظ
.١قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد .C:\xammp\htdocs
.٢قم بتسمية الملف باسم . register.php
.٣غير نوع الملف Save as typeمن القائمة المنسدلة ليصبح )* All types(*.أو PHP Hypertext
.Preprocessor files
.٤انقر على الزر .Save
بعد االنتھاء من عملية الحفظ ،افتح متصفح االنترنت و اكتب العنوان التالي http://localhost/register.php :و
من ثم الحظ الناتج.
٦٦ الفصل السابع :التعامل مع النماذج Handling forms
١
٢
٣
٦٧ الفصل السابع :التعامل مع النماذج Handling forms
.١عند التعامل مع النماذج ما ھو الفرق بين طريقة إرسال البيانات POSTو . GET
) (array_key_exists
) (trim
.٣كيف يمكن التحقق من أزرار االختيار radioفي حال كانت تتبع لمجموعة واحدة.
عند التعامل مع نماذج HTMLبغرض السماح للمستخدمين بإدخال بيانات محددة فيجب علينا التحقق من تلك
البيانات قبل إجراء أي عملية عليھا .و تكمن أھمية إجراء عملية التحقق ألننا ال نضمن أن تكون البيانات ال ُمدخلة
صحيحة ،وبدون إجراء عملية التحقق قد تتسبب تلك البيانات بحدوث نتائج غير متوقعة قد يصعب معالجتھا الحقا.
لذلك يجب أن ال نثق في المستخدم ألن األخطاء قد تحدث عمدا أو عن غير قصد.
عملية التحقق من البيانات يمكن أن تتم بواسطة طريقتين:
و لتحقيق ذلك يوجد طرق كثيرة في PHPو من ضمنھا التعبيرات العادية . Regular Expressionsفي ھذه
الطريقة يتم البحث عن نمط patternضمن نص محدد.
الرمز } { للبحث عن نمط داخل نص بعدد مرات مختلف .فمثال } {nعلى فرض أن nعبارة عن رقم
صحيح تعني عدد مرات ظھور النمط داخل النص .و التعبير } {n,mتعني مرات ظھور النمط داخل النص
على األقل nو على األكثر . m
كل األنماط عند استخدامھا بشكل عملي يجب أن توضع بين شرطتين مائلة ./ /
أخيرا لمطابقة األنماط في PHPسنقوم بإستخدام الدالة ) ( . preg_matchيتم تمرير عدد من المعطيات
parametersلھذه الدالة .من ضمن ھذه المعطيات ،النمط patternو النص stringالذي سيتم البحث داخله .في
حال و جدت الدالة النمط داخل النص ستقوم بإرجاع القيمة ) 1التي تماثل (trueبخالف ذلك ستقوم بإرجاع القيمة 0
)التي تماثل .(false
<?php
;"$string = "abcdef
;'$pattern = '/^def/
;)echo preg_match($pattern,$string
%ن ا //٠ B
>?
٧٠ Form validation التحقق من بيانات النماذج: الفصل الثامن
<?php
$string = "defabc";
$pattern = '/^def/';
echo preg_match($pattern,$string);
//١ B ن ا%
?>
تطبيق عملي
في ھذا التطبيق لن يتمكن الزائر من إرسال النموذج إال بعد.في ھذا التطبيق سنقوم بتصميم نموذج تسجيل زائر جديد
كما يجب أن تكون المعلومات ال ُمدخلة صحيحة و لتحقيق ذلك سنقوم باستخدام.أن يقوم بتعبئة كامل النموذج
.validation للقيام بعملية التحققpreg_match() مع الدالةRegular Expressions التعبيرات العادية
: قم بكتابة الشفرة التالية. بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة.Notepad++ قم بفتح برنامج
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<title>` ذج3</title>
<style type="text/css">
body{
direction:rtl;
}
form input{
border:1px solid #CCC;
}
#result{
font-weight:bold;
color:#930;
text-align:center;
}
table{
border:2px solid #0C3;
width:500px;
padding:10px;
}
table caption{
background-color:#0C3;
font-weight:bold;
}
.submit{
width:75px;
}
.errorMessage{
text-align:right;
٧١ Form validation التحقق من بيانات النماذج: الفصل الثامن
font-weight:normal;
}
</style>
</head>
<body>
<form action="" method="post">
<table align="center">
<caption>!! ذج ` )`!م3</caption>
<tr><td colspan="2" id="result">
<?php
if(array_key_exists('register',$_POST))
{
$errors=array();
if(empty($_POST['name']))
{
array_push($errors,'%| ? اء إد@ل.');
}
elseif(preg_match('/[\'\/~`\!@#\$%\^&\*\(\)_\-
\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $_POST['name']))
{
array_push($errors,' Q ? / يS @! ا%ا
SP.');
}
if(empty($_POST['username']))
{
array_push($errors,' %² ? اد@ل اء
;)'ا`!م
}
elseif(!preg_match("/^[A-Za-z][A-Za-z0-
9_]+$/",$_POST['username']))
{
array_push($errors,' ا`!م%² @!ا -ا
SP Q.');
}
if(empty($_POST['password']))
{
array_push($errors,' ? اد@ل اء
;)'اور
}
elseif(!preg_match("/^[A-Za-z0-9_]*[A-Z][A-Za-z0-
9_]*$/",$_POST['password']))
{
array_push($errors,' ا!@ اور-ا
SP Q.');
}
٧٢ Form validation التحقق من بيانات النماذج: الفصل الثامن
elseif(strlen($_POST['password'])<6)
{
array_push($errors,' ٦ ( - آ اور أن
ت3@.');
}
elseif($_POST['password2'] !== $_POST['password'])
{
array_push($errors,' ¿آ! آ اور آ
@!ُ
;)'اور ا
}
if(empty($_POST['email']))
{
array_push($errors,' ! ? اء اد@ل
3;)'او
}
elseif(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-
9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})]*$/",$_POST['email']))
{
array_push($errors,' ! @!ا -ا
SP Q 3و²ا.');
}
if(empty($_POST['phone']))
{
array_push($errors,'u , ? ;)'اء اد@ل
}
elseif(!preg_match("/^[0-9]{10,12}$/",$_POST['phone']))
{
array_push($errors,' Q u , @! ا-ا
SP.');
}
if(empty($_POST['gender']))
{
array_push($errors,'` !!S ;)'اء
}
if(empty($_POST['from']))
{
array_push($errors,'!! !كS اء.');
}
if(empty($_POST['agreement']))
{
array_push($errors,' وط / -&ا ا اء
`ا.');
}
٧٣ Form validation التحقق من بيانات النماذج: الفصل الثامن
if($errors)
{
echo'<ol class="errorMessage">';
foreach($errors as $value)
{
echo '<li>'.$value.'</li>';
}
echo'</ol>';
}
else
{
echo'. ا` حt ! أ- ;' ا
}
}
?>
</td></tr>
<tr>
<td>|) آ%<ا/td>
<td><input name="name" id="name" size="20" maxlength="20"
type="text" value="<?php echo @$_POST['name']?>"/>*</td>
</tr>
<tr>
<td> ا`!م%<ا/td>
<td><input name="username" id="username" size="20"
maxlength="20" type="text" value="<?php echo
@$_POST['username']?>"/>*</td>
</tr>
<tr>
<td><آ اور/td>
<td><input name="password" id="password" size="20"
maxlength="15" type="password">*</td>
</tr>
<tr>
<td>< ¿آ! آ اور/td>
<td><input name="password2" id="password2" size="20"
maxlength="15" type="password">*</td>
</tr>
<tr>
<td>3<ا! او/td>
<td><input name="email" size="35" maxlength="30"
type="text" value="<?php echo @$_POST['email']?>">*</td>
</tr>
<tr>
<td>u ,<ر? ا/label></td>
<td><input name="phone" size="15" maxlength="15"
type="text" value="<?php echo @$_POST['phone']?>">*</td>
</tr>
<tr>
<td><ا/td>
<td><ذآinput name="gender" type="radio" value="male"><br
/>
٧٤ Form validation التحقق من بيانات النماذج: الفصل الثامن
: و من النافذة التالية قم بما يلي. قم بالنقر على زر حفظ، بعد االنتھاء من كتابة الشفرة السابقة
.C:\xammp\htdocs قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد.١
. form.php قم بتسمية الملف باسم.٢
PHP Hypertext أوAll types(*.*) من القائمة المنسدلة ليصبحSave as type غير نوع الملف.٣
.Preprocessor files
.Save انقر على الزر.٤
و منhttp://localhost/form.php :افتح متصفح االنترنت و اكتب العنوان التالي، بعد االنتھاء من عملية الحفظ
.ثم الحظ الناتج
٧٥ الفصل الثامن :التحقق من بيانات النماذج Form validation
في حال قام الزائر بإرسال النموذج بدون إدخال بيانات فسيتم عرض رسائل الخطأ التالية.
شرح التطبيق:
.١قمنا بتعريف المصفوفة $errorsلتخزين رسائل األخطاء التي ستحدث أثناء عملية التحقق.
.٢في حال حدوث أي خطأ أثناء عملية التحقق سنقوم بإدراج رسالة الخطأ المناسبة داخل المصفوفة السابقة
عن طريق استدعاء الدالة ) ( array_pushو تمرير معطيين لھا .األول يمثل إسم المصفوفة و الثاني رسالة
الخطأ.
.٣نقوم بالتحقق من الحقول الفارغة عن طريق الدالة ) ( emptyعن طريق تمرير المتغير الذي يحتوي على
قيمة الحقل المحدد .في حال كان الحقل فارغا ستقوم الدالة بإرجاع القيمة .true
.٤في حقل االسم استخدمنا النمط التالي
/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/
و الھدف من ھذا النمط أن يتم رفض أي قيم غير الحروف و األرقام و المسافة.
.٥في حقل اسم المستخدم استخدمنا النمط التالي
/^[A-Za-z][A-Za-z0-9_]*+$/
و ذلك لكي يتم قبول فقط الحروف واألرقم و الشرط السفلية.
٧٦ الفصل الثامن :التحقق من بيانات النماذج Form validation
.٢أيھما أفضل التحقق من البيانات بواسطة جھة العميل أو جھة الخادم مع ذكر السبب؟
.٣ھل ھناك طريقة أخرى غير استخدام الدالة ) ( emptyللتحقق من الحقول الفارغة ؟
.٤ھل يمكن استخدام وسوم HTMLبھدف اإلضرار بتطبيق االنترنت و كيف يمكن منع المستخدم من
إدخالھا في النموذج؟
.٥مستخدما شبكة اإلنترنت كيف يمكن التغلب على مشكلة SPAMمع النماذج؟
٧٨ الفصل التاسع :العمل مع Cookiesو Sessions
كما ھو معلوم أن البروتوكول المستخدم في نقل البيانات بين متصفح اإلنترنت و مواقع الويب المختلفة ھو بروتوكول
نقل النص التشعبي ) . HTTP( Hypertext Transfer Protocolلكن قد ال يعرف الكثير أن ھذا البرتوكول من
النوع statelessبمعنى أنه يتعامل مع كل طلب requestبشكل مستقل بدون أن يكون ھناك أي عالقة بين الطلب
الحالي current requestو الطلب السابق . previous requestلشرح ھذه العملية ،لنتخيل معا كيف يتم العمل
في المواقع التي تتيح خدمة التسوق اإللكتروني أو ما يسمى بـ . shopping cartsالذي يحدث أن الزائر لموقع
التسوق يقوم باستعراض المنتجات التي يقدمھا الموقع و من ثم يقوم باختيار المنتج و إضافته إلى سلة الشراء .في
الوضع العادي ،إذا انتقل الزائر إلى صفحة أخرى داخل الموقع لعرض منتج آخر فإن القيمة األولى المضافة إلى سلة
الشراء و التي تمثل المنتج األول الذي قام الزائر بإضافته إلى سلة الشراء سيتم فقدھا !! و السبب كما ذكرنا أن
البروتوكول HTTPمن النوع الذي ال يتذكر ما تم مسبقا مع الطلبات السابقة .للتغلب على ھذه المشكلة فإن كثير من
مواقع الويب تقوم باستخدام ما يسمى بـ sessionsو PHP . cookiesتقدم دعم كامل لـ sessionsو cookies
عن طريق عدد من الدوال المبنية مسبقا و الجاھزة لالستخدام من قبل مطوري الويب.
cookiesعبارة عن ملفات نصية صغيرة يتم تخزينھا في جھاز المستخدم بواسطة موقع إنترنت .ھذه الملفات تحتوي
على معلومات تسترجع من قبل موقع اإلنترنت الذي قام المستخدم بزيارته .و كمثال عليھا المنتديات الحوارية .عندما
يقوم المستخدم بتسجيل الدخول إلى أي منتدى للحوار يقوم بإدخال اسم المستخدم و كلمة المرور ،و في حال قام
بتحديد صح على مربع )تذكرني( في نموذج الدخول سيقوم الموقع بتخزين ملف cookieداخل جھاز المستخدم يتم
استخدامھا الحقا اذا قام المستخدم بزيارة الموقع الحقا و يتم تسجيل دخوله تلقائيا عن طريق المعلومات المخزنه داخل
جھازه .تعاني cookiesمن كثير من النقد ألنھا تستخدم لنقل البيانات بين المستخدم و موقع الويب لذلك توصف دائما
بأنھا سيئة و غير آمنة .لكن الحقيقة أنھا تعتبر كغيرھا من التقنيات يمكن استخدامھا بشكل سلبي أو إيجابي .لكن أكثر
ما يعيبھا أنه يمكن قراءتھا من قبل أي شخص يستخدم جھاز الكمبيوتر ألنھا ببساطة عبارة عن ملفات نصية .لذلك
يجب تجنب حفظ كلمات المرور باستخدام cookieإال في حال أن يتم تشفير كلمة المرور قبل أن يتم حفظھا و من ثم
يتم مطابقتھا بكلمة المرور المشفرة و المخزنة على الخادم .web server
ملفات cookiesيمكن قراءتھا فقط بواسطة موقع اإلنترنت الذي قام بتخزينھا.
كل موقع إنترنت ال يمكنه تخزين أكثر من ٢٠ملف .cookies
أقصى حجم لملف الـ cookieالواحد ھو ٤كيلوبايت.
أقصى عدد لملفات cookiesالتي يمكن تخزينھا داخل جھاز المستخدم ھو ٣٠٠ملف.
ألن ملفات cookiesسيتم تخزينھا داخل جھاز المستخدم ،لذلك ستكون إمكانية التحكم فيھا محدودة .فلو
قام المستخدم بإبطال دعم ) cookiesمن خيارات متصفح اإلنترنت( فلن يتمكن أي موقع من تخزين ملفات
cookiesداخل جھاز المستخدم.
٧٩ الفصل التاسع :العمل مع Cookiesو Sessions
إلنشاء ملف cookieسنقوم باستدعاء الدالة ) ( setcookieو التي تأخذ القيم التالية:
بسبب أن ملفات cookiesسيتم إعدادھا بواسطة HTTP headersفيجب وضعھا قبل أي عملية طباعة
بواسطة شفرة . PHPفي حال كان ملف PHPمضمنا مع وسوم HTMLفيجب وضع الدالة أيضا قبل
وسوم .HTML
<?php
setcookie("username", "Ahmad Ali", time()+3600, "/","",
;)0,1
;)setcookie("language", "ar", time()+3600, "/", "", 0, 1
>?
><html
><head
></head
><body
>?" ا3ء ) uا آ" <?php echo
></body
></html
نستطيع قراءة ملف cookieعن طريق المصفوفة العامة $_COOKIEبنفس الطريقة التي كنا نتعامل بھا مع
النماذج.
٨٠ الفصل التاسع :العمل مع Cookiesو Sessions
<?php
))if(array_key_exists('username',$_COOKIE
{
;'>echo $_COOKIE['username'].'<br/
;'>echo $_COOKIE['language'].'<br/
}
else
{
;'echo'No cookie
}
>?
لحذف ملف cookieكل ما علينا عمله ھو استدعاء الدالة ) ( setcookieو نقوم بكتابة نفس قيم ملف cookieالذي
قمنا بإنشائه مسبقا لكن مع تحديد وقت الصالحية ملف cookieالى وقت سابق باإلضافة ترك القيمة فارغة كالتالي:
<?php
;)setcookie("username", "", time()-3600, "/","", 0,1
;)setcookie("language", "", time()-3600, "/", "", 0, 1
>?
><html
><head
></head
><body
>?" 2#ف ) uا آ" <?php echo
></body
></html
العمل مع sessions
الجلسة أو sessionتعمل نفس عمل cookieبتوفير طريقة لالستمرارية ) تذكر الحالة ( مع اختالف بسيط في
التعامل .فبدال من تخزين الملف في جھاز العميل يتم تخزين الملف على جھاز الخادم web serverفي مجلد مؤقت
يتم تخزين متغيرات sessionوقيمھا داخله .و لھذا السبب تعتبر sessionsأكثر أمانا من .cookies
أخيرا تنتھي sessionبمجرد إقفال المستخدم لمتصفح اإلنترنت.
إلنشاء sessionكل ما علينا عمله ھو إستدعاء الدالة ) ( session_startفي بداية كل صفحة نرغب بأن تُستخدم في
الجلسة مع ضرورة االنتباه لما يلي:
ھذه الدالة يجب أن تستدعى مرة واحدة فقط في كل صفحة.
يجب أن نستدعي ھذه الدالة قبل طباعة أي بيانات بواسطة الشفرة البرمجية باإلضافة إلى أنھا يجب أن
تسبق وسوم .HTML
٨١ الفصل التاسع :العمل مع Cookiesو Sessions
إلنشاء متغير الجلسة ،نستطيع إضافته إلى المصفوفة العامة ) $_SESSIONترابطية ( Associativeبنفس
الطريقة التي نتعامل بھا مع المتغيرات .فلو أردنا مثال تخزين إسم الزائر و طباعة رسالة ترحيب له .فسوف نقوم
بتخزين إسمه في الجلسة كالتالي:
;]'$_SESSION['name'] = $_POST['name
كما ھو واضح قمنا بتخزين إسم الزائر و المدخلة عن طريق نموذج التسجيل في المصفوفة العامة .$_SESSION
نستطيع اآلن استخدام متغير الجلسة السابق في كل صفحة تبدأ بـ ) (. session_start
في حال أصبح متغير الجلسة غير مطلوب بواسطة الشفرة البرمجية فتسطتيع تدميره/حذفه عن طريق استدعاء الدالة
) ( unsetكالتالي:
;)]'unset($_SESSION['name
في ھذه لن يصبح المتغير السابق متاحا ألي صفحة.
في حال لم يعد ھناك أي حاجة للجلسة الحالية نستطيع تدمير الجلسة عن طريق استدعاء الدالة
) (.session_destroy
في بعض الحاالت عند التعامل مع نظام تسجيل الدخول user login systemفي موقع االنترنت تبرز الحاجة
الستخدام طريقة تضمن انھاء الجلسة في حال لم يقم المستخدم بأي نشاط بعد مرور وقت محدد .ھذي الطريقة تساعد
على منع استخدام النظام من قبل شخص غير مخول له بذلك .فلك أن تتخيل في حال نسي المستخدم اقفال صفحة
حسابه البنكي أو بريده االلكتروني في مقھى انترنت.
<?php
;)(session_start
!!Sا ? * tا !S 3ا /"?0ا` Sح */
!`*/م س !ون 3ط دا@ ا"S
;$inactive = 5
// check to see if $_SESSION["timeout"] is set
{ ))]"if (isset($_SESSION["timeout
"// calculate the session's "time to live
;]"$sessionTTL = time() - $_SESSION["timeout
{ )if ($sessionTTL > $inactive
;)(session_destroy
ا Sا t,3اء إ!@ ل )ة أ@ى 'echo ا`
;'م
}
}
>? ;)($_SESSION["timeout"] = time
٨٢ الفصل التاسع :العمل مع Cookiesو Sessions
في أحيان كثيرة تكون ھناك حاجة إلعادة توجيه المستخدم إلى صفحة أخرى .فلو أردنا مثال منع وصول زوار الموقع
لصفحة من صفحات الموقع ) بسبب سرية محتوى الصفحة و لتقييد الوصول ( فنستطيع تحقيق ذلك بإعادة توجيه
متصفح الزائر إلى صفحة أخرى غير الصفحة الحالية التي وصل إليھا ) بكتابة عنوانھا مباشرة في . ( URLإلعادة
توجيه المستخدم إلى صفحة أخرى نستطيع استخدام إحدى الطرق التالية:
عن طريق استدعاء الدالة ) ( headerو التي تقوم بإرسال متصفح الزائر إلى صفحة محددة .لكن في ھذه
الحالة البد االنتباه إلى الدالة ھذه يجب أن يتم استدعاءھا قبل أي وسوم HTMLو قبل أي مخرجات تتم
عن طريق البرنامج.
الطريقة الثانية عن طريق إضافة شفرة جافا سكرت ضمن شفر .PHPو في ھذه الحالة لدينا الحرية في
وضعھا في أي مكان داخل شفرة .PHP
<?php
))]'if(!isset($_POST['login
{
;)"header("Location:login.php
}
>?
في حال أردنا استخدام شفرة جافا سكربت بدال من ذلك فنستطيع عمل ذلك كما في المثال التالي:
<?php
))]'if(!isset($_POST['login
{
Sا´ن إ ` SP /ا!@ ل" echo ;"%.
"echo
><script
;'window.location = 'login.php
></script
;"
}
>?
٨٣ الفصل التاسع :العمل مع Cookiesو Sessions
واحدة من أھم مزايا PHPأنھا تدعم العمل مع أغلب أنظمة قواعد البيانات المعروفة و الشھيرة .من ھذه النظم
الشھيرة يبرز نظام قواعد البيانات .MySqlو كما سبق أن اشرنا في أول فصل بأن PHPو MySqlمن االنظمة
مفتوحة المصدر و باستخدامھما معا سيوفر مطور الويب الكثير من األموال لشراء حقوق االستخدام من الشركات
المنتجة.
ھناك أكثر من طريقة في PHPلالتصال بقاعدة البيانات .MySqlو من ھذه الطرق استخدام اإلضافة mysqliو
التي تسمح لنا باالتصال بنظام قاعدة البيانات MySql 4.1فما أعلى .و يجب اإلشارة أن ھذه االضافة لن تعمل إال
مع النسخة الخامسة من PHPفما أعلى.
إلنشاء اتصال بـ MySqlنقوم باستدعاء الدالة ) ( mysqli_connectو التي تأخذ أربع معطيات كالتالي:
: hostnameاسم الجھاز أو عنوانه الذي يحتوي على ) MySqlغالبا ما يكون .( localhost
: usernameاسم مستخدم النظام.
: passwordكلمة مرور مستخدم النظام.
:databaseاسم قاعدة البيانات.
<?php
>?
الدالة ) ( mysqli_connect_errorال ُمستخدمة في المثال السابق تقوم بعرض وصف نصي آلخر
خطأ حدث أثناء االتصال بقاعدة البيانات.
٨٥ الفصل العاشر :التعامل مع قواعد البيانات
بالرغم من أن االتصال يتم قطعه بمجرد االنتھاء من تنفيذ الشفرة البرمجية إال انه ينصح إغالقه برمجيا عند االنتھاء
من العمل مع MySqlو ذلك عن طريق استدعاء الدالة ) ( . mysqli_closeھذه الدالة ستقوم بإرجاع trueفي
حال تم اغالق االتصال بخالف ذلك ستقوم بإرجاع .false
<?php
عند التعامل مع MySqlكنظام قواعد بيانات فيجب أن يكون لدينا القدرة على كتابة االستعالمات باستخدام لغة SQL
) .(Structured Query Languageو لتنفيذ أي استعالم بواسطة PHPنقوم باستدعاء الدالة
) ( mysqli_queryو التي تأخذ معطيين األول المتغير الذي يحتوي على معلومات االتصال بقاعدة البيانات و
الثاني يحتوي على االستعالم.
تقوم ھذه الدالة بإرجاع falseفي حال فشلت في تنفيذ االستعالم .و في حال نجحت في تنفيذ االستعالم فلھا حالتين:
في حال أن االستعالم سيقوم بإرجاع سجالت من قاعدة البيانات مثل select , describe ,show and
، explainففي ھذه الحالة ستقوم الدالة بإرجاع مجموعة نتائج MySql Result Setنتعامل معھا الحقا
بواسطة الدالة ) (.mysqli_fetch_array
أما في حال أن االستعالم لن يقوم بإرجاع سجالت من قاعدة البيانات مثل update , delete , insert ,….
فستقوم الدالة بإرجاع .true
على افتراض أنه لدينا قاعد بيانات باسم ، testسنقوم اآلن بإنشاء جدول لتخزين معلومات عن الكتب.
٨٦ الفصل العاشر :التعامل مع قواعد البيانات
و قبل البدء في إنشاء الجدول يجب نحدد البيانات التي يجب أن نعرفھا عن الكتاب و التي بمعرفتھا سنقوم بإنشاء
الجدول:
رقم الكتاب و يجب أن يكون رقما مميزا غير متكرر .
اسم الكتاب سيكون نصا بطول ١٠٠حرف.
اسم المؤلف و سيكون نصا بطول ٦٠حرفا.
الناشر و سيكون نصا بطول ٦٠حرفا.
تاريخ النشر و نوعه تاريخ.
سعر الكتاب و نوعه رقم .
اآلن لم يتبق علينا إال معرفة انواع البيانات data typesفي MySqlو الموضحة في الجداول التالية:
الوصف النوع
سلسلة نصية ثابتة دائما يتم ازاحتھا ناحية اليمين بواسطة مسافة فارغة للوصول للطول المحدد char
و بحد أقصى ٢٥٥حرف.
سلسلة نصية متغيرة بحد أقصى ٢٥٥حرف. varchar
سلسلة نصية تصل إلى طول ٦٥٥٣٥حرف. text
سلسلة نصية تصل إلى طول ١٦٧٧٧٢١٥حرف. mediumtext
سلسلة نصية تصل إلى طول ٤٢٩٤٩٦٧٢٩٥حرف. longtext
رقم صحيح صغير جدا يتراوح بين ١٢٨-إلى ١٢٧و من ٠إلى ٢٥٥للرقم الصحيح tinyint
الموجب.
رقم صحيح يتراوح بين ٢١٤٧٤٨٣٦٤٨-إلى ٢١٤٧٤٨٣٦٤٧و من ٠إلى int
٤٢٩٤٩٦٧٢٩٥للرقم الصحيح الموجب.
رقم صغير مع عالمة عشرية. float
رقم كبير مع عالمة عشرية. double
تاريخ بالصيغة YYYY-MM-DD date
تركيبة من التاريخ و الوقت بالصيغة YYYY-MM-DD HH:MM:SS datetime
الطابع الزمني YYYYMMDDHHMMSS timestamp
الوقت بالصيغة HH:MM:SS time
ويمكن االطالع على تفصيل أكثر عن أنواع البيانات من خالل زيارة الموقع الرسمي لـ MySqlالتالي
http://dev.mysql.com/doc/refman/5.0/en/data-type-overview.html
اآلن سنقوم بإنشاء بكتابة شفرة PHPالتي ستقوم بإنشاء الجدول . books
<?php
ا ة او /ه ا "ل !-ة ا3ت ا!Sدة//
;)'$conn=mysqli_connect('localhost','root','','test
)if($conn === false
{
echo " و ا3ت !-ة ا "ل أء @ ¿ !#ث
;)(".mysqli_connect_errorا`
}
٨٧ الفصل العاشر :التعامل مع قواعد البيانات
else
{
sqlا -م 3ء ا!ول//
($query = " CREATE TABLE books
isbn )varchar(16 not
null,
title )varchar(100
null,
author )varchar(60 null ,
publisher )varchar(60 null,
publish_date date null,
price float null,
)primary key(isbn
;")
ا´ن -3م 2ا|'%م//
;)$result = mysqli_query($conn,$query
)if($result
{
;" ا3ء ا!ول ا!Sد ح" echo
}
else
{
echo " و ا!ول ا3ء أء ) !#ث
;):".mysqli_error($connا`
}
}
;) mysqli_close( $conn
>?
و معنى رسالة الخطأ أن الجدول booksموجود مسبقا و ال يسمح بإنشائه مرة أخرى.
في أحيان كثيرة قد نواجه كثير من األخطاء عند كتابة االستعالمات .لذلك من الجيد أن نقوم بعرض رسائل األخطاء
التي تنتج عند تنفيذ االستعالمات لكي يتم التعامل معھا .لعرض رسائل األخطاء نقوم باستدعاء الدالة
) ( mysqli_errorو التي تأخذ معطى واحد كالتالي:
;)echo mysqli_error($conn
حيث $connيمثل المتغير الذي يحتوي على معلومات االتصال بقاعدة البيانات.
٨٨ الفصل العاشر :التعامل مع قواعد البيانات
إلضافة بيانات داخل جدول في قاعدة البيانات نقوم باستخدام األمر insertأحد أوامر SQLو الذي يستخدم إلدراج
البيانات.
لكن يجب الحذر عند اضافة البيانات داخل قاعدة البيانات لكي ال تتضرر من قيام المستخدم بإدخال قيم غير صحيحة
بھدف االضرار بقاعدة البيانات.
و لتفادي ذلك يجب علينا القيام بالخطوات التالية:
إجراء عملية التحقق باستخدام الدالة ) ( ) preg_matchتم شرحھا سابقا في الفصل الثامن( أو أي دالة
أخرى تقوم بعمل مشابه للتحقق من البيانات المرسلة من خالل النموذج )على افتراض ان البيانات ستُرسل
لقاعدة البيانات باستخدام نموذج . (HTML
بعد ذلك يجب أن نقوم باستخدام الدالة ) ( mysqli_real_escape_stringلتجاھل أي رموز خاصة
يكون لھا داللة في SQLكعالمات االقتباس.
اآلن سنقوم بإضافة سجل جديد داخل الجدول السابق booksكما يلي
<?php
;)'$conn=mysqli_connect('localhost','root','','test
)if($conn === false
{
echo " و ا3ت !-ة ا "ل أء @ ¿ !#ث
;)(".mysqli_connect_errorا`
}
else
{
;'$isbn = '978-603-500-045-1
-ت ا!% t33ام' = $title ;' PHPا3ء
;'أ !#ا'!$author = 'T
;'دار ا' = $publisher
;'$publish_date ='2006-05-20
;'$price ='123.25
;)$isbn = mysqli_real_escape_string($conn,$isbn
;)$title = mysqli_real_escape_string($conn,$title
;)$author = mysqli_real_escape_string($conn,$author
;)$publisher = mysqli_real_escape_string($conn,$publisher
$publish_date =
;)mysqli_real_escape_string($conn,$publish_date
;)$price = mysqli_real_escape_string($conn,$price
values('$isbn','$title','$author','$publisher','$publish_date',$
;")price
;)$result = mysqli_query($conn,$query
٨٩ الفصل العاشر :التعامل مع قواعد البيانات
)if($result
{
;" tا &Ãا3ت echo "O3
}
else
{
echo " و ا3ت ا&Ã أء ) !#ث
;):".mysqli_error($connا`
}
}
;) mysqli_close( $conn
>?
و السبب ألن الحقل isbnيحتوي على القيد primary keyو الذي ال يسمح بتكرار القيم.
بعد أن أصبح اآلن لدينا مجموعة من البيانات داخل قاعدة البيانات ،فمن المھم أن نستطيع استرجاع تلك البيانات و
من ثم التعامل معھا .و السترجاع سجالت من قاعدة البيانات نتبع الخطوات التالية:
<?php
;)'$conn=mysqli_connect('localhost','root','','test
)if($conn === false
{
echo " و ا3ت !-ة ا "ل أء @ ¿ !#ث
;)(".mysqli_connect_errorا`
}
else
{
;"$query = "select * from books
٩٠ التعامل مع قواعد البيانات: الفصل العاشر
$result = mysqli_query($conn,$query);
$numberOfRows = mysqli_num_rows($result);
if($result)
{
if($numberOfRows>0)
{
echo'<table border="1" align="center">';
echo'<tr><th> %ا
<اب/th><th>u<ا/th><th> <ا/th><th> ر
<ا/th><th>' اب%</th></tr>';
while($row = mysqli_fetch_array($result))
{
echo'<tr><td>'.$row['title'].'</td><td>'.$row['author'].'<
/td><td>'.$row['publisher'].'</td><td>'.$row['publish_date'].'<
/td><td>'.$row['price'].'</td></tr>';
}
}
else
{
echo'# ت3 ! ;' ا
}
}
else
{
echo " و ت3ا &Ãا أء ) !ث#
`ا:".mysqli_error($conn);
}
}
mysqli_close( $conn );
?>
كما فعلنا فيmysqli_num_rows() لمعرفة عدد النتائج )عدد السجالت( الستعالم ما نستطيع استدعاء الدالة
. ھذه الدالة تأخذ معطى واحد يمثل المتغير الذي يحتوي على ناتج االستعالم.المثال السابق
mysqli_num_rows( $result )
٩١ الفصل العاشر :التعامل مع قواعد البيانات
في بعض الحاالت قد نحتاج لتنفيذ أكثر من استعالم داخل الشفرة البرمجية الواحدة .لذلك يُنصح في ھذا الحالة أن يتم
إفراغ الذاكرة من ناتج االستعالم األخير لكي يتم استخدامه من قبل استعالم آخر .و نستطيع تحقيق ذلك عن طريق
استدعاء الدالة ) ( mysqli_free_resultو التي تأخذ معطى واحد يمثل المتغير الذي يحتوي على ناتج االستعالم
كما يلي
) mysqli_free_result( $result
تطبيق عملي
في ھذا التطبيق سنقوم بتصميم سجل للزوار .ھذا التطبيق سيمسح لزائر بطرح تعليقاته حول الموقع .و قبل أن نبدأ في
كتابة شفرة سجل الزوار سنقوم بكتابة شفرة PHPتقوم بإنشاء الجدول guestbookو الذي سيُستخدم لتخزين
تعليقات الزوار.
قم بفتح برنامج .Notepad++بعد ذلك سيقوم البرنامج بإنشاء مساحة عمل فارغة .قم بكتابة الشفرة التالية:
<?php
;)'$conn=mysqli_connect('localhost','root','','test
)if($conn === false
{
echo " و ا3ت !-ة ا "ل أء @ ¿ !#ث
;)(".mysqli_connect_errorا`
}
else
{
($query = " CREATE TABLE guestbook
id int primary key
auto_increment,
name varchar(50) not null,
email varchar(50) not null ,
comment text not null,
date datetime not null
;")
;)$result = mysqli_query($conn,$query
)if($result
{
;" ا3ء ا!ول ا!Sد ح" echo
}
else
{
echo " و ا!ول ا3ء أء ) !#ث
;):".mysqli_error($connا`
}
}
;) mysqli_close( $conn
>?
٩٢ التعامل مع قواعد البيانات: الفصل العاشر
: و من النافذة التالية قم بما يلي. قم بالنقر على زر حفظ، بعد االنتھاء من كتابة الشفرة السابقة
.C:\xammp\htdocs قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد.١
. createTable.php قم بتسمية الملف باسم.٢
PHP Hypertext أوAll types(*.*) من القائمة المنسدلة ليصبحSave as type غير نوع الملف.٣
.Preprocessor files
.Save انقر على الزر.٤
.http://localhost/createTable.php قم بتنفيذ الملف عن طريق كتابة العنوان.٥
#messages{
border:1px solid #666;
background-color:#fff;
padding:2px;
}
#messages th{
background-color:#0FC;
}
#messages td{
background-color:#0FF;
}
#addMessage{
margin-right:400px;
color:#960;
font-weight:bold;
}
٩٣ التعامل مع قواعد البيانات: الفصل العاشر
hr{
border:1px solid #666;
width:800px;
}
</style>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<table width="40%" align="center" cellpadding="3">
<tr>
<td width="27%">%<ا/td>
<td width="73%"><label for="name"></label>
<input type="text" name="name" id="name"
size="50px"/></td>
</tr>
<tr>
<td>3<ا! او/td>
<td><label for="email"></label>
<input type="text" name="email" id="email"
size="50px"/></td>
</tr>
<tr>
<td>'<ا/td>
<td><label for="comment"></label>
<textarea name="comment" id="comment" cols="45"
rows="5"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="add" id="add"
value="& ارآÃ "إ/></td>
</tr>
</table>
</form>
<hr />
<?php
$conn = mysqli_connect('localhost','root','','test');
if(!$conn)
{
exit(mysqli_connect_error());
}
else
{
if(isset($_POST['add']))
{
echo'<div id="addMessage">';
$errors = array();
if(empty($_POST['name']) || empty($_POST['email']) ||
empty($_POST['comment']))
{
٩٤ التعامل مع قواعد البيانات: الفصل العاشر
if($errors)
{
echo'<ol class="errorMessage"> OS" اء
@ ء ا0;'ا
foreach($errors as $value)
{
echo '<li>'.$value.'</li>';
}
echo'</ol>';
}
else
{
$name =
mysqli_real_escape_string($conn,$_POST['name']);
$email =
mysqli_real_escape_string($conn,$_POST['email']);
$comment =
mysqli_real_escape_string($conn,$_POST['comment']);
values('$name','$email','$comment',NOW())";
$result = mysqli_query($conn,$insertQuery);
if($result)
{
echo' -' &Ãا !- ، ا
;'ح
}
else
{
echo mysqli_error($conn);
٩٥ التعامل مع قواعد البيانات: الفصل العاشر
}
}
echo'</div>';
}
$query = "select * from guestbook order by date";
$result = mysqli_query($conn,$query);
$numberOfRows = mysqli_num_rows($result);
echo'<table align="center" id="messages" cellspacing="1"
cellpadding="3">';
if($numberOfRows>0)
{
echo'<tr><th>%<ا/th><th> !ا
3<او/th><th>%<ا/th><th>%< ر ا/th></tr>';
while($row = mysqli_fetch_array($result))
{
echo'<tr><td>'.$row['name'].'</td><td>'.$row['email'].'</td
><td>'.$row['comment'].'</td><td>'.$row['date'].'</td></tr>';
}
}
else
{
echo'<tr><td> }? زوار ا% & ! )رآت
#.</td></tr>';
}
echo'<table>';
}
?>
</body>
</html>
: و من النافذة التالية قم بما يلي. قم بالنقر على زر حفظ، بعد االنتھاء من كتابة الشفرة السابقة
.C:\xammp\htdocs قم بتغيير مكان الحفظ عن طريق االنتقال للمجلد.١
. guestbook.php قم بتسمية الملف باسم.٢
PHP Hypertext أوAll types(*.*) من القائمة المنسدلة ليصبحSave as type غير نوع الملف.٣
.Preprocessor files
.Save انقر على الزر.٤
.http://localhost/guestbook.php قم بتنفيذ الملف السابق عن طريق كتابة العنوان.٥
٩٦ الفصل العاشر :التعامل مع قواعد البيانات
و كما ھو واضح في الشفرة السابقة فقد قمنا بإجراء عملية التحقق validationعلى البيانات ال ُمدخلة قبل إضافتھا
لقاعدة البيانات.
الدالة )( NOWال ُمستخدمة في المثال السابق في جملة insertمن دوال SQLو تُستخدم لطباعة
التاريخ و الوقت الحالي و ال توضع بين عالمات االقتباس.
٩٦ الفصل العاشر :التعامل مع قواعد البيانات
.١ما ھي أنظمة قواعد البيانات التي تدعمھا ) PHPاستخدم شبكة االنترنت للبحث (.