PHP دورة لكل الراغبين

Started by chornox, August 12, 2006, 05:22:06 AM

Previous topic - Next topic

Croco


السلام عليكم و رحمة الله و بركاته
بناءا على اقتراح سابق قررت وضع هذا الموضوع الذي سيتناول تدعيم المعرفة الأساسية للمستخدمين بلغة php
حيث توجد في المنتدى مجموعة من الدروس القيمة لكن حرصا على مصلحة مستخدمينا قمت بترجمة هذه الدروس بشان تكون لها فائدة أكبر و من أجل تدعيم دور اللغة العربية في منتديات SMF .

سنقوم الآن بجولة سريعة على الخطة التي سأتبعها في تقديم دروس PHP .
الموضوع متفرع كثيرا لذا قد نضطر لدخول في مواضيع فرعية ليس لها علاقة بالدرس الحالي لكن لها أهميتها .


-تحميل سيرفر محلي لاختبار برامجك عليها
-- الاختبار الأول ( سكيون باستخدام برنامج بسيط يطبع "مرحبا" ,و اختبار كود  phpinfo , و اختبار برنامج phpmyadmin )

الخطة هي :

- أساسيات PHP
-- ترويسات PHP
-- داخل ترويسات PHP و خارج ترويسات PHP , هناك اختلاف و هذه ما يجعل PHP جيد لتطوير المواقع
-- تعليقات , هناك عدة طرق لوضع التعليقات في الكود و لماذا ينبغي علينا فعل ذلك

- توثيق PHP و ما هي الطريقة لكي تصبح متمكن منه

- الخرج و معلومات عن print() و echo()

-تهيئة المتحولات بـالعملية "=" و طباعة المتحولات
-- السلاسل المحرفية  strings
-- الأرقام numbers
-- علامات التنصيص المفردة و المزدوجة

- تهيئة المصفوفات , هناك طريقتين لتهيئة المصفوفات  في  PHP

- التعليمات

- نعليمات التحكم , سوف نناقش أبسط أشكال اتعليمات التحكم
-- الشرطية if/elseif/else
-- الحلقات while
-- التكرار foreach

- تعليمة  POST ضد تعليمة GET في صيغ HTML ( الفرق بينهما )

- كيفية إرسال  تعليمة GET لمعلوماتها

- كيفية إرسال  تعليمة POST لمعلوماتها

- المتحولات المعرفة مسبقا
-- المتحولات العامة register_globals مفعلة \ غير مفعلة ؟
-- $HTTP_*
-- $_*

- التوابع و لماذا هي مهمة


I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


السبب وراء وضعي الدرس الأول هو تثبيت سيرفر محلي من أجل اختبار الكودات بشكل أسهل .
لانه بوجود سيرفر محلي فإن ذلك يغنيك عن وجود موقع من أجل تحميل الملفات عليه  , ملفات يمكن أن تعدل و تختبر بظرف ثواني .
بشان حافظ على بساطة الدروس  قررت أن لا أطلب منكن أن تنزلوا كل أجزاء السيرفر على حدة رح أعطيكن عنوان تنزلوا منه رزمة جاهزة حاوية على كل شي بتحتاجوه بدون مشاكل

حمّلوا الملف الموجود على الرابط التالي :


http://www.easyphp.org/telechargements/dn.php?F=easyphp1-6.php3


EasyPHP سوف يقوم بتحميل  apache, php, mySQL, and phpMyAdmin و كل ذلك بكم كبسة زر

البرنامج أصله فرنسي و التثبيت فرنسي بس ما في فرق غير أنو بتكبسو الترتيب التالي :

"yes", "Suivant", "Oui", "Suivant", "Suivant", "Installer"
ينبغي عليكم الآن أن تكونوا قد ثبتم EasyPHP
و صار عندكن سيرفر على جهازكن

لبدأ التجريب إذا استطعت أن تفعل التالي :

ابدأ --> البرامج --> EasyPHP  --> ومن ثم اضغط على اختصار  البرنامج

ينبغي عليك أن ترى حرف E بجانب الساعة و نقطة حمراء   عليها عم تغمز
إذا ما كانت النقطة عم تغمز  بالزر اليمين على حرف E وبعدها اضغط على "start" .
النقطة الحمراء لازم تغمز هلأ
اضغط زر يمين على E مرة تانية و اختر "configuration" . المربع النصي الذي في الأسفل مكتوب عليه "mySQL arguments" يجب تغييره إلى
"--skip-name-resolve --language=english"
(أزلت "french" و وضعت "english")

كل الملفات التي تريد أن تختبرها ينبغي أن تكون في المجلد التالي :

C:\Program Files\EasyPHP\www

ابدأ بانشاء ملف هناك سميه phpinfo.php
ضمن الملف ضع الكود التالي
(ليس من المهم أن تعرف ماذا يفعل هذا الكود الآن)


<? echo phpinfo(); ?>

إذا كان السيرفر يعمل بدون مشاكل فإن النقطة الحمراء الموجودة على حرف E عم تغمز
افتح متصفح انترنت و اكتب العنوان التالي :
http://127.0.0.1/phpinfo.php

إذا ظهرت معلومات عن PHP إذاً مبروك فإن السيرفر يعمل على جهازك

لنختبر شيء آخر  phpMyAdmin. 
phpMyAdmin هو عبارة عن واجهة للتعامل مع mySQL مكتوب بلغة PHP و يسمح لك بالتعامل مع الجداول و قواعد المعطيات .
حاول الذهاب إلى العنوان التالي للتأكد من أن كل شيء على ما يرام :

http://127.0.0.1/mysql/
إذا رأيت خرج عادي و ليس مجموعة أخطاء فتأكد أن السيرفر يعمل على جهازك

ملاحظات :
كل الملفات التي تحوي PHP يجب أن تكون في المجلد التالي "C:\Program Files\EasyPHP\www"
و للوصول لاختبار الكود يجب الذهاب للعنوان التالي:



"http://127.0.0.1/(اسم الملف مع اللاحقة)".

عدة أمثلة :

للتعديل

C:\Program Files\EasyPHP\www\file.php
للاختبار

http://127.0.0.1/file.php
للتعديل

To edit: C:\Program Files\EasyPHP\www\new directory\file.php
للاختبار

http://127.0.0.1/new%20directory/file.php
( %20 معناها فراغ بس أنت بتكتب فراغ و المتصفح بيحولك ياها إلى %20)

ملاحظات جانبية :
تستطيع أن تنشأ كود PHP بأي محرر نصوص لا يضيف أي تنسيقات للخطوط مثل notepad أو wordpad
ملف PHP  لازم تكون لاحقته php

I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


الشي الرائع عن PHP أنو هي لغة اختصاصية للويب . أي اختصاص اللغة هو  التطوير الانترنتي

حيث تحصل على الكثير من المزايا التي تجعل عملك أبسط .

من الأشياء المتميزة في لغة PHP هو القدرة على الخلط و الدمج مع كود HTML .

إذا كنت متعامل مع HTML , فإنك تعلم أن تعليمات HTML عبارة عن كلمات خاصة تنظم  تنسيق صفحات HTML مصورة ضمن س و س , مثال إذا أردت جعل الخط عريض فإنك تغلفه بتعليمتي b و b  , في حين في لغة PHP لا تعمل هذه الطريقة  بدلا من ذلك فإن كل كود الـ PHP يقع على يمين تعليمة PHP


هناك طريقتين لكتابة تعليمة الـ PHP  (و هناك بدائل لكنها قليلة الاستخدام)

<?php ?> الطريقة الطويلة
أو
<? ?> الطريقة المختصرة

أي شي ضمن هذه التعليمات سوف يتم التعرف عليه كـــكود PHP و أي شي خارجها سوف يتم التعرف عليه كــكود HTML .
مثال بسيط ( ليس من المهم أن تعرف ماذا يفعل التالي الآن)

احفظ في مسار المجلد www الملف التالي
basic.php
بداخله  الكود التالي :


<html>
<head>
<title></title>
</head>
<body>


<? print 'php code here'; ?>

</body>


</html>


و عن طريق المتصفح استدعي العنوان التالي :
http://127.0.0.1/basic.php

بعض الناس لا يحبذون هذه الطريقة يفضلون جعل كل الملف عبارة عن كود PHP و من خلال استخدام توابع PHP يضعون الخرج كـ HTML

الشغلة الأساسية الأخرى التي أريد أن أذكره في هذا الدرس هو كيفية كتابة التعليقات ,
التعليق هو طريقة لوضع شرح للكود الذي كتبته و الذي لن يؤثر على الكود الذي كتبته بأية طريقة .
التعليقات تساعد المبرمجين الآخرين من أجل فهم كودك الذي كتبته . لكتابة التعليقات عدة طرق ( احفظ و اختبر التالي )
الملف : comments.php


<?
print 'hello<br>'; //this is a comment, this line prints "hello"

print 'how are you?<br>'; #this is also a comment, this line prints "how are you?"

print 'I am good thank you<br>'; /* this is a multi-line comment
                                    and can span several lines */
?>


أي شيء بعد "//" أو "#" في السطر يفسر كتعليق
و لن يستخدم . أي شي بين "/* */"  سوف يتم تفسيره كتعليق .
التعليقات يمكن أن توضع في أي مكان في الأسطر بين التعليمات أو بعد التعليمات في نفس السطر, لكن ليس قبلها و هذا لا ينطبق على "/* و */" لأن كل الكود الذي بينهما يعتبر تعليق مثال:



<?
print 'hello<br>'; //this is a comment, this line prints "hello"
//here is another comment tag
print 'how are you?<br>'; #this is also a comment, this line prints "how are you?"
#more comments inbetween
/* a comment before with this type of comment tag */ print 'I am good thank you<br>';
/* this is a multi-line comment and can span several lines */
?>


أجل كما تفكر سوف نبدأ بالخطوة التالية و التي هي الخرج النصي , لكن هذا سوف يتم إعطاءه بالدرس القادم إن شاء الله 



I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


سأقوم الآن بتقديم تعاريف بعض المصطلحات التي سأستخدمها في الدروس بشكل متكرر


ما هو المتحول variable ؟
و هو شيء يستطيع أن يحوي قيمة متغيرة .
تستطيع تخيل المتحول كـصندوق و بداخله القيمة التي نريدها . و الأشياء الموجودة داخل الصندوق ممكن أن تتغير  و  حيث يتم  مسح محتويات الصندوق و وضع محتويات جديدة مختلفة . و هذه هي الطريقة المثلى لكي تتصور المتحول و التي تقوم على أن تعتبر المتحول شي يتحول ليخدم حاجاتك . المتحول لديه خاصتين اسمه و قيمته .


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


ما هو التابع function ؟
هو بالضبط مثل تعريف القاموس : الفعل الذي يقوم بتوظيف أو ملائمة شخص أو شيء . و هو مجموعة من الكود أو التعليمات و التي تؤدي وظيفة معينة . للتابع ثلالثة أقسام , الاسم , المعلومات التي تقدمها له , المعلومات التي ترجعها .

إلى الأشخاص التواقين لاستكشاف لغة الـ PHP ينبغي عليهم التعامل مع توثيق PHP و API الموجودة غلى الرابط التالي :
http://www.php.net/manual/en/.
في هذا الموقع ستجدون كل توابع PHP و ميزاتها الأساسية . الموقع سوف يساعدكم في أساسيات الكود . الشيء الرائع في استخدام توثيق PHP على الانترنت أنه يتوفر الكثير من التعليقات المقدمة من المستخدمين لكل شيء و التي ستساعدك على عدم الوقوع في أي سوء تفاهم قد يحدث معك .

بعض الأشياء التي قد تفيدك قرائتها للدرس القادم على الرابطين التالين :
http://www.php.net/manual/en/function.print.php

http://www.php.net/manual/en/function.echo.php


I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


لقد شرحت لكم ما هو المتحول في الدرس السابق ؛
الآن دعوني أريكم طريقة إنشاء المتحول .

المتحول كما ذكرت في الدرس السابق شيء يستطيع أن يحوي قيمة متغيرة . يتم تمييز المتحول عن كل الأشياء الأخرى في PHP حيث يسبق اسم المتحول إشارة الدولار . مثال
("$name")
هو متحول قد يحوي اسم آخر يدل على شيء أو أحد أو مكان  .

تعريف المتحول يتضمن إعطاءه قيمة عن طريق عملية الاسناد ("=") و التي تسند قيمة للمتحول .


ماذا سوف تسند لأي متحول يتطلب قليلا من التفكير .
إذا كنت تسند رقما لمتحول , فلا تحتاج لعلامات تنصيص . إذا كنت تسند سلسة محارف إلى متحول , فإن علامات التنصيص مطلوبة . و بالتالي النوعين الأسايين للمتحولات هما :
سلسلة محرفية ("string") و رقم ("number") و PHP  يفهم أي نوع تريد عن طريق وجود أو عدم وجود علامات التنصيص.
مثال :


$name = 'andareena'; //this will assign 'andareena' to the variable $name, note the quotes

$number = 12; //this will assign 12 to the variable $number, note the absence of quotes

$othernumber = '12'; //this will assign '12' to the variable $number, not the presence of quotes,

the variable is now interpreted as a string, not as a number


إذا أردت أن تستخدم علامات تنصيص في السلسة المحرفية يجب عليك استخدام محرف الهروب ("/") كي لا تشوش الـ PHP


$phrase = 'hi my name\'s Mohammed'; //by placing a \ in front of the single quote,
// the variable will now be set properly and you will not receive errors


هنا سوف أشرح الطريقة التي يتبعها PHP من أجل قراءة الكود في الأعلى خطوة خطوة :

-يفسر أولا الجهة اليمنى من عملية الاسناد
-إذا وجد علامة تنصيص مفردة ( ' ) , يعرف أن هذا سلسلة نصية , يستمر حتى يجد علامة تنصيص أخرى
- إذا وجد علامة تنصيص لكنها مهربة أي مسبوقة بـ ( / ) يستمر بالبحث عن علامة تنصيص أخرى
- وجد علامة تنصيص أخرى
-إسناد كل شيء من علامة التنصيص الأولى إلى آخر علامة تنصيص  ('hi my name\'s Mohammed')
للمتحول
$phrase
- وجد فاصلة منقوطة , هذا السطر قد انتهى , الآن نستطيع الذهاب للسطر الثاني ( الفاصلة المنقوطة تخبر PHP للقفز للتعليمة التالية ) .

أتمنى أن تكونوا معي , حاولت إبقاء كل شي بسيط و سهل قدر الإمكان في حال وجود أي استفسار فأنا جاهز .


الشيء التالي الذي سأتحدث عنه هو  توليد المتحولات . كلمة توليد معناها إدخال أو تعريف شيء ضمن عناصر أو أجزاء أخرى
و بالتالي توليد المتحولات معناها استخدام المتحول ضمن متحول آخر . لنوضح الفكرة لنأخذ المثال التالي :


$name='Mohammed';
$age='20';

لاستخدام هذه المتحولات لتعريف متحول جديد ثالث نفعل التالي :




$phrase="$name is $age years old";


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

كأي سلسلة محرفية أخرى . في حين علامات التنصيص المضاعفة تأخذ قيمة أسماء المتحولات  و ليس أسماءها أي تستبدل الأسماء بالقيم التي تقابلها كما بينا في المثال السابق  و نعيد المثال مرة أخرى :



$phrase1 = '$name is $age years old'; //this would literally be assigned to $phrase

$phrase2 = "$name is $age years old"; //this would find the values of $name and $phrase
                                                        //and stick them in



تعليمتي
  print() & echo()
و هما تعليمتي إخراج أي وظيفتهما إخراج المعلومات للمستخدم.
من الأفضل أن أبين عمل كل منهما بدون تقديم كثير من الشرح . و هي مثال سيتضمن كل شيء تعلمناه عن المتحولات بالإضافة إلى شرح تعليمتي (تابعي) الإخراج :


<?

$name = 'John';
$age = '19';
$location = 'Canada';

//print examples
print('Hello'); //outputs "Hello" to the user
print 'Hello'; //the brackets aren't required, also outputs "Hello" to the user
print 'Hello'.' how are you?'; //the "." is the concatination operator, it will join two strings
                               //this will print "Hello how are you?"

//-----------------------------------------------

//echo examples
echo('Hello'); //outputs "Hello" to the user
echo 'Hello'; //the brackets aren't required, also outputs "Hello" to the user
echo 'Hello'.' how are you?'; //the "." is the concatination operator, it will join two strings
                              //this will print "Hello how are you?"
echo 'Hello',' how are you?'; //the "," can also be used with echo() to output a string
                              //this will print "Hello how are you?"

//-----------------------------------------------

//print with variables
print $name . ' is ' . $age . ' and lives in ' . $location;
//will output "John is 19 and lives in Canada"

//-----------------------------------------------

//echo with variables
echo $name . ' is ' . $age . ' and lives in ' . $location;
//will output "John is 19 and lives in Canada"

echo $name , ' is ' , $age , ' and lives in ' . $location;
//will output "John is 19 and lives in Canada"

//-----------------------------------------------

//print and echo with variable interpolation
print "$name is $age and lives in $location";
//will output "John is 19 and lives in Canada"

echo "$name is $age and lives in $location";
//will output "John is 19 and lives in Canada"

?>




من أجل إظهار علامات التنصيص في السلاسل المحرفية يجب استخدام محرف الهروب كما يمكننا استخدام نوعي علامات التنصيص من أجل استخدام النوع الآخر في السلسلة المحرفية مثال :


print "I said \"hi\""; //need to escape the double quotes around "hi"
print 'I said "hi"'; //don't need to escape the double quotes around "hi"
print "I said 'hi'"; //don't need to escape the single quotes around 'hi'
print 'I said \'hi\''; //need to escape the single quotes around 'hi'



هناك فرق في السرعو من ناحية استخدام علامات التنصيص المفردة و المزدوجة كما أن هناك اختلاف بين تعليمتي الخرج echo , print . أولا يحب  أن تعلم أن  استخدام عملية الربط أو الاتصال بين السلاسل المحرفية
(".") مع تعليمة  print  و (",") مع تعليمة echo أسرع بكثير من استخدام  المتحولات جميعها ضمن علامات التنصيص و ترك مهمة التعرف على المتحولات لمفسر PHP .
كما يجب أن تعلم أن استخدام  echo أسرع بقليل من أستخدام print و ذلك لأ ن الأخيرة ترجع متحولا منطيقا على شكل 0 أو 1 يخبرنا بنجاح عملية الطباعة .

لمزيد من المعلومات أرجو قراءة التالي :

http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


كما بينت سابقا , المصفوفة هي شيء يستطيع أن يحمل عدة قيم متغيرة . و يتم التعويض عن مجموعة من المتحولات المتعيرة بمصفوفة تضمها جميعها
مثال :



$person1 = 'Mohammed';
$person2 = 'Somar';
$person3 = 'Ahmad';
$person4 = 'Reem';
$person5 = 'Rana';
$person6 = 'Ziad';



لماذا إنشاء جميع هذه المتحولات ذات النمط الواحد و حفظ الأسماء المختلفة من أجل الاستخدام في حين نستطيع أن نضعها ضمن مصفوفة وحيدة  ؟
المصفوفة يمكن تيئتها باستخدام تابع الـ
array()
مثل المتحول المصفوفة يبدأ اسمها بـعلامة الدولار {كما في اللغة التجميعية} ($) .
لتعريف المصفوفة نضعها بالشكل التالي :




$people =array('Mohammed','Somar','Ahmad','Reem','Rana','Ziad');



لاحظ بدلا من تعريف متحول جديد لكل اسم , أنشأت مصفوفة تسمى
$people
و وضعت جميع الأسماء ضمن هذه المصفوفة . و هذه هي الطريقة التي يتبعها PHP ليفسر التعليمة السابقة :


$people
[0 ] => 'Mohammed';
[1] => 'Somar';
[2] => 'Ahmad';
[3] => 'Reem';
[4] => 'Rana';
[5] => 'Ziad';



الأرقام على اليسار معروفة باسم "مفاتيح" المصفوفة و تسهل عملية الوصول للمعلومات ضمن المصفوفة .
=>
هذه العملية تقوم بربط بين قيم المصفوفة و المفاتيح المقابلة لها  . المصفوفة بالتعريف تبدأ بقيمة المفتاح "0" . إذا كان لديك 200 قيمة ضمن المصفوفة فإن قيمة المفتاح الأول سيبدأ بـ "0" و ينتهي بـ "199" .

إذا كنت مبرمجا لديه بعض المعرفة عن لغة برمجية غرضية التوجه (OOP) مثل Java أو C أو أنك ببساطة لا تحب استخدام تابع الـ
array()
اتعريف المصفوفة فيكنك استخدام هذه الطريقة :




$people[] = 'Mohammed';
$people[] = 'Somar';
$people[] = 'Ahmad';
$people[] = 'Reem';
$people[] = 'Rana';
$people[] = 'Ziad';



و في كل الأحوال فإن أية طريقة ستختارها في تعريف المصفوفة لا يهم المهم اختيار الطريقة التي ترتاح لاستخدامها . إذا قارنت بين الطريقتين فإنك سترى أنهما متشابهتان كثيرا . و سبب وجود هذه الطريقة في التعريف هو أن PHP تستخدمها داخليا ضمن قوالب HTML ( سوف نتعرف على ذلك في درس لاحق ) .

الآن نعرف كيف أن المفاتيح تبدأ من 0 , هذا الأمر مهم جدا . سوف نتكلم الآن عن طريقة استرجاع المعلومات من المصفوفات . مرة أخرى سوف أظهر ذلك من خلال مثال أفضل من حاولة شرح بتفاصيل كثيرة




$people =array('Mohammed','Somar','Ahmad','Reem','Rana','Ziad'); //declare the array
print $people[0]; //prints "Mohammed", the first value in the array
print $people[4]; //prints "Rana"...
print $people[5]; //prints "Ziad"...



بسيطة كفاية؟
رح اشرح بسرعة عن الطباعة
ثم سوف أعيد ما ذكرت بسرعة في درس الطباعة .
لطباعة سطر جديد ( عندما تضفط على زر الإدخال Enter , فإن مؤشر الكتابة ينتقل لسطر جديد و ينشئ محرف مخفي موجود في السطر السابق و اسمه محرف السطر الجديد ) , يجب عليك استخدام
"/n"
في السلاسل المحرفية من أجل القفز للسطر الجديد ضمن السلسلة نفسها . إذا أردت استخدام
"/n"
من أجل قفز للسطر التالي يجب عليك أن تستخدم علامات التنصيص المضاعفة  مثال :




print "Mohammed\nteaches\nPHP"; //remember to use double quotes when using the \n characters


هذا الكود سوف يبطبع التالي :


"Mohammed
teaches
PHP"

لنرجع الآن للمصفوفات ( كان يجب أن أذكر فكرة السطر الجديد في الدرس السابق ).
إذا أردت من مصفوفتك أن تكون أكثر  عمقا يمكنك إسناد مفاتيحك الخاصة لقيم المصفوفة ( هذا سوف ينشئ مصفوفات-مربوطة لأنك ربطت بين المفاتيح و القيم يدويا ) . مثال :




$people = array('person1' => 'Mohammed','person2' => 'Somar','person3' => 'Ahmad','person4' => 'Reem','person5' => 'Rana','person6' => 'Ziad');



هذا الكود سوف ينشئ التالي :


$people
['person1'] => 'Mohammed';
['person2'] => 'Somar';
['person3'] => 'Ahmad';
['person4'] => 'Reem';
['person5'] => 'Rana';
['person6'] => 'Ziad';

تذكر يجب أن تكون المفاتيح متمايزة , حيث أية قيمة ذات مفتاح مماثل لمفتاح آخر يؤدي إلى استبدال القيمة الموجودة سابقا . للوصول للعناصر ضمن المصفوفة ( في المثال التالي كالعادة) :




$people = array('person1' => 'Mohammed','person2' => 'Somar','person3' => 'Ahmad','person4' => 'Reem','person5' => 'Rana','person6' => 'Ziad');
print $people['person1']; //prints "Mohammed"
print $people['person5']; //prints "Rana";
print $people['person6']; //prints "Ziad";



و هذا هو درس اليوم عن تعريف المصفوفات

نعتذر عن الخروج عن الدرس عند ذكر موضوع السطر الجديد

منتظرا ردودكم و أنا جاهز لأي استفسار

I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco



لقد ناقشنا من قبل بعض المعاملات (اثنين فقط ) . الأول  هو و الذي يعتبر أهم معامل و هو معامل الاسناد ("=") . ساعدنا هذا المهامل على إسناد قيم إلى متحولات و المصفوفات ( و التي ذكرت حديثا في الدرس السابق  ) .
المعامل الثاني الذي ناقشناه هو معامل المصفوفات
("=>")
و الذي يسمح لنا الربط بين مفاتيح المصفوفة  و قيم المصفوفة عند تلك المفاتيح .
وهناك أيضا معامل الوصل و الذي يربط بين سلسلتي محارف نصية .
وهنا بعض الأمثلة على ما ذكرت :



$variable = 'name'; //assign "name" to the variable $variable using the assignment operator
echo "$variable\n"; //remember the "newline" character I taught last lesson...





$array = array('first' => 'something','second' => 'something else'); //assign array keys and values
print $array['first'] . "\n"; //print the array value with key "first"; concatenation operator used
/* there is also a lesson to be learned here, you can't print arrays inside double quotes like you would variables.
You either have to assign the specific array element to a variable and print that or use the concatenation method
which we learned in lesson 4 */



انتبه جيدا للتعليقات المذكورة في الأعلى حيث أن بعضها لم يناقش في دروس سابقة .
في هذا الدرس سوف اذكر بعض المعاملات الشائعة التي قد تريدون استخدامها .

المعاملات الرياضية تستخدم للقيام بالعمليات الحسابية البسيطة مثل الجمع , الطرح , القسمة و الضرب . و هي بعض الأمثلة :



$number1 = 12;
$number2 = 3;

$answer = $number1 + $number2;
echo "$answer\n"; //prints 15
$answer = $number1 - $number2;
echo "$answer\n"; //prints 9
$answer = $number1 * $number2;
echo "$answer\n"; //prints 36
$answer = $number1 / $number2;
echo "$answer\n"; //prints 4



بعض المعاملات المفيدة :

معامل مركب يقوم بالوصل و الاسناد بحركة واحدة شيء عجيب ( لكن ليس للمبرمجين )
هذا المعامل يقوم بأخذ السلسلة المحرفية الأصلية و يضيف عليها سلسة جديدة .



$string = 'hello'; //assign our original string
$string .= ' there'; //concatenate a new string onto it using the ".=" operator
echo "$string\n"; //prints "hello there";


معامل مركب آخر يقوم بالجمع و الاسناد ( بحركة واحدة أيضا )
هذا المعامل يأخذ القيمة الأصلية للمتحول و يضيف عليها قيمة جديدة .



$number = 12; //assign our original number
$number += 3; //add a new number to it using the "+=" operator
echo "$number\n"; //prints "15"


هذا كل شيء تقريبا لهذا الدرس , في الحقيقة ليس هنا الكثير لنتعلمه عن المعاملات و سوف تستخدمهم على حسب الحاجة و إذا لم تكن متأكدا أن الذي تريده موجود فببساطة اذهب إلى توثيق PHP .

يمكنك زيارة الصفحة الخاصة بالمعاملات على الرابط التالي :

http://www.php.net/manual/en/language.operators.php


I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco



في هذا الدرس سوف أنناقش تعليمات التحكم .قد تسأل ما هي تعليمة تحكم ؟
لنبدأ بــــ كيف يقرأ PHP الكود الخاص  بك . يقرأ PHP الكود سطريا أي سيبدأ من السطر الأول في برنامجك و ينتقل بعدها للسطر التالي و الذي يحدد هذا الانتقال هو نجاح تنفيذ التعليمة الموجودة في السطر نفسه حيث يعلم ذلك عند رؤية فاصلة منقوطة و التي تخبر PHP أن السطر قد انتهى ( و قد  ذكرنا ذلك سابقا  ) لكن تعليمات التحكم تساعدك على الخروج من هذا التقييد السطري , فهي تخبر PHP أي سطر يجب أن تعالج .
مثال على ذلك تعليمة الــ"GOTO" و التي كانت تستخدم في اللغات القديمة نوعا ما ( إذا كنت مبرمجا فإنك تعرف ذلك على الأغلب ) و هذه التعليمة مثال واضح عن تعليمات التحكم .

التعليمة الأولى التي سأبدأ بها هي تعليمة مألوفة و هي تعليمة "if"

طريقة استخدام التعليمة في المثال التالي :



<?php
if (first expression) {
//if the first expression is true
} elseif (second expression) {
//if the second expression is true
} else {
//if none of the above expressions are true
}
?>



تعليمات التحكم تستخدم في العادة بعض المقارنة من أجل تحديد عملها . و هنا يأتي دور معاملات المقارنة , إذا لم تقرأ حتى الآن عن معاملات المقارنة فلا بأس أن تستهلك بعض الوقت في قراءة توثيق معاملات المقارنة على الرابط التالي :


http://www.php.net/manual/en/language.operators.comparison.php

معاملات المقارنة تقوم بمقارنة قيم ( أو أنماط ) في متحولين أو أكثر و ترجع إما صح "true" أو  خطأ "false" بعض معاملات المقارنة المهمة :



"==" - تقارن فيما إذا كانت القيمتين  متساويتين
"!=" - تقارن فيما إذا كانت القيمتين مختلفتين
">" - تقارن فيما إذا كانت القيمة الأولى أكبر من الثانية
"<" - تقارن فيما إذا كانت القيمة الأولى أصغر من الثانية
">=" - تقارن فيما إذا كانت القيمة الأولى أكبر أو تساوي  من الثانية
"<=" - قارن فيما إذا كانت القيمة الأولى أصغر أو تساوي  من الثانية


<?php
$number1 
12;
$number2 3;
$number3 36;
$number4 50;
$number5 3;

"$number1 == $number2will return false
"$number1 != $number2will return true
"$number1 == $number3will return false
"$number2 == $number5will return true
"$number1 > $number3will return false
"$number3 < $number4will return true
?>





<?php
$name1 
'Mohammed';
$name2 'Samer';
$name3 'Mohammed';

"$name1 == $name2will return false
"$name1 != $name2will return true
"$name1 == $name3will return true
?>



باستخدام المعلومات التي فوق يمكننا استخدام تعليمة"if" بدون مشاكل حيث كتابتها تعتمد كثيرا على الكتابة العادية في اللغة الانكليزية مثال على ذلك :



<?php
$ball 
'red';
if (
$ball == 'red') {
  
$box1 $ball;
} else {
  
$box2 $ball;
}
?>



و هذا مثال بسيط . لكن لنتأكد أننا فهمناه سوف أعيد شرح كل سطر .
في السطر الأول تم اسناد سلسلة محرفية بسيطة إلى متحول , في السطر الثاني و هو المهم إذا قرأته فإنك ستفهم التالي " إذا الكرة حمراء في القيمة " . و هذا السطر سوف يعيد قيمة صح لأننا أسندنا هذه القيمة في السطر الذ ي يسبقه , لذلك سوف يتم تنفيذ الكتلة الأولى بعد التعليمة  الشرطية حيث أن المتحول  $box1 سيأخذ قيمة $ball و الآن إذا لم تكن الكرة حمراء سوف يتم تنفيذ الكتلة التالية و سيأخذ المتحول $box2 قيمة $ball

مثال قريب آخر (لكن الآن بدون شرح مفصل )



<?php
$ball 
'purple'//try changing it to "yellow", "blue", "green", "purple", or any other color
if ($ball == 'red') { //if this expression returns true, run the block
  
$redbox $ball;
} elseif (
$ball == 'yellow') { //if this statement returns true, run the block
  
$yellowbox $ball;
} elseif (
$ball == 'blue') { //ditto
  
$bluebox $ball;
} elseif (
$ball == 'green') { //ditto
  
$greenbox $ball;
} elseif (
$ball == 'purple') { //ditto
  
$purplebox $ball;
} else { 
//run this if none of the following were run
  
$colorlessbox $ball;
}
echo 
"red box: $redbox\n";
echo 
"yellow box: $yellowbox\n";
echo 
"blue box: $bluebox\n";
echo 
"green box: $greenbox\n";
echo 
"purple box: $purplebox\n";
echo 
"colorless box: $colorlessbox\n";
?>



يمكنك أن تستخدم عدد لا محدود من كتل "elseif" ضمن تعليمة "if".
و حتى يمكنك الخلط بينها ( لكنه غير شائع نك لن تحتاجه على الأغلب )
تذكر أن هذا الدرس كان مقدمة أساسية و بسيطة لتعليمة التحكم  "if"


و من المهم أن تتذكر أنك إذا فعلت التالي :



<?php
$red 
'red';
$box $red;
$red 'blue';
?>



فإن قيم المتحولين لن تكون متماثلة كل منهما سيحافظ على قيمة آخر إسناد و لن يتأثر فيما إذا اعتمد أحدهم على متحول آخر و الذي بدوره غير قيمته بعد إسناده للمتحول الآخر
و السبب في ذلك هو أن عملية الاسناد هنا تقوم فقط بنسخ قيمة المتحول و تسندها للمتحول الآخر


مقارنة مهمة !:



<?php
$red 
'red';
$box $red;
$red 'blue';

echo 
$box//will print red
?>



بينما


<?php
$red 
'red';
$box = &$red;
$red 'blue';

echo 
$box//will print blue
?>



في المثال  الثاني  أسندنا للمتحول الثاني  قيمة المؤشر الدال على المتحول الأول و بالتالي أي تغيير في المتحول الأول يؤدي إلى تغيير في المتحول الثاني
و الفرق هو استخدامنا المحرف ("&") قبل اسم المتحول لكن من الأفضل عدم التعامل معها حيث تأتي أهميتها في حال كان لدينا مشاكل مع كثرة المتحولات و الذاكرة لا تستطيع استيعابها كلها و بالتالي نستخدم المؤشرات لتخفيف الأماكن المحجوزة في الذاكرة لكن كما قلت من الأفضل تجنب استخدامها لأنها قد تؤدي إلى أخطاء منطقية صعبة الكشف






I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


النمط الثاني من تعليمات التحكم التذي سوف نناقشه هو حلقة "foreach".
حلقة "foreach" تسمح لك بمسح عناصر المصفوفة .
حلقة "foreach" تملك صيغتين , صيغة من أجل المصفوفات التي تم تعريفها سابقا ( باعطائها قيم  ) و صيغة للمصفوفات المربوطة ( و التي شرحناها في درس المصفوفات )و التي يمكن أنك أعطيتها قيم .
وهي مثال عليهما :



<?php
foreach (array_expression as $value) { do something with $value }
foreach (
array_expression as $key => $value) { do something with $key and $value }
?>



لنأخذ المثال الموجود في الدرس الخامس :



<?php
$people 
=array('Mohammed','Somar','Ahmad','Reem','Rana','Ziad');
?>



كما تلاحظ فإننا عرفنا مصفوفة تسمى $people و التي تحوي أسماء بعض الأشخاص .و يمكن الوصول إلى العناصر عن طريق مفاتيح المصفوفة
$people[0 to 5]
( و الذي ذكرناه في درس المصفوفات ) , لكن إذا لم تعرف مقدار حجم المصفوفة فلن تعرف إلى أي حد ستستمر في استدعاء المصفوفة . يوجد هناك تركيبة برمجية بين حلقة و تابع يخبرك عند انتهاء المصفوفة لكن الآن أفضل استخدام الطريقة البسيطة التي سأستخدمها . في المثال التالي سوف استخدم حلقة "foreach" و المصفوفة التي ذكرتها قبل قليل



<?php
$people 
=array('Mohammed','Somar','Ahmad','Reem','Rana','Ziad');
foreach (
$people as $person) { //note the singular and plural variable names
  
echo "$person\n";
}
?>



حلقة  "foreach" السابقة تخبرنا بالتالي :
" لكل عنصر ( شخص  ) في المصفوفة (الأشخاص ) , اطبع العنصر ( اسم الشخص ) " . و خرج الكود السابق سيكون :


"Mohammed
Somar
Ahmad
Reem
Rana
Ziad"

و هذا تقريبا كل شيء عن حلقة "foreach" , و قد تتسائل لماذا تعتبر حلقة "foreach" تعليمة تحكم و السبب أنها تقوم بتنفيذ كتلة من الكود عدد من المرات يساوي عدد عناصر المصفوفة , سوف تنفذ كتلة الكود ثم تعود للخلف و تنفذ كتلة الكود مرة أخرى حتى انتهاء العناصر .

أتمنى أن تكون هذه الدروس واضحة و غير معقدة .


I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco



في الدرس السابق ناقشنا حلقة "foreach" و التي في رأيي هي أبسط أنواع الحلقات .كثير من الناس يعتبرون حلقة "while" هي  من أسهل أنواع الحلقات في الاستخدام . حيث الفرق الأسايسي بين حلقة "while" و حلقة "foreach" هو أن حلقة "foreach" تستخدم مع المصفوفات حصرا بينما تستخدم حلقة "while" في حالات مختلفة .

حلقة "while" تعمل على مبدأ بسيط جدا  : كلما كان الشرط صحيحا استمر في  تنفيذ كتلة "while" . و بسبب اعتمادنا على مبدأ صح , خطأ فيجب الاعتماد على معاملات المقارنة ( المناقشة في الدرس السابع ) و للتذكرة تقوم معاملات المقارنة بمقارنة قيم ( أو أنماط ) متحولين ( أو أكثر ) و ترجع إما صح"true"  أو خطأ "false" .

لنبدأ بصيغة حلقة "while" :



<?php

while ( expression is true ) { do something }
?>



أبسط طريقة لتوضيح آلية عمل حلقة "while" هو بمثال مأخوذ من توثيق PHP:



<?php
$i 
1;
while (
$i <= 5) {
  print 
"$i\n";
  
$i += 1;
}
?>



يعتبر هذا المثال أفضل مثال برمجي لحلقة "while" لأنها تبين  لك  سبب أهمية وجود هذه الحلقة .
في المثال السابق نعرف أولا المتحول $i و نعطيه قيمة بدائية و هي "1" . و الأسطر التالية تخبرنا بالتالي :طالما أن قيمة المتحول $i أصغر أو تساوي "5" اطبع قيمة المتحول و بعدها أضف "1" إلى قيمة المتحول نفسه .

وهنا  طريقة عمل PHP ( اعذرونا على الشرح المفصل لكنه مهم ) :
-أسند القيمة "1" إلى المتحول $i
-بداية الحلقة , $i أصغر أو تساوي 5 (صح ) , نفذ كل شيء ضمن الكتلة
-اطبع $i
-أضف "1" للمتحول $i
($i الآن تساوي 2)
استمر بالدوران  $i أصغر أو تساوي 5 (صح ) , نفذ كل شيء ضمن الكتلة
-اطبع $i
-أضف "1" للمتحول $i
($i الآن تساوي 3)
استمر بالدوران  $i أصغر أو تساوي 5 (صح ) , نفذ كل شيء ضمن الكتلة
-اطبع $i
-أضف "1" للمتحول $i
($i الآن تساوي 4)
استمر بالدوران  $i أصغر أو تساوي 5 (صح ) , نفذ كل شيء ضمن الكتلة
-اطبع $i
-أضف "1" للمتحول $i
($i الآن تساوي 5)
استمر بالدوران  $i أصغر أو تساوي 5 (صح ) , نفذ كل شيء ضمن الكتلة
-اطبع $i
-أضف "1" للمتحول $i
($i الآن تساوي 6)
-توقف عن الدوران ,$i أكبر من 5 لا تقم بتنفيذ أي شيء ضمن الكتلة

و هنا الخرج


"1
2
3
4
5"

يجب عليك أن تكون حذرا مع حلقات "while" لأنك قد تدخل في حلقة لا نهائية في برنامجك ( من خلال كتابة تعبير (شرط ) محقق دوما . PHP مهيئة بشكل افتراضي أن تتوقف عن الدوران في الحلقات التي تستمتر 30 ثانية
و هي مثال عن خطأ بسيط قد يؤدي  إلى حلقة لا نهائية



<?php
$i 
1;
while (
$i >= 1) {
  print 
"$i\n";
  
$i += 1;
}
?>



وسوف يقوم الكود بطباعة أرقام بدءا من الواحد حتى الرقم الذي سيقرر PHP التوقف عنده بالقوة ( عند تجاوز عتبة 30 ثانية )

كتلخيص لمفهوم حلقة "while" : حلقة "while" ستسمح لك بتنفيذ كتلة معينة من الكود طالما أن هناك تعبير (ِشرط) محقق



I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco





هناك عدة طرق لاستخدام مدخلات المستخدم في برامج الـ PHP . والطريقة الأكثر استخداما لذلك هي عن طريق قوائم HTML . لنأخذ مثال بسيط عنها حيث سنستخدم كود قوائم HTML و التي توجه مدخلات المستخدم إلى كود PHP .



<html>

<head>

<title></title>

</head>
<body>

<form action="http://www.website.com/script.php" method="post">
Form 1: <input type="text" name="form1"><BR>
Form 2: <input type="text" name="form2"><BR>

<input type="submit" value="submit">
</form>

</body>
</html>


نلاحظ في المثال السابق أن الطريقة المستخدمة هي POST و هناك أيضا GET
و تقوم الطريقة GET على إرسال المعلومات إلى الصفحة الهدف مع ذكر تلك المعلومات في عنوان URL الذي يظهر في الأعلى . في حين الطريقة POST فتقوم بإرسال المعلومات بدون أن تظعر في عنوان URL و بشكل عام تقتضي القاعدة على استخدام GET ي حال الاستعلام عن معلومات في حين ينبغي استخدام POST في حال إرسال المعلومات .

لنقل أننا ملأنا المعلومات في الخانات الموجودة في الكود السابق  بالمعلومات التالية في الخانة الأولى "form1" لنكتب "Hi" و في الخانة الثانية"form2"التالي "Bye" عند الضغط على زر الإرسال أو التأكيد فإن القالب السابق باستخدام الطريقة POST سوف يرسل المعلومات  إلى الصفحة التالية
"http://www.website.com/script.php"
و هذا العنوان يظهر في عنوان URL لكن إذا كانت الطريقة المستخدمة هي GET فإن تلك المعلومات سوف تظهر في عنوان الـURL كالتالي :
www.website.com/script.php?form1=Hi&form2=Bye"كل شيء بعد علامة الاستفهام ("؟") معرف كسلسلة محرفية و السلسة تحوي مدخلات المستخدم المرسلة عن طريق القوائم باستخدام طريقة GET ( أو ببساطة بشكل يدوي عن طريق استدعاء عنوان يحوي تلك السلسلة )
كل مدخلة تستقل عن الأخرى بـ إشارة ("&") أو فاصلة منقوطة (";")
و اسم المدخل و قيمته مفصولان بإشارة مساواة ("=") .

لمزيد من المعلومات اقرأ عن ذلك على الرابط التالي :

http://www.w3.org/TR/REC-html40/interact/forms.html#form-data-set).


قد تتسائلون لماذ هذا الأمر مهم . أولا  خابية الـ URL . طريقة GET تخزن ضمن الخابية تبع المتصفح في حين طريقة POST فلا .
و وفقا لـــ http://support.microsoft.com/default.aspx?scid=kb;EN-US;q208427
فإن "GET" تملك عدد محدود من المدخلات لأنها تستخدم عنوان URL و الذي أقصى حد لطوله هو (2048 محرف ) بينما طريقة POST فلا تملك أية حدود عند إرسال المعلومات  عن طريقها .
لكي لا استخدم كود HTML كثيرا سوف اعتمد على  طريقة GET بحيث أبين لكم أمثلة على استخدامها دون استخدام أكود HTML .

كمثال يمكننا مباشرة أن نكتب العنوان التالي :

"http://www.website.com/script.php?forms1=Hi&forms2=Bye&forms3=something"

و الانتقال مباشرة إلى الملف الهدف و ليكن مثلا  "script.php" دون الحاجة لذكر قوائم HTML و أسماء المدخلات .

في الدروس القادمة سوف أتعمق أكثر في هذه الأمور .






I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco



درس اليوم طويل شوي بس لا بأس

لنبدأ بمثال من الدرس السابق :




<html>

<head>

<title></title>

</head>
<body>

<form action="http://www.website.com/script.php" method="post">
Form 1: <input type="text" name="form1"><BR>
Form 2: <input type="text" name="form2"><BR>

<input type="submit" value="submit">
</form>

</body>
</html>



نفرض أنني أرسلت المعلومات من خلال القوائم السابقة باستخدام طريقة POST و ملأت
"form1" بـ "hi" و "form2" بـ "bye" .
سأريكم كيف يتم ذلك من خلال طريقة GET :
http://www.website.com/script.php?forms1=hi&forms2=bye

تذكر أن الفروق بين "post" & "get" هي :
-"post" لا تخزن المعلومات في خابية المتصفح في حين  "get" تقوم بذلك
-طريقة "get"  محدودة من حيث كمية المعلومات المرسلة في حين  طريقة "post" فلا

و الآن ما هي الطريقة للوصول للمعلومات المرسلة عن طريق قوائم HTML إلى الملف (script.php)؟ الصراحة هناك عدة طرق لفعل ذلك . و هذا الأمر يعود لك في اختاير الطريقة التي تريد  ( و التي ترتاح لها ) يتم تكون مجموعة من المتحولات أليا من أجلك  .

الطريقة الأولى للولوج للمعلومات هي  طريقة "superglobals" و التي تقدمها PHP .
"superglobals" و هي متحولات يمكن الولوج لها من  أي موقع البرنامج بغض النظر عن  السكوب scope ( سوف ندرسه لاحقا في درس التوابع ).
"superglobals" هي 9 مصفوفات تتضمن جميع المعلومات التي أدخلتها على البرنامج :



$_SERVER تتضمن معلومات مدخلة من قبل السيرفر

$_GET تتضمن معلومات مدخلة باستخدام طريقة "get" المرسلة للبرنامج

$_POSTتتضمن معلومات مدخلة باستخدام طريقة "post" المرسلة للبرنامج

$_COOKIE هذه المصفوفة تتضمن معلومات خابية المتصفح الموجودة على جهازك

$_FILES عند تحميل ملف في PHP فإن معلومات الملف تخزن في هذه المصفوفة

$_ENV تتضمن متحولات البيئة المتوفرة

$_REQUEST يتضمن خليط من كل  مدخلات المستخدم إلى برنامجك

$_SESSION شبيه بالخابية و تتضمن معلمات قد تحتاجها أنت


سوف أركز الأمثلة على طريقتي "post" & "get" لأنهما الأسهل للمتابعة . هناك مقابلات للمصفوفات السابقة في النسخ الأقدم من PHP و التي لا تعتبر "superglobals" و هي موجودة فقط في سكوب العام فقط ( مرة أخرى سنتحدث عن ذلك في درس التوابع ) و هنا قائمة بتلك المصفوفات و مقابلاتها في النسخ القديمة
تذكر أن هذه المصفوفات هي مصفوفات مربوطة ( شرحت سابقا )


$_SERVER - $HTTP_SERVER_VARS
$_GET - $HTTP_GET_VARS
$_POST - $HTTP_POST_VARS
$_COOKIE - $HTTP_COOKIE_VARS
$_FILES - $HTTP_POST_FILES
$_ENV - $HTTP_ENV_VARS
$_REQUEST - new, didn't exist before
$_SESSION - $HTTP_SESSION_VARS
هلى ستكون مشوشا , و ذلك لأني لم أذكر طريقة التعامل مع تلك المصفوفات لنأخذ
طريقة "get" كمثال :

http://www.website.com/script.php?forms1=hi&forms2=bye

كيف أستطيع الوصول  إلى "form1" & "form2" المرسلة من خلال خانات الإدخال :



<?php
echo $_GET['form1'] . "\n"//prints "hi"
echo $_GET['form2'] . "\n"//prints "bye"
?>




لقد أرسلنا المعلومات عن باستخدام طريقة "get", لذلك المعلومات سوف يتم حفظها في المصفوفة
$_GET
إذا استخدمنا طريقة "post" فإن المعلومات سوف تخزن في المصفوفة
$_POST

المعلومات المرسلة نجدها في المصفوفة
$_REQUEST
لكن ينصح عدم استخدام هذه المصفوفة إلا في حالة عدم معرفة الطريقة المستخدمة في الإرسال (لأسباب أمنية غير مهمة حاليا بالنسبة لك).

لنجرب مثال بسيط آخر
http://www.website.com/script.php?name1=Somar&name2=Ahmad
(تذكر أنك تستطيع أن ترسل هذه المعلومات إما بطريقة الكتابة مباشرة في عنوان URL أو عن طريق الإرسال من خلال قوائم (قوالب)الإرسال تبع HTML ذات الأسماء name1 & name2 باستخدام طريقة "get" .




<?php
echo $_GET['name1'] . ' and ' $_GET['name2'] . ' are too cool';
//will print "Somar and Ahmad are too cool"
?>



مرة أخرى إذا أرسلت المعلومات بطريقة "post" فإنني ببساطة أستبدل $_GET بـ $_POST .
مثلما قلت  من قبل هناك عدة طرق للوصول للمعلومات المرسلة للبرنامج. "superglobals" هي الشيء الذي يجب أن تستخدمهه دائما و أسماء المصفوفات القديمة البادئة بـ
$HTTP_*
يجب عدم استخدامها  و هناك أيضا المتحولات العامة (global) التي سأشرحها الآن :

أولا لكي تكون قادرا على استخدام المتحولات العامة يجب عليك تفعيلها من خلال جعل الخيار التالي مفعلا
"register_globals" eyt]/right]
و ذلك في الملف "php.ini" الموجود في مجلد PHP
ماذا تقدم هده المتحولات هو استخدام نسخة مؤقتة من المتحولات الحاوية على قيم المدخلات .
أي  عند إرسال المعلومات عن طريق "post" أو "get" بمدخل ذو اسم "form1" فإنني أستطيع استخدام المتحول
$form1
و الذي سيكون بدوره حاويا على قيمة المدخل المرسلة و مثال آخر ذلك إذا أردت أن أرسل مدخل ذو اسم  "something" فإنني في البرنامج الذي يستقبل القيمة يمكن أن استخدم المتحول
$something
للحصول على تلك القيمة


مع هذه المتحولات هناك سؤال دوما يطرح نفسه : ماذا لو كان هناك عدة مصادر و تحوي كل منها نفس اسم المتحول كيف يميز بينها ؟
مثلا في حال وجود cookie على حاسب المستخدم ذو اسم "variable" و session ضو اسم "variable" و هناك معلومات مرسلة عن طريق مدخل مستخدم طريقة "post" ذو اسم "variable" أيضا .
فعند استخدام المصفوفات التالية

$_COOKIE['variable'], $_SESSION[variable'], and $_POST['variable']
فإنه لا توجد مشكلة حيث أن كل مصفوفة مختصة بالمصدر المرسل لكن  ماذا عن  المصفوفة
$_REQUEST
و التي تعتبر superglobal أو المتحولات العامة التي ذكرت قبل قليل ( و التي تفعيلها من register_globals )؟

في حال استقبال من مصادر متعددة فإن PHP تسمح لك بتحديد تفضيلات على من هو الأهم .
و ذلك في الملف php.ini هناك متحول يسمى "variables_order" تحت عنوان "data handling"
بشكل افتراضي هذا هو شكلها :




; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC).  Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"


ملاحظة :
EGPCS = Environment , GET, POST, COOKIE, SERVER

و الشرح المذكور كاف . و هذا يعني أن مع
$_COOKIE['variable'], $_SESSION['variable'], و  $_POST['variable']ستحوي القيم التي أرسلت بدون مشاكل في حين المتحول
$variable
سيحوي قيمة متحول cookie

إذا في أي سؤال فأنا جاهز دوما

I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Croco


لقد شرحت ما هو التابع في الدرس الثالث ؛
الآن سوف أشرح طريقة عمل التابع من وجهة نظر الـPHP . إنك تستخدم التابع كلما كان لديك كود يكرر نفسه في عدة أمكنة من برنامجك . كلما رأيت نفسك تكرر كمية لا بأس بها من الكود , فإنك تستطيع أن تحولها إلى تابع موفرا على نفسك الزمن الازم لإعادة كتابة الكود و المساحة المستخدمة في كتابته.

PHP ميني على العديد من التوابع . كمثال يسمح لك التابع التالي لتحويل الأحرف الانكليزية إلى حالتها الكبيرة
:


<?php
$string 
'this is a phrase';
$string strtoupper($string);
echo 
$string//prints "THIS IS A PHRASE";
?>



إن


strtoupper()
تابع . و عمله هو تحويل كل محرف من محارف اللغة الانكليزية إلى حالة المحارف الكبيرة.هذا التابع يوفر عليك المساحة المستخدمة لكتابة هذا التابع .
يمكنك أن تجد في توثيق PHP عن التابع


strtoupper()
ذي العنوان :
http://ca3.php.net/manual/en/function.strtoupper.php
التالي :
- السطر الأول يعطينا اسم التابع
- "strtoupper"
- السطر الثاني ما هي نسخة الـ PHP التي تدعم هذا التابع  - "(PHP 3, PHP 4)"
- السطر الثالث يعطي تعريف بسيط جدا عن عمل التابع - "strtoupper -- Make a string uppercase"
- السطر الرابع ( و كل شيء بعد ذلك ) يشرح طريقة عمل التاليع و يعطي تعريفات -


"string strtoupper (string string)".

لنأخذ نظرة عن طريقة عمل التابع :


string strtoupper (string string)

يخبرك أنه عندما تستخدم تابع "strtoupper" و إمرار سلسة محرفية كدخل للتابع , فإنها سوف ترجع سلسلة محرفية جديدة , بمعنى آخر :


"string = strtoupper(string)".
تستطيع أن تقرأ توثيق PHP للحصول على أمثلة عن هذا التابع .

المعلومات التي تمررها للتابع تدعى "arguments" أو "البراهين" في حين المعلومات التي تؤخذ منه تدعى "parameters" أو "معاملات"
كما تستخدم أحيانا هذه الكلمات بشكل متعاكس .
عندما تعرف تابعا فإنك تعرف معاملاته , لكن عند استخدامك لذلك التابع فإنك تعطي لتلك المعاملات قيم فعلية .

تابع شائع آخر هو تابع


sort()
يقوم هذا التابع بترتيب عناصر مصفوفة . لنلقي تظرة على توثيق PHP لهذا التابع :
http://ca3.php.net/manual/en/function.sort.php


void sort ( array array [, int sort_flags])

هذا التابع لا يعيد أية قيمة ( فويد ) لذلك لا تستطيع استخدام عملية الاسناد مع هذا التابع . بمعنى آخر :
يأخذ تابع


"sort(array,int)"
مصفوفة كمدخل أول ( و هو أساسي ) في حين يأخذ كمدخل ثاني عدد صحيح ( و هو اختياري ) - و إذا رجعت لشكل التابع الأول فإن الأقواس المتوسطة "[]" تعني أن المدخل الذي بينها اختياري -
عند قرائتنا لتوثيق PHP فإننا سوف نلاحظ أن المدخل الأول و هو المصفوفة المراد ترتيب عناصرها و المدخل الثاني الاختياري يعيطينا المجال لاختيار طريقة الترتيب اعتمادا على نمط المعلومات التي توجد ضمن المصفوفة .
لنلقي نظرة على مثال برمجي :


<?php
$array 
= array('b','a','q','z','y','a','c'); //let's define an array we want to sort
sort($array); //let's feed the array (via an argument) to the sort() function, and leave the optional argument blank
foreach ($array as $element) { echo "$element\n"; } //let's print out the array
?>



و هذا سوف يطبع


"a
a
b
c
q
y
z"

اقرؤوا توثيق PHP و ابحثوا عن توابع قد تثير انتباهكم . التوابع مسماة بأسماء تدل على عملها ( ليس تماما لكنها قريبة بشكل كافي )
يمكنك أن تجد التوابع ( منظمة حسب النوع ) على الرابط التالي :
http://www.php.net/manual/en/funcref.php
كما يمكنك أن تجد قائمة كاملة باسماء التوابع على الرابط التالي :
http://www.php.net/quickref.php
يلخص كل شيء في الأعلى بالتالي :
تقدم للتابع معلومات ثم يقوم التابع بمجموعة من العمليات للمدخلات المقدمة ثم في النهاية يرجع معلومات جديدة .

I am back. I will try to catch up with some stuff soon.
Regards,
Croco

My sites
Andareena.com
Andareen.net(Under Constraction :P)

New plans coming soon


Good links for you to visit:
Docs
Search

Advertisement: