المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : موسوعة دروس للغة الـــ php



walid_8281500
03-19-2009, 08:38 PM
السلام عليمك ورحمة الله وبركاته

اخواني ان حاب اتعلم هذي اللغه وشده حبي لتعلمي لها جمعت موسوعه وراح اطرحها لتعم الفائدة للجميع ان شاء الله رب العالمين

ويارب انها تحوز على رضاكم اخواني

بسم الله نبدأ : -

::::دروس مبتدئين::::

درس: -

تركيب Apache و PHP و MySQL على Linux



الجزء الاول : Apache
1.1 ما هو الـ Apache ؟

هو برنامج خادم الويب الأكثر شعبيه في العالم طبقاً لدراسة NetCraft *** Server Survey ويمكنك الأطلاع عليها على العنوان التالي :
http://www.netcraft.com/survey/

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

1.2 لماذا نحتاج إلى Apache ؟

في الأساس يستعمل الـ Apache من قبل شركات الأستضافه لتقديم خدمة إستضافة مواقع الويب .

أيضاً عندما يتعلق الامر بتطوير صفحات الويب المتقدمه مع جانب الخادم والذي يكتب بواسطة PHP مثلاً , أنت سوف تحتاج الى خادم ويب على جهازك الشخصي لكي تقوم بتطوير صفحات موقعك أو مشروعك , بدون الخام أنت لا تستطيع تنفيذ كود الـ PHP , من ناحيه أخر أنت يمكن أن تكتب تطبيقاتك وتقوم بتنفذها من خلال خادم الشركه المستضيف مواقع ويبك لديهم بأستعمال Telnet أو SSH على أي حال هذه الطريقه غير عمليه لسببين :

1 - هو الوقت المستغرق في نقل الملفات والبطئ الناتج من خلال مقدم خدمة الانترنت لديك أو بطى الخادم للمستضيف بالاضافه الى التكلفه الماديه من خلال إتصالك بالانترنت .

2 - هو أسهل كثيراً من خلال وجود نسخه مماثله لموقعك في جهازك . وتستعملها كخادم إنتاج لمشاريعك , وتقوم بنسخها الى موقعك من خلال الـ FTP بعد التأكد من أن الموقع يعمل بشكل صحيح في جهازك .

1.3 حسناً .. أنا مقتنع بما تقول لكن ! كيف أحصل عليه ؟

طبعاً بما أن الـ Apache يمكن تركيبه على أي نظام مثل Windows أو Linux فسوف يكون هذا الدرس مقتصر على نظام Linux لاننا قمنا سابقاً بشرح تركيبه كامل على نظام Windows وتجد الدرس على شكل ملف في المنتدى .

يمكن الحصول عليه من خلال هذا العنوان :
http://www.mysql.com/Downloads/

قم بتحميل أخر نسخه يفضل ذالك .

من خلال الرابط أعلاه يمكنك تحميل النسخ binaries (already compiled, executable versions) أي قابله لتنفيذ بشكل مختصر , يمكنك تحميل هذه النسخه apache_1.3.xx.tar.gz هي ليست الاحدث ولكن الجديد هو الاصدار رقم 2 , لا تقلق فطريقة التركيب واحده لا يوجد أختلاف , بمناسبه xx هو يدل على أخر أصدار منه وهو الافضل لك في تحميله , الان سوف أوضح لكم عملية التركيب خطوه خطوه .

1.4 كيف يمكن تركيبه ؟

أولاً يمكن الحصول عليه من خلال وضع هذا في المتصفح
Code ..

wget http://httpd.apache.org/dist/apache_1.3.xx.tar.gz





طبعاً xx أخر أطلاق تم أصداره , أو من خلال تحميله من الموقع مباشره بذهاب الى الموقع .

الأن بعد الحصول على الملف يجب علينا فك ضغطه طبعاً سوف نستخدم هذه الامر , لكن قبل هذا يفضل نقل هذا الملف الى المسار التالي : (/usr/local ) .

Code ..

gunzip -c apache_1.3.xx.tar.gz | tar -xvf -





طبعاً هذا الامر سوف يقوم بأنشاء دليل بهذا الاسم apache_1.3.xx توجد به الملفات يمكنك تغيير أسمه أذا أحببت الى apache في هذا الدرس سوف نقوم بتغيير أسمه الى apache , الان سوف ننتقل الى هذا الدليل من خلال هذا الامر طبعاً الذين يتعاملون مع نظام Linux معروف لديهم هذا الامر البسيط وهو للانتقال الى داخل الدليل الخاص بالـ apache

Code ..

cd apache





بعد الانتقال داخل الدليل قم بتنفيذ هذا الامر وهو الخاص بأعداد apache

Code ..

./configure --enable-module=most --enable-shared=max





هذا الجزء
Code ..

--enable-module=most




هو أختياري سوف يقوم بتركيب كل الوحدات الديناميكيه بإستثناء الوحدات الصعبه .

وهذا الجزء
Code ..

--enable-shared=max




لتحميل الوحدات الى الذاكره فقط عندما يحتاج

الان سوف نقوم بتجميع الـ apache من خلال تنفيذ هذا الامر
Code ..

make





لان بعد التجميع سوف نقوم بتنصيبه من خلال هذا الامر
Code ..

make install





الان نستطيع أن نقول لك مبروك على تركيب الـ Apache على نظام Linux

1.5 كيف نقوم بتشغيل Apache ؟

الان لتشغيل الخادم كل ما عليك هو أن تقوم بتنفيذ هذا الامر وهو لتشغيل الـ Apache

Code ..

./bin/apachectl start





ملاحظه : لتنفيذ الامر السابق يجب أن تكون داخل الدليل التالي apache أذا لم تكن داخل هذا الدليل لديك أختيارين أما أن تكتب المسار كامل

Code ..

/usr/local/apache/bin/apachectl start





او الانتقال الى الديل من خلال الامر التالي

Code ..

cd /usr/local/apache





الان بعد تشغيل الخادم سوف نفتح المتصفح ونكتب التالي :
Code ..

localhost أو 127.0.0.1





1.6 كيف نقوم بإعداد Apache ؟

أن ملف الاعداد لـ Apache يسمى httpd.conf ويمكن الوصول إليه من خلال المسار التالي
Code ..

/usr/local/apache/conf





في نظام Linux يوجد أكثر من محرر سهل الاستخدام من أشهرها هو VI طبعاً لن أقوم بشرحه لان أغلب مستخدمين Liunx يعرفون طريقة إستخدامه

الان بعد فتح هذا الملف أبحث عن هذا ServerName وقم بإزالة هذه العلامه من أمامها (#) أذا كان لديك أسم خادم خاص بك أنت يمكن أن تضعه لنفرض أن قريتنا الحبيبه لديها خادم خاص بها نكتب الاتي :
Code ..

ServerName www.phpvillage.com (http://www.phpvillage.com/)





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

Code ..

ServerName localhost





أيضاً قم بالبحث عن هذا ********Root سوف تجده بعد ServerName مباشرتاً , هذا الجزء يجب أن يشير الى الدليل الذي سوف تضع به ملفات HTML لإستخدامها هذا الدليل سوف يكون الدليل الرئيسي لخادم ويبك . وهذا مثال

Code ..

********Root "/home/phpvillage/my_***_site"





ملاحظه مهمه : الشرطه يجب أن تكون أماميه مثل هذا ( / )

مثال : لو وضعنا ملف html في هذا المسار /home/phpvillage/my_***_site أسمه example.html سوف نقوم بتصفحه كتالي localhost/example.html

لان بعد عمل التعديلات الازمه مهم جداً جداً أن تقوم بإعادة تشغيل Apache مرى أخر من خلال هذا الامر

Code ..

./bin/apachectl restart





1.7 مصادر Apache على الإنترنت ؟

Apache *** Server ********ation
http://httpd.apache.org/docs/

Apache Today
http://apachetoday.com (http://apachetoday.com/)

Apache Week
http://www.apacheweek.com (http://www.apacheweek.com/)


الجزء الثاني : PHP

2.1 ما هي الـ PHP ؟
هي لغة برمجه للويب قويه جداً .. وقد قمنا بكتابة تفصيل عنها في دروس سابقه وأيضاً في المنتدى يمكن الاطلاع عليه لتعرف الكثير عن هذه الغه .

2.2 كيف يمكن الحصول عليها ؟

يمكنك الحصول على ملف PHP من خلال هذا الرابط
http://www.php.net/downloads.php

لاحظ أن هناك أكثر من نسخه للـ PHP يجب أن تختار النسخه التي تخص نظام التشغيل Liunx

كيف يمكن تركيبه ؟

أولاً تأكد أن الـ Apache منصب على جهازك , لان الـ PHP تحتاج الى Apache لتشغيلها .

يمكنك الحصول على الـ PHP بوضع هذا السطر في المتصفح
Code ..

wget http://www.php.net/do_download.php?d...p-4.x.x.tar.gz (http://www.php.net/do_download.php?download_file=php-4.x.x.tar.gz)





أو من خلال الموقع مباشرتاً

الان بعد الحصول على ملف الـ PHP يجب عليك فك الضغط عنه لكن قبل هذا ضع الملف في هذا المسار /usr/local ثم أكتب هذا الامر :
Code ..

gunzip -c php-4.x.x.tar.gz | tar -xvf -





بعد فك الضغط سوف يتم إنشاء مجلد بهذا الاسم php-4.x.x سوف نقوم بتغيير أسمه الى php وهو الافضل في نظري

الان سوف نقوم بإعداد الـ PHP من خلال هذا الامر
Code ..

./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs





سوف أوضح بعض السطور في هذا الامر

Code ..

--with-mysql




هذا الخيار سوف يقوم بتنشيط دعم الـ MySQL الداخلي

Code ..

--with-apxs




يحتاج PHP لمعرفة موقع أداة إمتداد apxs لكي ينصب نفسه كوحدة Apache ونحن سوف نخبره بالمسار /usr/local/apache/bin/apxs

لكن أذا غيرت مسار تركيب الـ Apache تحتاج الى تغيير المسار . أذا قم شخص بهذا العمل ممكن يضع أستفسار لنرد عليه .

الان لتجميع PHP نقوم بكتابة هذا الامر
Code ..

make





ثم نكتب هذا الامر لتنصيبه
Code ..

make install





مبروك لقد تم التركيب بنجاح الان .

على أي حال بقي شي واحد يجب أن تعمله وهو أن تقوم بنسخ هذا الملف php.ini-dist وتضعه في هذا المسار /usr/local/lib وتقوم بتغيير أسمه الى php.ini هذا سوف يكون ملف إعداد الـ PHP

والامر الذي يقوم بعملية النسخ هو التالي
Code ..

cp php.ini-dist /usr/local/lib/php.ini





2.4 كيف أقوم بإعداد الـ PHP ؟

في نظام Linux كل ما عليك هو أن تقوم بإعادة تشغيل Apache كما فعلنا سابقاً كتالي :
Code ..

/usr/local/apache/bin/apachectl restart





الان قم بإنشاء ملف وضع به هذا الكود وقم بتسمية phpinfo.php
Code ..

<?php phpinfo() ?>




الان قم بحفظ هذا الملف في المجلد الرئيسي لموقعك كما عرفنا سابقاً وقم بتشغيله من المتصفح كتالي
Code ..

localhost/phpinfo.php





2.5 كيف أقوم برفع أداء الـ PHP ؟

أولاً أنت تحتاج الى تحميل Optimizer من خلال موقع zend وبعد الحصول على هذا الملف نقوم بفك الضغط عنه من خلال الامر التالي :
Code ..

gunzip -c ZendOptimizer-1\[1\].0.0-PHP_4.0.4-Linux_glibc21-i386.tar.gz | tar -xvf -





أنا أعرف أن الاسم طويل لكن لا تقلق ممكن تجرب أن تغير أسمه فأنا قمت بفك الضغط بدون تغيير الاسم أي كما هو لذالك لا أحب أن أشوش أفكاركم

الان إنتقل الى داخل هذا الدليل من خلال الامر التالي :
Code ..

cd ZendOptimizer-1.0.0-PHP_4.0.4-Linux_glibc21-i386





الان قم بإنشاء مجلد جديد في هذا المسار /usr/local/lib وقم بكتابة هذا الامر الخاص بإنشاء مجلد جديد

Code ..

mkdir /usr/local/lib/ZendOptimizer





الان قم بنسخ هذا الملف ZendOptimer.so وقم بوضعه في المجلد الجديد الذي قمت بإنشأه قبل قليل من خلال الامر التالي :

Code ..

cp ZendOptimizer.so /usr/local/lib/ZendOptimizer





الان قم بأضافة السطرين التاليين الى ملف الـ php.ini

Code ..

zend.optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer/ZendOptimizer.so"





مصادر الـ PHP على الإنترنت ؟

PHP ********ation
http://www.php.net/docs.php

PHPBuilder.com
http://www.phpbuilder.com (http://www.phpbuilder.com/)

About Perl/PHP
http://perl.about.com (http://perl.about.com/)

Zend
http://www.zend.com (http://www.zend.com/)

DevShed - PHP
http://www.devshed.com/Server_Side/PHP/



الجزء الثالث : MySQL

3.1 ماهو الـ MySQL ؟

هو خادم قواعد البيانات SQL متعدد المستعملين و متعدد المواضيع وهو سريع جداً

3.2 كيف يمكن الحصول عليه ؟

يمكن زيارت هذا الموقع وتحميل النسخه مجاناً
http://www.mysql.com/Downloads/
قم بتحميل النسخه binaries فهي قابله لتجميع والتنفيذ وتركيبها أسرع كما في نسخة php عندما قمنا بتحميلها وتركيبها . أنت يمكن أن تحميل هذه النسخه mysql-3.23.xx.tar.gz و xx يدل على أخر أصدار

3.3 كيف يمكن تركيبه ؟

يمكن الحصول عليه من خلال المستعرض كما قلنا سابقاً
Code ..

wget http://www.mysql.com/Downloads/MySQL...3.23.xx.tar.gz (http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.xx.tar.gz)





او من الموقع مباشرتاً

الان بعد الحصول عليه نقوم بفك الضغط من خلال الامر التالي :
Code ..

gunzip -c mysql-3.23.xx.tar.gz | tar -xvf -





الان سوف يت أنشاء مجلد بهذا الاسم mysql-3.23.xx سوف نقوم بتغيير أسمه الى mysql , الان ننتقل الى داخل هذا المجلد من خلال الامر التالي :
Code ..

cd mysql





الان نقوم بإنشاء مجموعه جديدهبأسم mysql من خلال الامر التالي :
Code ..

groupadd mysql





الان نقوم بإنشاء أسم مستخدم mysql للمجموعة mysql من خلال الامر التالي :

Code ..

useradd -g mysql mysql





الان قم بتنفيذ هذا الامر

Code ..

./configure --prefix=/usr/local/mysql --with-low-memory





سوف أوضح بعض السطور
Code ..

--prefix=/usr/local/mysql





هذا يحدد منطقة التي سوف يركب بها

Code ..

--with-low-memory





هذا يحافظ على عدم فقدان البيانات فعند عدم أستخدامها مهما كانت الذاكر كبيره لديك من المتوقع سوف يستخدمها وهذا ما أعنيه أذا لم تستخدمه

الان نقوم بتحميعه من خلال الامر
Code ..

make





الان نقوم بتركيبه من خلال الامر التالي :
Code ..

make install





ثم أستخدم هذا الامر لتركيب الجداول
Code ..

******s/mysql_install_db





الان قم بتغير ملكية التركيب إلى المستعمل mysql الذي إنشأناه قبل قليل من خلال الامر التالي :

Code ..

chown -R mysql /usr/local/mysql
chgrp -R mysql /usr/local/mysql





3.4 كيف يمكن تشغيله ؟

من خلال هذا الامر يمكنك تشغيل قاعدة البيانات
Code ..

/usr/local/mysql/bin/safe_mysqld --user=mysql &





3.5 مصادر الـ MySQL ؟

Official MySQL Tutorial
http://www.mysql.com/doc/T/u/Tutorial.html

Building a Data****-Driven *** Site Using PHP and MySQL
http://www.mysql.com/articles/ddws/

MySQL ********ation
http://www.mysql.com/doc/

SQL Interpreter & Tutorial
http://www.sqlcourse.com

walid_8281500
03-19-2009, 08:39 PM
كيف نقوم بإرسال بريد جماعي !!


سنتطرق في هذا الدرس عن كيفية عمل ملف خاص لارسال رساله للاعضاء ...

مثلا في المنتديات الكبيرة مثل ال VBZooM & vBulletin ... هنالك صفحة في الادمن من خلالها يمكنك مراسلة اعضاء المنتدى .. اذا كنت تتمنى ان يكن في برنامجك مثل هذة الميزه تابع الدرس ... http://traidnt.net/vb/images/smilies/cupidarrow.gif

أولاً :
قبل البدء يجب عليك التجربة اولا و بعدها التطبيق على برنامجك .. الآن طبق مع الدرس للتجربه فقط لكي تستطيع تصليح اخطائك ...

يجب ان يكون لدينا جدول في قاعدة البيانات يحتوي على الايميلات .. لنفترض ان لدينا جدول Mail ...
Code ..


CREATE TABLE Mail (
id int(9) NOT NULL auto_increment ,
email blob NOT NULL ,
primary key (id));





حسناً هذا هو الجدول الذي سنحتاجه في عملنا ... لنضيف 4 ايميلات مثلاً :
Code ..


INSERT INTO Mail(id , email)
VALUES('NULL' , PhpVillage@microsoft.com);
INSERT INTO Mail(id , email)
VALUES('NULL' , PhpVillage@yahoo.com);
INSERT INTO Mail(id , email)
VALUES('NULL' , PhpVillage@hotmail.com);
INSERT INTO Mail(id , email)
VALUES('NULL' , PhpVillage@PhpVillage.com);





الآن اصبح لدينا جدول يحتوي على 4 ايميلات .. و نعتبرهم القائمه البريدية التي سنطبق درس اليوم عليها ....

بعد الانتهاء من تعبئة البيانات نقوم بفتح ملف PHP جديد و نسميه مثلا MailList.php .. سنستخدم بإذن الله الدالة mail في هذا الملف ...

الآن نحتاج إلى الاتصال بقاعدة البيانات و استخراج الايميلات من الجدول ... بواسطة هذا الكود ....
Code ..


<?
//هنا الاتصال بقاعدة البيانات و لا تنسى تغيير المعلومات
mysql_pconnect("localhost", "user", "pass") or die (mysql_error());
//هنا اختيار قاعدة البيانات Mailist
mysql_select_db ("Mailist");
?>





حسناً الآن و قد قمنا بالاتصال بقاعدة البيانات و اخترنا قاعدة البيانات التي تحتوي على جدول الايميلات ... تبقى علينا ان نقوم بإستخراج المعلومات او الايميلات من الجدول ... بواسطة هذا الكود ...
Code ..


<?
//هنا نقوم بطلب المعلومات من الجدول ...
$Select = mysql_query("SELECT * FROM Mail");

//هنا نقوم بإستخراج المعلومات لاستعمالها
while ($row = mysql_fetch_array($Select)) {

/* $to هنا نقوم بتحديد قيمه للمتغير
و هي جميع الايميلات الموجوده في الجدول*/
$to = $row[Mail];

//هذا السطر يبدأ بإرسال الايميلات
$Send = mail($to, "PHPVillage.com" ,"Welcome All To PHPVillage");
}

//و اخيرا التحقق اذا تم الارسال بنجاح !!
if ($Send) {
echo "تم إرسال الرسائل بنجاح !!";
}
else {
echo "هنالك خطأ : لم يتم ارسال الرسال";
}
?>





و هذا كامل الكود .. إقرأه بتمعن و تعلم منه .. تذكر يجب عليك ان تصمم نموذجاً لكي تقوم بكتابة الرسائل فيه ..

ملاحظه مهمة : الداله mail لا تعمل في السيرفر الشخصي إلا باستخدام أحد البرامج التي تسمح بذلك ..

walid_8281500
03-19-2009, 08:39 PM
كيف تصنع دالة خاصة بك


كتـابة الدوال
الدرس الأول : كيفية صنع دالة خاصة بك ..
الدالة هي ما يسمى بالـ Function و لها عدة فوائد منها تصغير الكود البرمجي و التسهيل عليك من كتابة بعض المهام التي تتكرر باستمرار و غيرها كثير ..

شروط عمل دالة خاصة بك :
1 - أن تكون الدالة غير موجودة مسبقاً ، لأنها لو كانت موجودة فعلاً فليس هناك سبب يدعوا لتكرار الجهد ، بل يمكنك إستخدام الدوال الجاهزة في دليل الـ php.net ..
2- لا يمكن أن يبدأ اسم الدالة بعدد .

صنع الدالة أمر سهل مثلا ، وكمثال على ذلك قم بإنشـاء ملف وليكن إسمه Function.php ، ولتكن محتوياته كالتالي :
Code ..


<?
Function Mr_Muslem ( )
{
echo "Mr.Muslem The Muslem Man";
}
?>






نأتي للشرح :
1- ?> ، وسم بداية الكود البرمجي .
2- Function ، أي دالة يجب أن تبدأ بهذه الكلمة وهي كتصريح لبداية الدالة التي نريد تعريفها .
3- Mr_Muslem ، هذا اسم الدالة التي سنقوم بتعريفها ، وتستطيع أن تكتب أي إسم آخر باستثنـاء الدوال المعرفة فعلاً ، ولكن يفضّل أن يكون الإسم دالاً على معنى الدالة ، ليسهل تذكرها عند استدعاءها فيما بعد .
4- } ، بداية الدالة ، فكل ما يكتب بعدها لن يتم تنفيذه مبـاشرة ، بل سيتم ذلك عند استدعاء الدالة .
5- أوامر الدالة وهو كما يلي :
Code ..


<?
echo " Mr.Muslem The Muslem Man ";
?>





هذا السطر الأول من أوامر الدالة ( وهو الوحيد هنا ) ، يقوم هذا السطر بطبـاعة جملة :
Mr.Muslem The Muslem Man
مع ملاحظة أن عملية الطباعة لن تتم قبل أن نستدعى الدالة !

6- { ، وهي علامة نهاية عمل الدالة .
7- <? ، هذا وسم نهاية الكود البرمجي .




إستدعاء الدوال


الآن الجزء الثاني من الدرس كيف يتم إدراج هذه الدالة ، أفتح ملف وسمه Muslem.php ، و أكتب فيه التالي :

Code ..


<?
require_once('Function.php');
Mr_Muslem ( );
?>






نأتي للشرح :
1- ?> ، وسم بداية الكود البرمجي .
2- السطر التالي :
Code ..


<?
require_once('Function.php');
?>





وهذه الدالة ( require_once ) تقوم بإدراج الملف الذي توجد به الدالة التي قمنا بتعريفها في ملف Function.php .

3- السطر التالي يقوم باستدعاء الدالة :
Code ..


<?
Mr_Muslem( );
?>





4- <? ، هذا وسم نهاية الكود البرمجي .

تلاحظ أن جملة Mr.Muslem The Muslem Man قد ظهرت بعد إستدعـاء الدالة ، وهذه هي الفكرة الأسـاسية للدوال مع أن المثـال يعتبر بسيطاً ، لكن الدوال تقوم بأكثر من ذلك بكثير ..

walid_8281500
03-19-2009, 08:40 PM
إدراج الملفـات في الـ PHP


مقدمة
بسم الله الرحمن الرحيم والصلاة والسلام على أشرف الانبياء والمرسلين عليه وعلى آله و صحبه أفضل الصلاة والتسليم ، أما بعد ..

لو افترضنـا أن لدينا موقع فيه 10 صفحـات ، كل صفحة تحتوي على صورة للموقع أعلى الصفحة ، وعنـاوين البريد في نهاية الصفحة ، وفي المنتصف تختلف المعلومات المعروضة من صفحة الى أخرى .

عند أي تعديل على محتويات أي صفحة وأقصد هنـا الجزء المتغير ( منتصف الصفحة ) ، سنقوم بالتعديل على نفس الملف وهذا شي طبيعي ، لكن لو أردنا تغيير الصورة أو عناوين البريد المتكررة في كل صفحة فهل من المنطقي أن نقوم بذلك في كل الصفحات ؟

هذا المثـال البسيط يوضح مدى أهمية تنظيم الملفات وعمليات الإدراج ( includes ) ، وقد نختلف في الإجـابة على السؤال إعتماداً على عدد الصفحات التي ذكرتها ، لكن ماذا لو كانت الصفحات بالعشرات أو بالمئـات ؟ بالـتأكيد لن نختلف على الإجـابة .

إذا فالمبرمج المتميز هو الذي يفعل ما يريد بعمليات أقل وبأسطر أقل من غيره ، تقليلاً للحمل على الخـادم ( Server ) ، وتنظيماً للعمل ، وتسهيلاً للتعديل ، وهنـا يجب أن نبين أن عملية تقسيم الصفحة لجزء علوي وأوسط وسفلي ليس هو المقصود فقط ! لكن الكلام هنـا عـام عن أي إدراج لأي ملف ، ليس مهماً أن تراه على الشـاشة ، فبعض عمليات الإدارج نحتاج اليها في مسألة التحقق من هوية الشخص أو رقم الآي بي أو خلاف ذلك .

الـ PHP تقدم دالتين مختلفتين لعملية الإدراج ، الدالة الأولى هي require والثانية هي include ، بإستخدام أي دالة منهن يمكن إدراح أي كود يحتوي على جمل PHP ـ أو نص ، أو HTML ، وغير ذلك من الـ functions ( الدوال المعرفة ) أو الـ classes ( الكائنات ) .

وكنظرة سريعة لمحتويات الدرس ، سنتطرق لما يلي :
- إستخدام دالـة ()require .
- إمتدادات الملفات والإدراج التلقـائي .
- إستخدام دالـة ()include .
- أسـاليب تقسيم الصفحات .

فعلى بركة الله نبدأ ..


إستخدام دالـة ()require

قم بتخزين الكود التالي في ملف php ، وليكن إسمه file1.php :
Code ..


<?
Echo 'تجربة إدراج نص من ملف آخر<br>";
?>





وأيضـاً قم بتخزين الكود التالي في ملف إسمه main.php "
Code ..


<?
Echo "السطر الأول<br>";
Require("file1.php");
Echo "السطر الأخير";
?>




ما نريد الوصول إليه هو أنه عند تنفيذ الملف main.php ستجد أنه يحتوي على 3 جمل بينما لم نكتب إلا جملتين ! ، والذي حدث بإختصـار أن الجملة التي في المنتصف جاءت من الملف الآخر وكانها جزء من الملف main.php ، وهذه هي الطريقة بإختصـار .

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



إمتدادات الملفات والإدراج التلقـائي


- إمتدادات الملفات :
في الـ PHP لا يتم التحقق من إمتداد الملف ( ما بعد النقطة من الإسم ) إلا في حالة طلب الملف بشكل مبـاشر ، فلو كان لدينا ملف للصفحة الرئيسية مثلاً فيجب أن يكون إمتداده بأحد إمتدادت PHP المعروفة ( php php3 phtml .. الخ ) ، لاننـا نقوم بطلب الملف مبـاشرة ، لكن ماذا لو كان لدينا في ملف الصفحة الرئيسية عدة ملفات مدرجة ، ولتكن ملفين على سبيل المثـال ، file1.php و file2.php ، هنـا يمكن أن نغير في إمتدادات الملفين السـابقين بالشكل الذي يناسبنا ، لذلك نجد أغلب البرامج التي اطلعنا عليها كالمنتديات مثلاً تستخدم إمتدادت مثل .inc ، لكن تأكد من عدم إمكانية الوصول لهذه الملفات كأن تكون في مجلد خاص بالملفات المدرجة ( include مثلاً ) وإلا سيمكن للمستخدم أن يشـاهد الكود الذي كتبته على شكل نص ، وهذا ما لا تريده في ظني ..

ملاحظة يجب التطرق لها ، وهي أنه يجب أن نضع علامات PHP <? و ?> في الملف الذي يتم إستدعاءه بأحد الدالتين ، وإلا سيتم التعـامل معه كنص عادي ويتم طباعته كما هو .

- الإدراج التلقائي :
ببسـاطة يمكنك أن تحدد الملف العلوي ( header ) والسفلي ( footer ) ليتم إدراجهما تلقائياً في أي صفحة في موقعك ، وذلك يتم عن طريق الملف php.ini ، والخيارين هما :
Code ..


auto_prepend_file =
auto_append_file =





الخيـار الأول للملف العلوي أيـاً كان إسمه وعنوانه ، والخيـار الثاني للملف السفلي الذي سيتم إدراجه ، أياً كان إسمه وعنوانه أيضـاً ، ولنرى كيف يمكن تعديل الخيـار على الـ Windows :
Code ..


auto_prepend_file = "C:\Apache\htdocs\include\header.inc"
auto_append_file = "C:\Apache\htdocs\include\footeer.inc"






وعلى الـ Unix كما يلي :
Code ..


auto_prepend_file = "/home/user/include/header.inc"
auto_append_file = "/home/user/include/footeer.inc"






في هذه الحالة سيتم إدراج الملف header.inc الى كافة الملفات التي يتم تنفيذها ، لذا ليس هناك حاجة لإستدعاء أي ملف بالدالة require أو include ، ورأيي أن لا تقوم بإستخدام هذه الطريقة ، لكننا هنا نحـاول أن نتطرق لجميع جوانب الموضوع .

قد لا يسمح لك المستضيف بعملية تحرير لملف الـ php.ini ولذا عليك فتح ملف نصي فارغ وتسميته بـ .htaccess وضع فيه ما يلي :
Code ..


php_value auto_prepend_file "/home/user/include/header.inc"
php_value auto_append_file "/home/user/include/footeer.inc"



إستخدام دالـة ()include

كل ما ذكرناه بالنسبة للدالة require ينطبق على الدالة Include لكن مع بعض الإضـافات البسيطة لدالة Include هي ما يلي :

1- لو كان لدينا شرط يتحقق من قيمة ما ، وبناء على هذه القيمة سيتم إدراج ملف سواء بـ require أو بـ include ، يفضّل هنـا أن يتم إستخدام الدالة include لأنها ستقلل الحمل على المستضيف بمنعى أنه لو كان لدينا الكود التالي :
Code ..


<?
if ($var == 1) {
include("file1.php");
} else {
include("file2.php");
?>





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

2- دالة الـ include يمكن أن نسترجع منها قيماً وتسندها إلى متغير آخر ( نجاح أو فشل مثلاً ) ، بينما دالة الـ require لا يمكنها القيـام بذلك ، ولتوضيح الفكرة قم بفتح ملف جديد وأعطه الإسم fp.inc ، واحفظ فيه ما يلي :
Code ..


<?
@$fp = fopen($name, $mode);
if (!$fp) {
echo "يوجد مشكلة في فتح الملف ..";
return 0;
} else {
return 1;
}
?>





وكذلك أفتح ملفاً جديداً وسمه main2.php واحفظ فيه ما يلي :
Code ..


<?
$name = "main.php";
$mode ="r";
$result = include("fp.inc");
if ($result == 1) { echo "تم الوصول الى الملف ..";}
?>





بإفتراض أنك قمت بتطبيق المثـال الأول ، وحفظت الملفين السابقين في نفس المجلد الذي يحتوي على ملف الـ main.php ، عند تنفيذك المثـال السـابق ( أقصد ملف الـ main2.php ) ستجد أن كلمة ( تم الوصول الى الملف ) قد ظهرت لك ، ما يهمني هنا سواء ظهرت نفس الجملة أو الجمل الأخرى ( يوجد مشكلة في فتح الملف ) أن الدالة include قد تفاعلت معنا وقمنا باسترجاع قيمة الشرط فيها والتي تتحكم فيها دالة return ، وقمنا بإسنـادها الى متغير ( في مثالنا كان المتغير هو result$ ) ، بينما دالة الـ require لا يمكن أن تفعل ذلك ، جرب ذلك بنفسك وغير دالة include في ملف الـ main2.php الى require ولن يتم طباعة شي سواء تمت العملية أو لو تتم .


أسـاليب تقسيم الصفحات

كيف يمكن تقسيم الصفحات لتخدم موقعك ؟ هذا السؤال يمكن الإجـابة عليه بسهولة بعدما عرفنا أساليب البرمجة في ذلك ، ولتأكيد المفهوم فإن الغالب في تقسيم الصفحات أن يتم بالشكل التالي :
- ملف يحتوي على مقدمة الموقع والبلوكـات التي على اليمين ويكون إسمه غالباً header .
- ملف يحتوي على البلوكات التي على اليسـار ( إن وجدت ) ويحتوي أيضـاً على تذييل الصفحة ( نهايتها من الأسفل ) .

وهنا يجب أن نتطرق إلى مثـال بسيط لنرى كيف يمكن أن نقسم الصفحة بإستخدام الجدوال وكيف لنا أن نتحكم في هذا التقسيم ، وسأذكر عدة أمثلة مع الكود الخاص بكل مثـال :

1- صفحة تحتوي على عنوان الموقع أعلى الصفحة ، وبلوكـات على يمين الصفحة ، وتحتوي على تذييل الصفحة ( نهايتها ) ، بدون بلوكات على اليسـار ، سيحتوي الكود على ملفين رئيسيين هما header.inc و footer.inc ، وسأبداً بـملف الـ header.inc :
Code ..


<HTML>
<HEAD>
<table width=759 border=1 align=center dir=rtl>
<tr><td>هنا تضع ما تريد أن يظهر في أعلى الصفحة
</td></tr></table>
<table width=759 border=1 align=center dir=rtl>
<tr><td width=139>
هنا تضع البلوكات على اليمين ، كل بلوك في جدول جديد ..
</td>
<td width=620>





الملف الثاني هو footer.inc وسيحتوي على :
Code ..


</td></tr></table>
<table width=759 border=1 align=center dir=rtl>
<tr><td>هنا تضع ما تريد أن يظهر في أسفل الصفحة
</td></tr></table>






بعد ذلك قم بفتح ملف جديد وسمه ( index.php ) وأحفظ فيها ما يلي :
Code ..


<?
Include("header.inc");
Echo "هنا تضع ما تريد أن يظهر في منتصف الصفحة ..";
Include("footer.inc");
?>






ملاحظة : في ملف الـ header.inc حددنا قيمة عرض الجداول بـ 759 ، وهي طريقة من الطرق التي يمكن لنا بها أن نحدد ذلك ، أما هذه الطريقة فتفيد في عدم تأثر شكل الصفحة بدقة الشاشة ، سواء كانت 800×600 أو أكثر ، وأقصد هنا أن شكل الموقع سيبقى ثابت بقيمة معينة ولن يتم توسيع العرض مع إختلاف دقة الشاشة .

الطريقة الأخرى هي وضع العرض بالنسبة المئوية ، وهنا سيتم توسيع العرض على حسب دقة الشـاشة .

2- صفحة تحتوي على عنوان الموقع أعلى الصفحة ، وبلوكـات على يمين الصفحة ويسـارها ، وتحتوي على تذييل الصفحة ( نهايتها ) ، سيحتوي الكود على ملفين رئيسيين هما header.inc و footer.inc ، وسأبداً بـملف الـ header.inc :
Code ..


<HTML>
<HEAD>
<table width=759 border=1 align=center dir=rtl>
<tr><td>هنا تضع ما تريد أن يظهر في أعلى الصفحة
</td></tr></table>
<table width=759 border=1 align=center dir=rtl>
<tr><td width=139>
هنا تضع البلوكات على اليمين ، كل بلوك في جدول جديد ..
</td>
<td width=481>





الملف الثاني هو footer.inc وسيحتوي على :
Code ..


</td>
<td width=139>
هنا تضع البلوكات على اليسـار ، كل بلوك في جدول جديد ..
</td></tr>
</table>
<table width=759 border=1 align=center dir=rtl>
<tr><td>هنا تضع ما تريد أن يظهر في أسفل الصفحة
</td></tr></table>






بعد ذلك جرب نفس الطريقة السـابقة للملف index.php .

هذا كل شي في هذا الدرس ، أتمنى أن يكون مفيداً للجميع ..

walid_8281500
03-19-2009, 08:41 PM
إستخدام الـ ******s


مقدمة
تعد الكعكات ( الـ ******s ) من الوسائل المفيدة في انشاء مواقع اكثر تفاعلية ، فبواسطتها ستتمكن من معرفة هل قام المتصفح بزيارة موقعك من قبل ام لا ..

في هذا الدرس سنتعرف على الكعكات و كيف يمكننا استخدامها ...

اقسام الدرس :
1- معلومات عامة .
2- زراعة الكعكات على جهاز العميل .
3- قراءة الكعكات من جهاز العميل .
4- تطبيق : تخصيص لون الخلفية .

المصادر :
http://www.geocities.com/paledu5/issues.htm
http://totalquality.dubaipolice.gov....nternash36.htm (http://totalquality.dubaipolice.gov.ae/ara/ara_Internet/internash36.htm)
http://urnotalone.8m.com/******s.htm
http://www.hotuae.com/et/******s.html
http://www.free***s.com/paz1/******s.htm
http://www.planet-source-code.com/vb...d=357&lngWId=8 (http://www.planet-source-code.com/vb/******s/ShowCode.asp?txtCodeId=357&lngWId=8)
http://www.devshed.com/Server_Side/PHP/******s
http://www.free2code.net/tutorials/php/******2


معلومات عامة

- ما هي ملفات الكوكيز ؟
ملفات الكوكيز عبارة عن ملفات نصية ، تقوم المواقع التي تزورها بإيداعها على القرص الصلب في جهازك ، وتحتوي هذه الملفات النصية على معلومات تتيح للموقع الذي أودعها أن يسترجعها عند الحاجة ، أي عند زيارتك المقبلة للموقع .

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

- كيف يتم إيداع ملفات الكوكيز على جهازك ؟
يرسل المتصفح ، عند إدخالك عنوان موقع في شريط العناوين ، طلباً إلى الموقع الذي حددته ، متضمناً عنوان IP الخاص به ، ونوع المتصفح الذي تستخدمه ، ونظام التشغيل الذي يدير جهازك . تخزّن هذه المعلومات في ملفات خاصة بالمزود Log Files ، ولا علاقة للكوكيز بالمعلومات التي يتم إرسالها . وفي الوقت ذاته يبحث المتصفح عن ملفات كوكيز ، التي تخص الموقع المطلوب ، فإذا وجدها يتم إرسالها مع طلب مشاهدة الموقع ، وإذا لم توجد ، فإن الموقع سيدرك أن هذه زيارتك الأولى إليه ، فيقوم بإرسال ملفات الكوكيز إلى جهازك لتخزن عليه .

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

----- [ معيلق]

- مكونات ملف الكوكيز :
يتكون عادة من عدة اجزاء هي اسم الملف ، قيمته ، تاريخ انتهاء مفعوله ، الموقع المالك له ...


زراعة الكعكات على جهاز العميل

أولا : كيف تزرع ملفات الكعكات :
يتم ذلك باستخدام الدالة set****** و تعريفها بالشكل التالي :
Code ..


boolean set****** ( string name [, string value [, int expire
[, string path [, string domain [, int secure]]]]])






تهمنا المدخلات الثلاث الاولى و هي :
name : اي اسم الكعكة ... فبامكانك ارسال اكثر من كعكة الى متصفح واحد و عندها يصبح الاسم هو الطريقة الوحيدة للتمييز .

value : القيمة ... فقط قيم نصية ... لا يمكنك وضع مصفوفة كقيمة و هذا أامر مهم ... لكن انتبه بامكانك وضع مصفوفة لكن بطريقة اخرى ... ؟ كيف ؟ : استخدم الدالة serialize لتحويل اي متغير في بي اتش بي الى شكل نصي و من ثم استخدم unserialize لاعادته الى الشكل الطبيعي .

expire : اي عدد الثواني من بدية عصر اليونكس ( 1 يناير 1970 ) و التي بعدها سيقوم المتصفح على جهاز المستخدم بحذف الكعكة ... و هنا ثلاث حالات :
--> أولاً : أن يكون الوقت المعطى كمدخل اكثر من الوقت الحالي على جهاز العميل و عندها تخزن الكعكة على جهاز العميل و تحذف عند انقضاء المدة .
--> ثانياً : أن يكون الوقت المعطى كمدخل اقل من الوقت على جهاز العميل و عندها لا يقوم المتصفح على جهاز العميل بتخزينها و اذا وجدت كعكة بنفس الاسم فانه يحذفها حتى لو لم تنتهي المدة .
--> ثالثاً : إذا لم تحدد وقتا فان الكعكة تخزن في ذاكرة المتصفح و تفقد حالما يغلق المستخدم الموقع .

مثال :
Code ..


<?
set******('site','http://www.albrhan.com/',time()+3600);
?>





من الدوال المفيدة دالة time و التي ترجع الوقت الحالي على شكل عدد الثواني من بداية عصر اليونكس (1 يناير 1970) .

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

مثال :
Code ..


<?
set******('site','',time()-360000);
?>






ملاحظات :
1- عندما تحدد زمنا ماضياً اجعله قيمة كبيرة لكي تتفادى فارق التوقيت بين الخادم و العميل .
2- لكي تعدل أي كعكة عليك حذفها و إرسالها من جديد .

ملاحظة مهمة :
يجب ان تستدعي الدالة set****** قبل أن ترسل اي شيء الى المتصفح .. فمثلا الكود التالي لن ينجح :
Code ..


<html>
<body>
<?
set******('site','islamway.net',time()+20000);
echo " Alfjr.com : the best islamic forum";
?>
</body>
</html>





بل لو كان هنالك مجرد سطر فارغ قبل علامة البداية ?> فلن تعمل الدالة set****** ...

المثال السابق كان من الممكن ان يكون :
Code ..


<? set******('site','islamway.net',time()+20000);
?>
<html>
<body>
<? echo " Alfjr.com : the best islamic forum"; ?>
</body>
</html>



قراءة الكعكات من جهاز العميل

- كيف تستقبل المتغيرات من الكعكة :
كما قلنا بانه بامكانك ارسال اكثر من كعكة الى متصفح واحد ..
عندما يطلب المستخدم من متصفحهِ صفحة على موقعك فان المتصفح يقوم بارسال جميع الكعكات التي قمت انت بزراعتها عند المستخدم ... PHP تسهل عليك قراءة هذه الكعكات و تخزنها في مصفوفة اسمها ******_$ و هي مصفوفة من النوع Associative Arrays بحيث ان المفتاح هو اسم الكعكة و القيمة قيمة الكعكة كما ارسلتها .

مثال :
Code ..


<?
echo $_******['site'];
?>






و هذه تطبع :
Code ..


islamway.net



تطبيق : تخصيص لون الخلفية

كمثال بسيط دعنا نقوم بانشاء موقع مبسط و نستخدم الكعكات لكي نحفظ لون الخلفية المحببة الى الشخص ..

- ماذا لدينا ؟
1- الملف user.php : يقوم الملف بعمليتين :
--> الاولى : تحديد اللون الذي اختاره الزائر .
--> الثانية : عرض نموذج اختيار الللون و حفظ اللون المختار

2- الملف index.php إحدى صفحات الموقع و التي تستفيد من خدمات الملف user.php .

وإليك الكود الخاص بكل ملف :
1- الملف user.php :
Code ..


<?
/*-----------------------
******s-****d Background Selector..
Created By : "abomuhammed"<abomuhammed@islamway.net>
For : PHPvillage.com
-------------------------*/

function display_form(){
?>
<html>
<body>
<!-- Color setting Form -->
<form name=color_select method="GET">
<INPUT type="hidden" name="do" value="set_color">
<INPUT name="color" type="****" value="
<? echo get_color(); ?>">
<INPUT type="submit" value="احفظ اللون">
</FORM>
<!-- Color Clearing Form -->
<form name=color_clear method="GET">
<INPUT type="hidden" name="do" value="clear_color">
<INPUT type="submit" value="لا تتذكر لوني المفضل">
</FORM>
<?

}

function set_color(){
global $_GET;
set******('color',$_GET['color'],time()+36000);
header('Location:index.php');

}

function get_color(){
global $_******;
if(isset($_******['color'])){
return $_******['color'];
}else{
return "#FFFFFF";
}
}

function clear_color(){
set******('color',$_GET['color'],time()-36000);
header('Location:index.php');
}

// selection

if ($do=='display_form'){
display_form();
}elseif ($do=="set_color"){
set_color();
}elseif ($do=="clear_color"){
clear_color();
}
?>






- الدالة الاولى display_form تقوم فقط بعرض نموذج اختيار اللون .
- الدالة الثانية set_color تقوم بحفظ اللون المختار في كعكة و ترجع المستخدم الى الصفحة الرئيسية .
- الدالة الثالثة get_color ترجع قيمة اللون من الكعكة و اذا لم يكن هنالك قيمة فانها ترجع لون افتراضي وهو الابيض .
- الدالة الرابعة clear_color تقوم بمسح الكعكة بالطريقة التي ذكرناها في الدرس .

2- ملف الـ index.php :
ملف عادي جداً الا انه يطلب الدالة get_color من ملف user.php كما يلي :
Code ..


<html>
<BODY bgcolor="<? include('user.php');
echo get_color() ?>">
<h1>مرحبا بك .....</h1>
<br>
يمكنك تخصيص لون الخلفية من هنا
<br>

<a href="user.php?do=display_form"> صفحة تخصيص اللون</a>
</body>
</html>

walid_8281500
03-19-2009, 08:42 PM
نـقل قواعد البيـانات


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

في مثالنا هنا سنقوم بشرح طريقة نقل قاعدة بيـانات منتدى الـ VB الشهير ، لذلك ستجد مجموعة كبيرة من الجدوال تقريباً 49 جدولاً ، ولإن القاعدة ستكون كبيرة نسبياً سنقوم بتخفيف بعض البيـانات منها فسنقوم بالتـالي :

تفريغ الجداول التـالية ( عن طريق فتح الجدول واختيـار Empty ) ..
1- adminlog
2- search
3- searchindex
4- word

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

بعد تفريغ الجدوال قم بالرجوع الى الصفحة التي يتم استعراض جميع الجداول فيها ، وستجد أسفل الصفحة العنوان التـالي View dump (schema) of data**** وبجانبه الخيـارات التـالية
1- Structure only
2- Structure and data
3- Data only

قم باختيار الخيار الثاني Structure and data .

بعد ذلك ستجد أسفل المربع الأبيض الذي يحتوي على اسماء الجداول الخيـارات التـالية :
1- Add 'drop table'
2- Complete inserts
3- Extended inserts
4- Use backquotes with tables and fields' names
5- Save as file

قم بوضع الاختيـار على الخيـار الأخير وهو حفظ بيانات قاعدة البيانات في ملف خارجي Save as file . في النهاية إضغط على Go وأختر الإسم المناسب الذي تراه وانتظر تحميل كامل الملف ..

الآن إذهب الى الموقع الجديد الذي تريد ان تنقل قاعدة البيانات اليه ، على سبيل المثـال http://www.123.com (http://www.123.com/) ، ستقوم بالتأكيد بعملية تركيب جديدة للمنتدى عن طريق الـ install ، ما يهمنا هنا هو طريقة استرجاع قاعدة البيانات التي قمنا بحفظها في ملف sql الى الموقع الجديد ، كل ما عليك فعله هو فتح الـ phpmyadmin في الموقع الذي تريد أن تنقل القـاعدة اليه ، وتقوم بما يلي :

إذهب الى قاعدة البيانات التي تم انشـاءها بعملية الـ install وستجد أن أغلب الجدوال فارغة ، قم بتحديد كافة الجداول وأختر delete او drop لكن تأكد أنك في قاعدة البيـانات الصحيحة التي تريدها ، بعد عملية الحذف ستجد في الأسفل مربع فارغ وتحته زر Browse ، قم بالضغط عليه واختر الملف الذي قم بحفظه سـابقاً ، وسيتم تحميل البيـانات الى قاعدة البيـانات الجديدة ..

نقطة أخيرة ستسهل عليك نقل قاعدة البيـانات وهي تقسم الملف إن كان كبيراً ، والطريقة ببسـاطة عن طريق فتح الملف واقتطاع إجزاء منه حسب الحاجة التي تراها ووضع الأقسـام في ملفات ذات امتداد sql ، مثلا 1.sql و 2.sql الخ .. لكن تأكد من أن كل ملف يبدأ بالجملة insert into ، وأن حجمه ليس كبيراً ، 50kb ستكون مناسبة .

walid_8281500
03-19-2009, 08:43 PM
لماذا لغة PHP ?


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

البعض يقول هذه العملية سهلة وسريعة خصوصاً مع البرامج الحديثة ، وربما موقعي صغير ولايحتاج إلى كل هذا التعب . فماذا أستفيد أيضا ؟

نقول : تستفيد منها في اضافة بعض البرامج التفاعلية الضرورية لموقعك . ألا ترغب في أن تتعرف على رأي زوارك في موقعك وأن تحصل على مقترحات عملية منهم ؟ الحل أن تضيف سجل زوار يتيح لزوارك كتابة آرائهم ومقترحاتهم ، وبي إتش بي تتيح لك ذلك .

هذا مثال بسيط ، وكذلك تستطيع الاستفادة منها في اضافة برامج كثيرة مثل :
1- عداد زوار لمعرفة عدد زوار موقعك . والعدادات المتقدمة منها تعطيك تفاصيل إحصائية مفيدة .
2- منتدى . والمنتديات معروفة لدى الجميع تقريبا ، وفوائدها معروفة ، فهي التي تزيد من زوار موقعك ، وتفيد زوار موقعك في الاجتماع في مكان واحد وتبادل الخبرات والفوائد .
3- برنامج لمشاركة الزوار ، بحيث يضع الزائر مقالته أو مشاركته في موقعك بدون تدخل منك وبذلك تجد المحتويات الجديدة على موقعك دائما .
4- برنامج للبطاقات وهذا معروف ..

بالإضـافة الى أنواع لاحصر لها من البرامج ..

الآن دعونا نشرح قليلا ماهي لغة بي إتش بي ، هناك لغات كثيرة تشابه هذه اللغة منها لغة Perl أو ASP ، وهي لغات تعمل من جهة المستضيف أو ما يسمى بالـ ServerSide language ، أي أنها تعمل من قبل المستضيف الذي تعمل عليه وتقوم بإخراج النتائج على شكل HTML يفهمها المتصفح ، وهي بذلك لا تثقل حاسوب زائر الموقع بأية أعباء . وكذلك توفر مرونة عالية في البرمجة لا تتوفر في لغات HTML و **** ****** والتي تعمل على حاسوب زائر الموقع .

بدأت لغة البي إتش بي بفكرة أحد الهواة Ramsus Ledrof الذي فكر في كيفية تضمين شفرات ال HTML شفرات أكثر تعقيدا ، إلى أن بدأت هذه اللغة بالنمو وأصبحت أغلب المواقع لاتخلو من برنامج واحد على الأقل مصمم بالـ PHP .

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

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

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

لماذا وما الدافع في اختيار تعلم لغة بي إتش بي مع وجود الكثير من اللغات المنتشرة مثل Perl و CGI و**** ****** و Cold Fusion و ASP . الأمرفي غاية البساطة . لغة PHP لغة سهلة ، قوية ، متماسكة وتستطيع عمل كل شيء نريده .

هل تعلم لغة بي إتش بي صعبة ؟ أكيد ليست بصعوبة لغة البيرل ، ونستطيع القول أن من يملك أساسيات لغة الـ C يستطيع بكل سهولة استيعاب عمل أوامر لغة PHP لأنها اعتمدت على طريقة الأوامر في لغة السي ، وأما الأشخاص الذين لم يحالفهم الحظ في تعلم لغات البرمجة فلا تقلقوا فالأمر ليس صعبا في تعلم اللغة وفقط تحتاج للمواصلة وفهم الأوامر .

وهدفنا هو تعليمكم أساسيات اللغة لاستخدامها في صفحاتكم ، ولانحتاج منك إلا معرفة القليل من لغة HTML ..

walid_8281500
03-19-2009, 08:44 PM
العوامل:


العوامل
- العمليات الرياضية :
هي نفسها العمليات التي درستها في المرحلة الابتدائية من ( جمع + ، طرح - ، ضرب * ، قسمة / ) والزائد عليهم التي لم تدرسه تقريبا هو باقي القسمة ( % ) ..

مثال شامل على كل العمليات في الـ PHP :

Code ..


<?
$a = 6;
$b=2;
$c= $a +$b;
// سوف نحصل على ناتج الجمع 8

$c= $a -$b;
// سوف نحصل على ناتج الطرح 4

$c= $a * $b;
// سوف نحصل على ناتج الضرب 12

$c= $a /$b;
// سوف نحصل على ناتج القسمة 3

$a = 7;
$b=2;
$c= $a % $b;
// سوف نحصل على باقي القسمة 1
?>



عمليات Assignment

- عمليات Assignment :

=
احفظ القيمة في المتغير ، بمعنى خزن القيمة 3 في المتغير a$ :
Code ..


<?
$a = 3;
print $a;
// يطبع 3
?>






=+
إضافة قيمة إلى قيمة في نفس المتغير :
Code ..


<?
$a = 3;
$a += 3;
print $a;
// يطبع 6
?>






=-
اطرح المقدار واحد من المقدار ثلاثة في المتغير $a
Code ..


<?
$a = 3;
$a -= 1;
print $a;
// يطبع 2
?>






=*
يضرب القيمة 3 بالقيمة 2 ويكون الناتج مخزن في نفس المتغير :
Code ..


<?
$a = 3;
$a *= 2;
print $a;
// يطبع الناتج 6
?>






=/
يقسم قيمة على قيمه أخرى :
Code ..


<?
$a = 6;
$a /= 2;
print $a;
// يطبع ناتج القسمة 3
?>






=.
دمج سلسلة حرفية :
Code ..


<?
$a = "This is ";
$a .= "a test.";
print $a;
// : يطبع الجملة التالية
// This is a test.
?>



- عوامل الإضافة و الطرح

- عوامل الإضافة و الطرح :
لو افترضنا أننا لدينا المتغير $a=3 و أردنا إضافة واحد إليه بحيث يصبح 4 أو طرح واحد منه بحيث يصبح 2 ، لدينا العوامل التالية :

$a++ ارجع قيمة a ثم اضف واحد إليها
++$a اضف واحد إليها ثم ارجع القيمة
$a-- ارجع القيمة ثم اطرح واحد منها
--$a اطرح واحد ثم ارجع القيمة

++value ..
يتم إضافة واحد إلى الرقم خمسة :
Code ..


<?
$a = 5;
print ++$a;
// يطبع القيمة 6
?>






value++ ..
يرجع القيمة نفسها وفي استخدام ثاني تزيد القيمة واحد :
Code ..


<?
$a = 5;
print $a++;
// طباعة الرقم 6
print "<br>";
print $a;
// طباعة الرقم 5
?>






--value ..
يطرح من القيمة واحد :
Code ..


<?
$a = 5;
print --$a;
// يطبع الرقم 4
?>






value-- ..
يرجع القيمة نفسها وفي استخدام ثاني يطرح منها واحد :
Code ..


<?
$a = 5;
print $a--;
// يطبع الرقم 4
print "<br>";
print $a;
// يطبع الرقم 5
?>



عمليات المقارنة 1

- عمليات المقارنة Comparasion Operators :

$a == $b المتغيران متساويان ..
$a ===$b المتغيران متساويان و من نفس النوع ..
$a !=$b المتغير الاول لا يساوي الثاني ..
$a !==$b المتغير الاول لا يساوي الثاني وليس من نفس النوع ..
$a > $b أكبر من ..
$a < $b أصغر من ..
$a >=$b أكبر من او يساوي ..
$a <=$b أصغر من او يساوي ..

== (تساوي) ..
تساوي القيمة المخزنة في المتغير الأول بالقيمة المخزنة في المتغير الثاني :
Code ..


<?
$x = 7;
$y = "7";
if ($x == $y) print $x . " تساوي " . $y;
// يطبع 7 تساوي 7
?>






=== ( تساوي ومن نفس النوع ) ..
تساوي القيمة المخزنة في المتغير الأول بالقيمة المخزنة في المتغير الثاني وتكون القيم من نفس النوع ( حرفية – عددية ) :
Code ..


<?
$x = 7;
$y = 7;
if ($x === $y) print $x . " is identical to " . $y;
// يطبع 7 is identical to 7
?>






!= ( لا تساوي ) ..
إذا كانت القيم المخزنة في المتغيرين غير متساويين :
Code ..


<?
$x = 8;
$y = 4;
if ($x != $y) print $x . " لا تساوي " . $y;
// يطبع 8 لا تساوي 4
?>






!== ( لا تساوي ولا من نفس النوع ) ..
إذا كانت القيم المخزنة في المتغيرين غير متساويين وليست من نفس النوع :
Code ..


<?
$x = 8;
$y = 9;
if ($x !== $y) print $x . " iليست من نفس نوع " . $y;
// يطبع 8 ليست من نفس نوع 9
?>



عمليات المقارنة 2

< ( أقل من ) ..
مقارنة بين قيمتين واحدة أقل من الاخرى :
Code ..


<?
$x = 5;
$y = 9;
if ($x < $y) print $x . " أقل من " . $y;
// يطبع 5 أقل من 9
?>






> ( أكبر من ) ..
مقارنة بين قيمتين واحدة أكبر من الاخرى :
Code ..


<?
$x = 9 ;
$y = 5;
if ($x > $y) print $x . " اكبر من " . $y;
// يطبع 9 أكبر من 5
?>






<= ( أقل من ويساوي ) ..
مقارنة بين قيمتين واحدة أقل من الاخرى أو مساوية لها :
Code ..


<?
$x = 5;
$y = 5;
if ($x <= $y) print $x;
// يطبع القيمة 5
?>






>= ( أكبر من ويساوي ) ..
مقارنة بين قيمتين واحدة أكبر من الاخرى و مساوية لها :
Code ..


<?
$x = 7;
$y = 5;
if ($x >= $y) print $x;
// يطبع القيمة 7
?>



العمليات المنطقية

العمليات المنطقية Logical Operations :
لكي تكون قيمة الشرط صحيحة فيجب أن تنطبق القواعد التالية الخاصة بكل عامل منطقي على حدة ، والعوامل هي :
( and ) يجب تحقق الاثنين $a and $b
( or ) يجب تحقق كلاهما او احدهما $a or $b
( Xor ) يجب تحقق احدهما و ليس كلاهما $a xor $b
( ! ) نفي تحقق الشرط نفي لقيمة a !$a

ملاحظة : يمكن كتابة الـ ( and ) بالشكل التالي ( & ) والـ ( or ) بالشكل التالي ( | ) والـ ( Xor ) بالشكل التالي ( ^ ) ..

And ( و ) ..
إذا تحقق الشرطان ، بمعنى المتغير الأول يساوي 7 والمتغير الثاني يساوي 5 نفذ أمر الطباعة واطبع صحيح :
Code ..


<?
$x = 7;
$y = 5;
if (($x == 7) and ($y == 5)) print "صحيح";
// يتم طباعة صحيح
?>






Or ( أو ) ..
إذا كان أحد الشرطين صحيح أو الاثنين صحيحين نفذ أمر الطباعة :
Code ..


<?
$x = 7;
$y = 5;
if (($x == 7) or ($y == 8)) print "True";
// True يطبع
?>






Xor ..
إذا تحقق أحد الشرطين وليس الاثنين معا ينفذ أمر الطباعة :
Code ..


<?
$x = 7;
$y = 5;
if (($x == 7) xor ($y == 8)) print "True";
// True تحقق شرط واحد فقط فيتم طباعة كلمة
?>






! ( النفي ) ..
إذا كانت جملة الشرط غير صحيحة نفذ أمر الطباعة :
Code ..


<?
$y = 5;
if (! ($y == 10)) print "True";
يطبع True لأن المتغير القيمة المخزنة فيه غير صحيحة
?>



العمليات المنطقية

&& ..
المعامل && له نفس وظيفة ( and ) لكن الاختلاف في ترتيب تنفيذ أولويات العمليات :
Code ..


<?
$x = 7;
$y = 5;
if (($x == 7) && ($y == 5)) print "True";
// True يطبع
?>






|| ..
المعامل || له نفس وظيفة ( or ) لكن الاختلاف في ترتيب تنفيذ أولويات العمليات :
Code ..


<?
$x = 7;
$y = 5;
if (($x == 7) || ($y == 5)) print "True";
// True يطبع
?>

walid_8281500
03-19-2009, 08:44 PM
قواعد البيانات :


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

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

ومن المهم معرفة بعض الاساسيات في الـ RDBMS ، والتي من شأنها تسهيل عملية فهمك التام لطريقة عملها والتعامل معها ..

1- الجداول Tables :
تعتبر أكبر جزء في قاعد البيانات ، وهي عبارة عن أعمدة وصفوف تحتوي على قيم معينة .

2- الأعمدة Columns :
لكل عمود في الجدول أسم خاص يختلف عن أسماء الأعمدة الأخرى في نفس الجدول ، ويجب ان يكون لكل عمود نوع خاص به يصف نوع البيانات التي ستخزن فيه ، وكم يظهر في الصورة ، فان عمود الرقم من النوع الرقمي Integer ، اما الحقلين الآخرين فهي نصوص **** .

3- الصفوف Rows :
كل صف من صفوف الجدول يحتوي على قيم مختلفة ويمثل معلومات متكاملة عن قطاع معين ، وفي مثالنا يمثل معلومات متكاملة عن سخص معين .

4- القيم Values :
وهي ما تحتوي عليه تقاطعات الصفوف بالاعمدة .

5- المفاتيح Keys :
وتعتبر من اساليب تسهيل الوصول الى المعومات في قواعد البيانات ، وفي مثالنا السابق نرى أن العمود Id يحتوي على ارقام متسلسلة لا تتكرر نهائياً بل أنها تتكون بشكل تلقائي عند ادراج أي صف جديد للجدول ، وبالتالي فإنها تعتبر المفتاح المناسب لكل صف من صفوف الجدول لضمان عدم الالتباس في اختيار الصفوف .


الاتصال بالـ Mysql

فلو افترضنا أن لدينا جدولين في قاعدة بيانات ، يحتوي الجدول الأول على معلومات عن الدروس مفصلة على عدة حقول لتلك الدروس ، على سبيل المثال :
الرقم ( id ) ، الدرس ( lesson ) ، رقم الكاتب ( Key_author ) ..
ويحتوي الجدول الثاني على بيانات الأعضـاء كما يلي :
الرقم ( Key_author ) ، الاسم ( name ) ..

والمطلوب هو طريقة لربط الجدولين ، بحيث أن رقم الكاتب في جدول الدروس ( Key_author ) يدل على اسم الكاتب في جدول الاعضـاء ( name ) .

بالتدقيق في المثال يتضح أن الحقلين ( أو العمودين ) Key_author في كلا الجدولين هو مفتاح الربط بينهما ، ولذلك يمكن الوصول الى اسم الكاتب اعتماداً على رقمه من جدول الدروس ، وبالتالي الربط بين الجدولين .

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

الاتصال بالـ Mysql ، والتعامل معها :
كما قلنا أن الطريقة التقليدية هي الاتصال بقواعد البيانات عن طريق سيرفر الـ Mysql وبدون استخدام أي مكونات أخرى ، ولعمل ذلك نحتاج أن نعرف مسار سيرفر الـ Mysql على الجهاز المستخدم بعد عملية التثبيت ، كما قمنا بذلك في درس المقدمة ، وعادة يكون المسـار كالتالي ( C:\mysql\bin ) ، وبذلك يمكن تشغيل البرنامج mysql.exe من داخل الـ Dos .

عموماً طريقة الاتصال بقاعدة البيانات هي كالتالي :

Code ..


mysql –h HostName –u UserName –p






مع استبدال الـ HostName باسم السيرفر لديك ، سواء كان السيرفر على نفس الجهاز وفي هذه الحالية تكتب localhost ، أو أن السيرفر الذي تود الاتصال به ليس على نفس الجهاز وبذلك تكتب المسار الكامل لاسم الـسيرفر ( HostName ) ، ومع استبدال الـ UserName باسم المستخدم الخاص بالـ Mysql لديك ، بعد ذلك سيتم طلب كلمة المرور الخاصة بقاعدة البيانات بعد الضغط على Enter ، قم بادخالها وسيتم فتح الاتصال بالـ Mysql ، كما يمكن كتابة mysql فقط ليتم فتح الاتصال بقاعدة البيانات فقط اذا كنت تعمل على نفس الجهاز وليس جهاز أخر .

سيظهر المؤشر الخاص باوامر الـ Mysql كالتالي :

Code ..


mysql>






وبهذا نكون وصلنا الى المكان المطلوب لكتابة اوامر الـ Mysql والتحكم بها .



show - create - use

الأمر الأول الذي سنقوم بكتابته يقوم باستعراض قواعد البيانات الموجودة على السيرفر والامر هو :

Code ..


show data****s;






بعد كتابة هذا الأمر ( بعد مؤشر الـ mysql> ) ، سيتم استعراض قواعد البيانات في السيرفر الذي قمنا بالاتصال به ، وفي حالة عدم وجود أي قاعدة بيانات قمت باعدادها من قبل ، فان من الطبيعي أن تجد قاعدتي بيانات موجودة بشكل تلقائي عند تثبيت السيرفر Mysql ، وتلك القاعدتان هي test – mysql .

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

بعد استعراض قواعد البيانات بالأمر السابق ، سنقوم بانشاء قاعدة بيانات باسم PHP ، ولعمل ذلك قم بكتابة الأمر التالي :

Code ..


create data**** PHP;






لو قمنا بكتابة الأمر السابق ( show data**** ) سنرى أن قواعد البيانات أصبحت 3 باضافة القاعدة PHP الى القاعدتين mysql – test ، ولاستخدام اي منها نقوم بكتابة الأمر التالي في مثالنا مع القاعدة PHP :

Code ..


use PHP;






وهذه يعني الدخول في قاعدة البيانات PHP واستخدام المؤشر ( mysql> ) لكتابة الأوامر المتعلقة بالتعامل مع قاعدة بيانات بعينها .




create tables

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

Code ..


create table users (
id Int not null auto_increment Primary Key,
name **** not null,
counter int
);






شرح المثال :
- قمنا بكتابة ( create table users ) وهذا يعني انشاء جدول باسم users .
- القوس ) يعني بداية تسمية حقول الجدول وخصائص تلك الحقول .
- السطر الأول من اسماء الحقول هو ( id ) والرمز ( int ) يعني وصف نوع البيانات التي ستخزن في الـحقل ( id ) ، وهي في هذه الحالة تعني نوع البيانات الرقمية ، اما الرمز ( not null ) فيعني عدم امكانية أن يكون هذا الحقل فـارغاً ، بل يجب أن يحتوي على قيمة ، والـ ( auto_increment ) يجعل الحقل يحتوي على قيم متسلسلة يستحيل تكرارها ، وسيبدأ من الرقم 1 ويبدأ بالزيادة بمقدار واحد في كل مرة يتم ادخال صف جديد الى هذا الجدول ، وفي النهاية الرمز ( Primary Key ) يعني أن الحقل هو المفتاح الرئيسي لهذا الجدول أو بمعني أنه سيتم التفريق بين صفوف الجدول اعتماداً على هذا الحقل ولهذا وضعنا ( auto_increment ) لضمان عدم اختلاط البيانات .
- السطر الثاني يحتوي على اسم الحقل ( name ) ونوع البيانات ( **** ) أي نصي ، ونفس الرمز السابق الذي ذكرناه وهو ( not null ) .
- السطر الثالث يحتوي على اسم الحقل ( counter ) ونوع البيانات ( int ) ، ولاحظ أننا لم نذكر ( not null ) وبالتالي يمكن أن يكون هذا الحقل فارغاً لا يحتوي على أي قيمة ، ولن يكون هناك أي تعارض أو مشكلة بعكس الحقلين السابقتين .
- في السطر قبل الأخير ، أي قبل علامة الاغلاق ( ، سيكون بدون فاصلة .
- السطر الأخير يحتوي على اقفال عملية انشاء الجدول بالعلامة ); .

عموماً هذا المثال يعطي نبذة بسيطة عن كيفية اجراء مثل هذه الاوامر ، وسنتطرق الى بقية الأوامر في الأسطر القليلة القادمة .



show - describe - insert

يمكنك استعراض الجداول الموجودة في قاعدة بيانات عن طريق الأمر :

Code ..


show tables;






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

يمكن كذلك استعراض خصائص الجدول السابق users الذي قمنا بانشاءه في المثال السابق ، عن طريق الأمر التالي :

Code ..


describe users;






سترى أن حقول الجدول وخصائص كل جدول ظهرت لك بشكل واضح .

- التعامل مع بيانات الجداول :
بقي أن نذكر الطرق التي يمكن من خلالها ادخال البيانات الى الجدول users ، بل وكيفية التعامل مع تلك البيانات بالتعديل والحذف وغير ذلك ، وكما قلنا سابقاً أن هذه الاساسيات مفيدة جداً في البرمجة بلغة الـ PHP ، بل إن فهم هذه الطرق هو المفتاح الاساسي للتعامل مع قواعد البيانات عن طريق البي اتش بي ،

عموماً أول تلك الأوامر هو اضافة صف جديد الى الجدول ، وهذا ما يبينه المثال التالي :

Code ..


insert into users set
name = “Ahmad”;
counter = 3
;






مع ملاحظة أن users هو اسم الجدول ، name اسم الحقل ( العمود ) الأول ، counter اسم الحقل ( العمود ) الثاني ، كما تلاحظ أن الحقل id لم نتطرق له ، لاننا في اعدادنا للجدول ذكرنا أن الحقل id ( auto_increment ) أي ستضاف اليه القيم بشكل تلقائي وبشكل منظم ، كما قلنا في كل مرة يزيد العداد بقيمة 1 ، و بطبعية الحال يمكنك القياس على هذا المثال باستبدال ما يجب استبداله من اسم الجدول ( users ) واسماء الحقول ( name – counter ) وكذلك البيانات بما يناسب الذي تريد القيام به .

walid_8281500
03-19-2009, 08:45 PM
select

هذا بالنسبة لاضافة بيانات جديدة الى جدول معين ، اما بالنسبة لاستعراض البيانات في الجدول فكما يلي :

Code ..


select * from users;






ومعني select ( اختر ) ، ولذلك ستجد أن جميع البيانات التي في الجدول users قد تم سردها ، واذا كنت ملتزماً بالمثال السابق حرفياً فستجد أن البيانات التي اضفناها في المثال السابق ظهرت على شكل صف من صفوف الجدول ، وبالتالي كلما اضفت صفاً جديداً الى الجدول وقمت باستعراض البيانات تجد أن بياناتك قد تم تخزينها ، وينطبق الكلام السابق حول الاستبدال هنا ايضا ، فيمكن استبدال اسم الجدول users باي اسم لجدول في قاعدة البيانات المستخدمة ، وللتاكد من اسماء الجداول قم باستخدام الطريقة السابق ذكرها وهي ( show tables ) .

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

فلفترض أن الجدول السابق يحتوي على أكثر من صف من البيانات بالشكل التالي :

اما البيانات التي نود جلبها فهي كما يلي لكل نقطة على حدة :
1- بيانات الاعضاء الذين ليس لهم أي موضوع .
2- بيانات الاعضاء الذين لهم مواضيع أكثر من 5 مرتبين من الاكثر الى الاقل .
3- بيانات العضو Ahmed .
4- بيانات جميع الاعضاء مرتبين حسب الاسم .
5- بيانات العضو الأكثر مواضيعاً .

سنأخذ كل حالة على حدة ، أما الحالة الأولى فيمكن التعامل معها كما يلي :
Code ..


select * from users where counter=0;





الزيـادة التي قمنا بوضعها هي ( where counter=0 ) أي بحيث أن الحقل ( counter ) يساوي صفر ، وبالتالي سيتم اهمال أي صف من البيانات التي لا يحتوي الحقل ( counter ) فيها على القيمة صفر ، وسيتم جلب البيانات التي يحتوي هذا الحقل فيها على صفر .


أمثلة على select

الحالة الثانية :
Code ..


select * from users where counter >= 5 order by counter;





في هذا المثال اضفنا الشرط ( where counter >= 5 ) وهو واضح كما في المثال السابق ولكن تم تغيير الشرط لا اقل ولا اكثر ، اما الاضافة الأخرى فهي طريقة الترتيب وهي ( order by counter ) وتعني ( قم بترتيب البيانات المختارة بحسب الحقل counter ) ، وهناك طريقة أخرى للتحكم في الترتيب اما تصاعدي أو تنازلي وذلك باضافة كلمة asc ليكون الترتيب تنازلياً كما هو الحال في المثال السابق ، فسواء ذكرت ذلك أو سيتم اعتبارها تنازلياً بشكل تلقائي ، اما الاهم فهو طريقة الترتيب التصاعدي من الاقل الى الاكبر ويتم ذلك عن طريق كتابة الكلمة desc بعد الترتيب مباشرة لتصبح كما يلي :

Code ..


select * from users where counter >= 5 order by counter desc;






الحالة الثالثة :

Code ..


select * from users where name = “Ahmed”;






لاحظ أن الفرق الوحيد هنا هو استخدام علامات التنصيص ، لان نوع البيانات نصية .

الحالة الرابعة :

Code ..


select * from users order by name;






وقد أوردت هذا المثال لبيان أنه يمكن استخدام أحد الخيارات لجلب البيانات وترك باقي الخيارات ، فيمكن كما في المثال استخدام خيار الترتيب ( order ) وعدم استخدام الخيارات الباقية ( where – limit ) ، اما الخيار where فقد تطرقنا لنا سابقاً وتعرفنا على فائدته ، والخيـار الأخر limit هي ما سيتم التطرق اليه في المثال التالي الخاص بالحالة الخامسة :

الحالة الخامسة :

Code ..


select * from users order by counter limit 1;






والـ limit تعني عدد الصفوف المختارة ، أي لو قمنا بكتابة المثال السابق بدون الـ limit ستجد أن جميع البيانات سيتم اختيارها ، ولكن باستخدام الـ limit نقوم بتحديد عدد الصفوف التي سيتم اختيارها استناداً على طريقة ترتيبنا للبيانات ، فكما تلاحظ قمنا بترتيب البيانات بحسب الحقل counter ولم نذكر ( desc ) ولذلك فالبيانات يتم ترتيبها من الاكبر الى الاصغر ، وبالتالي فاختيارنا للحقل الأول يقضي باختيار بيانات الشخص الأكثر كتابة للمواضيع .


delete - update

بقي أن نذكر طريقي التعديل والحذف ليكتمل الدرس ، وسنبدأ بطريقة التعديل على البيانات الموجودة في الجدول users من قاعدة البيانات PHP ، والمثال التالي يوضح الطريقة التي سيتم شرحها بعد المثال :

Code ..


update users set
name = “Naser”,
counter = 30
where name=”Ahmad”;






الجملة update تعني تحدبث أو ( قم بتحديث ) ، والـ users هو اسم الجدول الذي نعمل عليه ، وفي السطر الثاني قمنا باسناد القيمة Naser الى الحقل name ، والسطر الذي يليه قمنا باسناد القيمة 30 الى الحقل counter ، ولكن لو توقفنا هنا بدون ذكر الصف الذي سيتم التعديل عليه ، سيتم تعديل كافة الصفوف في الجدول مهما كان عددها ، ولذلك كتبنا في النهاية where name=”Ahmad” ، بمعنى أن التغيرات السابقة ستحدث فقط على الصف من البيانات التي يحتوي فيها الحقل name على القيمة Ahmad .

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

Code ..


delete from users;






الأمر السابق كفيل بالغاء جميع الصفوف في الجدول users كما هو واضح ، ولذلك كن متأكداً من أن التجارب التي تقوم بها هي على بيانات غير هامة .

Code ..


delete from users
where id = 1 ;






وهذا الحذف سيتم على الصف الذي يتحقق عليه الشرط ، وفي هذه الحالة على الصف من البيانات التي يحتوي فيها الحقل id على القيمة 1 .

walid_8281500
03-19-2009, 08:46 PM
دوال قواعد البيانات Mysql: -



دوال قواعد البيانات Mysql
لاهمية موضوع قواعد البيانات ، سوف نقوم في هذه الدورة بتغطية دوال قواعد البيانات وهي اثنتان وثلاثون دالة فإلى الدرس الأول :

1- الدالة mysql_connect :

Code ..


integer mysql_connect(string host, string username,
string password);






تقوم هذه الدالة بالاتصال مع قاعدة البيانات وتعيد لك رقم يفيدك اذا كان لديك أكثر من اتصال بقواعد البيانات ، احتفظ به لاستخدامه في دوال أخرى تالية اذا كان هناك حاجة لذلك كما قلنا ، اما الوضع الطبيعي فلا يحتاج الا الى الاتصال بالطريقة السابقة فقط وبدون الاحتفاظ بأي رقم ، فقط مرر للدالة اسم الخادم واسم المستخدم وكلمة المرور ، ولكن يتوجب عليك بعد الانتهاء أن تغلق الاتصال باستخدام الدالة mysql_close
مثال :

Code ..


<?
$link = mysql_connect("db.azzozhsn.f2s.com","mag","Pass");
?>






2- الدالة mysql_pconnect :

Code ..


integer mysql_pconnect(string host, string username,
strin password);






هذه الدالة تقوم بما تقوم به الدلة السابقة إلا أنه لا يتوجب عليك إغلاق الاتصال ، مثال:

Code ..


<?
$link = mysql_pconnect("db.azzozhsn.f2s.com","mag","Pass") ;
?>






3- الدالة mysql_select_db :

Code ..


boolean mysql_select_db(string data****, integer link);






تقوم هذه الدالة باختيار قاعد البيانات المحدد لها. مثال:

Code ..


<?
mysql_select_db(string data****, integer link);
?>


mysql_db_query - mysql_close ..

4- الدالة mysql_db_query :

Code ..


boolean mysql_db_query(string data****, string query,
integer link);






تقوم هذه الدالة بتنفيذ سطر SQL على قاعدة البيانات المفتوحة بالمعطى data**** مثال:

Code ..


<?
$link = mysql_connect("db.azzozhsn.f2s.com","mag","Pass");
$Query = "DELETE FROM magazine";
$result = mysql_db_query("mag", $Query, $link);
?>






5- الدالة mysql_close :

Code ..


boolean mysql_close(integer link);






تقوم هذه الدالة بقطع ( إغلاق) قاعدة البيانات ، مرر لها رقم الاتصال المعاد من الدالة mysql_connect
مثال:

Code ..


<?
// الاتصال بقاعدة البيانات ..
$link = mysql_connect("localhost","mag","Pass");
// اغلاق الاتصال بقاعدة البيانات ..
mysql_close($link);
?>






6- الدالة mysql_query:

Code ..


integer = mysql_query(string query, integer link);






تقوم هذه الدالة بما تقوم به الدالة mysql_db_query تقريباً إلا أن الدالة mysql_query يقتصر عملها على قاعدة البيانات المحددة بالدالة mysql_select_db .
في حالة عدم تمرير رقم الاتصال فستعمل الدالة على الاتصال الأخير.
مثال:

Code ..


<?
$link = mysql_connect("localhost","mag","Pass");
$query = "DELETE FROM magazine";
$result = mysql_query($query, $link);
?>



mysql_errno - mysql_error

7- الدالة mysql_errno :

Code ..


integer mysql_errno(integer link);






تقوم هذه الدالة بإعادة رقم آخر خطأ حدث في التعامل مع قاعدة البيانات.
8- الدالة mysql_error :

Code ..


string mysql_error(integer link);






تعيد هذه الدالة رسالة الخطأ الحاصل في قاعدة البيانات

walid_8281500
03-19-2009, 08:48 PM
التعليقات : -


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

ولكي نتمكن من إضافة تعليق لمعرفة ما هي وظيفة البرنامج مثلاً ، أو كملاحظات في البرنامج بحيث لا يدير لها البرنامج بالاً ولا يقوم بترجمتها ، يمكن إضافة تعليقات في سطر واحد أو تعليقات في عدة أسطر ، بالطريقة التالية :

- لكي نضيف تعليق من سطر واحد نستخدم :
Code ..


// هنا التعليق في سطر واحد






- ولإضافة تعليق من عدة أسطر نستخدم :
Code ..


/*
التعليق الأول
التعليق الثاني
....
*/






وكمثـال على ذلك :
Code ..


<?
// التعليق هنا
echo "البرنامج الأول";
?>






سوف يتم طباعة جملة ( البرنامج الأول ) بدون الاهتمام بالتعليق .

مثال آخر على النوع الثاني من التعليقات :
Code ..


<?
/*
هنا
أسطر
التعليقات
*/
echo "البرنامج الثاني";
?>






وهنا سوف يتم طباعة جملة ( البرنامج الثاني ) بدون الاهتمام بالتعليقات .

walid_8281500
03-19-2009, 08:48 PM
الشروط وحلقات التكرار : -


الشروط وحلقات التكرار
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين ، سيتم التطرق في هذا الدرس بمشيئة الله الى ما يلي :

- عبـاراة الـ if .
- عبـاراة الـ else .
- عبـاراة الـ elseif .
- عبـاراة الـ switch .
- حلقة التكرار while .
- حلقة التكرار for .
- حلقة التكرار do while .

- عبـاراة الـ if :
استخدام الـ if في كتابة السكربات شي أساسي ، وكما في لغات البرمجة الأخرى فإن الـ PHP تتبع نفس الاسلوب في كتابة الـ if ، فيمكن تحديد شرط معين مقترن بالـ if وبالتالي اذا كان الشرط صحيحاً ( true ) فسيتم تنفيذ الاسطر المحددة ، وبتفصيل أكثر يجب وضع الشرط بين قوسين ( ) ، ووضع الاسطر المطلوب تنفيذها بين العلامـات { } ، مع ملاحظة أنه يمكن التخلي عن العلامات { } في حال وجود سطر واحد فقط .

فلنفترض وجود نموذج بريدي ( Mail Fourm ) ، يحتوي على الإسم والبريد والرسالة ، ونرغب في معرفة ما اذا كان المرسل قد ملأ جميع الحقول وبالتالي إرسـال الرسـالة ، او انه لم بفعل ذلك وبالتالي عرض رسـالة ( فضلاً قم بتعبئة البيـانات كاملة ) ، لعمل ذلك نحتاج معرفة أسمـاء المتغيرات في النموذج ، ولذلك فلنفترض أن المتغيرات كالتالي :
( الإسم name$ ) ، ( البريد email$ ) ، ( الرسـالة later$ ) ، ولعمل الشرط الأول ( اذا كان الإسم لم يُدخل فلن يتم ارسـال الرسـالة ) :
Code ..


<?
if ( $name == "" )
echo "فضلاً قم بتعبئة البيـانات كاملة ";
?>





والمعنى أنه إذا كان المتغير name$ لا يحتوي على أي قيمة ( أي فراغ ) فسيتم تنفيذ السطر التالي وطبـاعة الجملة ، مع ملاحظة أن المطلوب تنفيذه هم سطر واحد فقط ولذلك لم نستخدم { } ، بل في حالة وجود أكثر من سطر يجب استخدامها كالتالي :

Code ..


<?
if ( $name == "" ) {
echo "فضلاً قم بتعبئة البيـانات كاملة<br> ";
echo "لم تقم بإدخـال الإسم ";
}
?>



else

- عبـاراة الـ else :
هذه العبـارة تتيح امكانية وجود اجراء ثاني لعدم تحقق الشرط ، ففي مثالنا السابق كان الاجراء طباعة الجملة اذا تحقق الشرط ، ولكن في حالة عدم تحقق الشرط فلن يكون هناك اجراء لتنفيذه ، بل ان الاجراء سيتم تنفيذه اذا تحقق الشرط ومن ثم سيتم اكمال بقية الاسطر ، وفي حالة مثل هذه الحالة يتم استخدام الـ else لوضع اجراء آخر في حالة عدم تحقق الشرط ، وبالمثال يتضح المقال :
Code ..


<?
if ( $name == "" ) {
echo "فضلاً قم بتعبئة البيـانات كاملة";
}
else
{
echo "تم ارسـال الرسـالة ، شكرا لك";
}
?>





في هذا المثال سيتم طباعة الجملة (فضلاً قم بتعبئة البيـانات كاملة ) اذا تحقق الشرط أن المتغير name$ لا يحتوي على أي قيمة ، وسيتم طباعة الجملة (تم ارسـال الرسـالة ، شكرا لك ) في حالة عدم تحقق الشرط ، أي في حالة وجود قيمة في المتغير name$ ، مع ملاحظة أن هذا المثال يحتوي على شرطين وليس شرط واحد ، فالظاهر هو شرط واحد ( "" == name$ ) ولكن العبـارة else تعتبر شرطاً بحد ذاتها ولو لم يكن هذا الشرط مكتوباً ، وكما هو واضح فمعنى هذا الشرط هو ( إذا كان غير ذلك ) فقم بطباعة الجملة .

يمكن أن يكون الشرح غير واضح تماماً ، ولكن أهمية فهم الطريقة ستتضح في الأسطر القليلة القادمة .



elseif

- عبـاراة الـ elseif :
في العبارة السابقة ذكرنا أنه يوجد شرطين واجرائين ، أحد هذين الشرطين غير مكتوب بل هو مفهوم من ادراج العبـارة else ، وفي حالات كثيرة لا يكفينا مجرد شرطين واجرائين لاتمام بعض السكربات المعقدة ، فلذلك يمكن نستخدم العبـارة elseif مع الـ if لعمل مثل هذه السكربات ، فلو افترضنا أن لدينا عداد لزوار الموقع ونريد اظاهر العداد بحيث يتم قراءته بشكل جيد ، اي بمعني اخر اذا كان عدد الزوار ( 1 ) فسيتم طباعة الجملة ( عدد الزوار : زائر واحد فقط ) واذا كان ( 2 ) فسيتم طباعة الجملة ( عدد الزوار : زائرين ) ... وقس على ذلك ، فعندما يكون عدد الزوار ( 1 ) فسيتم عرض الجملة الأولى فقط وعندما يكون عدد الزوار ( 2 ) فسيتم عرض الجملة الثانية فقط ، وهكذا لبقية الشروط .

بافتراض أن المتغير ( counter$ ) هو عداد الزوار ، فالمثال التالي يبين ما تم شرحه سابقاً :
Code ..


<?
if ( $counter == 1 ) {
echo " عدد الزوار : زائر واحد فقط ";
}
elseif ( $counter == 2 ) {
echo " عدد الزوار : زائرين ";
}
elseif ( $counter >= 3 && $counter <= 10 ) {
echo "عدد الزوار : $counter زوار";
}
else {
echo "عدد الزوار : $counter زائر";
}
?>





كما هو واضح في المثـال السابق سيتم ما يلي :

الشرط : العداد يساوي 1
الإجراء : طبـاعة ( عدد الزوار : زائر واحد فقط )
الشرط : العداد يساوي 2
الإجراء : طبـاعة ( عدد الزوار : زائرين )
الشرط : العداد أكبر أو يساوي 3 و اصغر أو يسـاوي 10
الإجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )
الشرط : العداد لا يحقق أي من الشروط
الإجراء : طبـاعة ( عدد الزوار : ( العداد ) زائر )

ملاحظة بسيطة فقط ، وهي على العلامة && التي تعني ( و ) ، وهي من علامات الجمع بين جملتين ، فيجب أن تكون الجملتين صحيحتين لتحقق الشرط .



switch

- عبـاراة الـ switch :
هذه العبـارة قريبة جداً من العبـارة if ، ولكن يمكن استخدام اكثر من شرطرين باسلوب أخر ، غير انه يجب اسناد قيمة معينة للـ case وهي هنا بمثابة الشرط ، لكي يتم تنفيذ الاجراء المحدد لذلك الشرط أو الـ case ، وفي النهاية الأمر يعود الى المصمم وايهما يفضل ، وكما في المثال السابق يمكن كتابة مثال بالـ switch بنفس الطريقة ، والمشكلة الوحيدة هي كما قلنا أنه يجب اسناد قيمة معينة لكل case وبالتالي فإن الشرط الثالث من المثال السابق يجب تفريقه لكل قيمة من ( 3 الى 10 ) ، وهذه العميلة مجهدة لانه يجب كتابة سطر لكل قيمة كما يلي :

القيمة : 3
الـ case : 3
الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )
القيمة : 4
الـ case : 4
الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )
القيمة : 5
الـ case : 5
الاجراء : طبـاعة ( عدد الزوار : ( العداد ) زوار )
......... الخ ...

وفي المثال التالي ساتغاضى عن الشرط الثالث بكامله ، واذكر بقية الشروط والحالات لمجرد فهم طريقة عمل هذه العبـارة :
Code ..


<?
switch ($counter)
{
case "1";
echo " عدد الزوار : زائر واحد فقط ";
break;
case "2";
echo " عدد الزوار : زائرين ";
break;
default;
echo "عدد الزوار : $counter زائر";
break;
}
?>






استخدمنا في هذه المثال بعض الجمل وتعني ما يلي :
Switch وتكتب في البداية مع ادراج اسم المتغير الذي سيتم عمل الشروط عليه .
Case أي في حالة ( .... ) ويكتب بجانبها الشرط .
Break وتعني ايقاف العملية والخروج من الشرط بعد تنفيذ أحد الإجراءات .
Default وهي تقابل العبـارة else أي بمعنى أنها لأي حالة لم يتم ذكرها في الشروط .



while

- حلقة التكرار while :
وهي ابسط حلقات التكرار على الأطلاق ، بحيث تاخذ شرط واحد فقط وتبني على تنفيذ ما بين علامات الشروط { } ، والفرق الوحيد بينها وبين الـ if هو انها ستقوم بتنفيذ الاجراءات طالما كان الشرط صحيحاً ، وهذا يعني احتمال تنفيذ الإجراء أكثر من مرة ، وهذ الدالة مفيدة في ادراج الحقول من الجدوال وغيرها من الاستخدامات ، بحيث لو افترضنا وجود جدول معين في قاعد بيانات ونريد ادراجه في صفحة PHP ، فسيكون من اهم خيارات الاستخدام هذه الدالة ، وباذن الله سيتم التطرق لقواعد البيانات في الدروس القادمة ، وفي الوقت الحالي ساذكر مثال بسيط على هذه الدالة لفهم طريقة استخدامها :
Code ..


<?
$total = 10;
while ( $total <= 50 )
{
echo "العدد أقل من 50<br>";
$total +=10;
}
?>





بتفكير بسيط يمكن معرفة أن الجملة ( العدد أقل من 50 ) سيتم طباعتها 5 مرات ، لان حلقة التكرار while قامت بتنفيذ الاجراء طالما أن الشرط صحيح ، وفي المرة الأولى كان المتغير ( total$ ) يساوي ( 10 ) والشرط صحيح لان الـ ( total$ ) فعلاً اصغر أو يساوي الـ ( 50 ) ، فتم تنفيذ ما بين علامات الشرط ، ومن ذلك زيادة متغير المجموع ( total$ ) بقيمة ( 10 ) ومن ثم الرجوع والمقارنة من جديد ، وفي هذه الحالة صار المتغير ( total$ ) يساوي ( 20 ) وأيضـاً الشرط صحيح وبالتالي الدخول مرة أخرى وتنفيذ الأجراء .... وهكذا حتى يتم الوصول الى أن قيمة الـ ( total$ ) يساوي ( 50 ) وبالتالي الشرط صحيح ، ومن ثم تصبح قيمة الـ ( total$ ) تساوي ( 60 ) وفي هذه الحالة يتم ايقاف تنفيذ الاجراءات لأن الشرط غير صحيح .



for - do while

- حلقة التكرار for :
يوجد طريقة أسهل للتعامل مع المثال السابق ، فاستخدام حلقة التكرار while كانت القيمة الابتدائية للمتغير ( total$ ) في سطر ، والشرط في سطر والزيـادة على المتغير في سطر أخر ، وبالتالي زيارة في عدد الأسطر عن ما يمكن استخدامه مع حلقة التكرار for ، فالمثـال التالي يبين طريقة أخرى لاستخدام مثـال الـ while بطريقة أسهل :
Code ..


<?
for ( $total = 10; $total <=50; $total +=10 )
{
echo "العدد أقل من 50<br>";
}
?>






وللتوضيح فان تركيب الـ for هو على الشكل التالي :
Code ..


for ( القيمة الأفتراضية; الشـرط; مقدار الزيـادة; )
{
الإجراء المطلوب تنفيذه
}






- حلقة التكرار do while :
وهي نسخة أخرى من الـ while والفرق الوحيد بينهما أن التأكد من الشرط وصحته من عدمها يتم بعد تنفيذ الاجراء وليس قبله كما في الـ while وكمثال عليها :

Code ..


<?
$total = 10;
do
{
echo "العدد أقل من 50<br>";
$total +=10;
}
while ( $total <= 50 );
?>

walid_8281500
03-19-2009, 08:49 PM
المتغيرات : -



المتغيرات
بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين ، بعد المقدمات السابقة والهامة في معرفة اساسيات اللغة يمكننا بداية كتابة البرامج بلغة البي اتش بي ، وبطبيعة الحال سنبدأ من اصغر الاساسيات واهمها في كتابة البرامج عموماً وهي المتغيرات .

المتغيرات في لغة الـ PHP تبدأ بعلامة الدولار ( $ ) ، ولاسناد قيمة لذلك المتغير نستخدم علامة المساواة ( = ) ، فرضا لدينا المتغير ( Name ) والقيمة ( Khaled ) فنكتب ما يلي :

Code ..


<?
$Name = "Khaled";
?>






هذا في حالة المتغيرات النصية ( **** ) ، وفي حالة المتغيرات الرقمية ( Numbers ) يمكن تعريف متغير ( Counter ) الذي يحمل القيمة ( 17 ) كالتالي :

Code ..


<?
$Counter = 17;
?>






الفرق الواضح في طريقة تعريف المتغيرين النصي والرقمي هو عدم وجود علامات التنصيص في تعريف المتغيرات الرقمية بينما يجب وضع علامات التنصيص في تعريف المتغيرات النصية .

نقاط هامة في تسمية المتغيرات :
- اسماء المتغيرات في كثير من لغات البرمجة لا تتعدى 255 حرف ( المقصود بها الخانات سواء كانت حروف أو ارقـام أو علامات اخرى ) ، و في لغة الـ PHP لا يوجد حدود على عدد الخانات في تسمية المتغيرات ، ولكن في الغالب لن تحتاج الى اكثر من 15 خانة لتسمية أي متغير ، لان المبالغة في تسمية المتغيرات تسبب مشاكل في تذكر المتغيرات وما تحتوية من قيم .

- بداية كل متغير يجب أن تبدأ بحرف ( يعني حرف هجائي ) أو علامة ( _ ) Underscore ، مع تجاهل علامة الـ $ لانها لا تحسب من اسم المتغير .

- يمكن أن يحتوي اسم المتغير على الحروف أو الارقام أو علامة ( _ ) فقط ، اما العلامات الأخرى مثل ( + , - , * , / ) أو الـ & لا يمكن كتابتها في اسم المتغير .

- المتغير ( Name$ ) يختلف عن المتغير ( name$ ) لاختلاف حالة حرف الـ N ، ولذلك يجب التاكد من اسم المتغيرات بدقة لتجنب حدوث مشاكل في الوصول الى متغير معين ، وبالتاكيد لو كان لديك اسلوب خاص في تسمية المتغيرات لسهولة الوصول اليها وتذكرها ستكون كتابة السكربات اسهل بكثير .

- يستحسن أن تكون اسماء المتغيرات دالة على معانيها ، بمعنى أنه لمتغير مثل عداد الزوار يستحسن أن يكون ( counter$ ) ، ولمتغير مثل اسم المستخدم ( user$ ) .. الخ .



التعامل مع المتغيرات

التعامل مع المتغيرات :
فائدة المتغيرات تكمن في طريقة استخدامها في كتابة السكربت ، وكما ذكرنا سابقاً أنه لطباعة متغير معين نستخدم امر الطباعة ( echo ) أو ( print ) كما يلي :

Code ..


<?
$name = "Naser";
echo $name;
?>






في البداية سيتم اسناد القيمة ( Naser ) الى المتغير ( name$ ) ، وفي السطر الثاني يتم طباعة المتغير ، أو بالاحرى القيمة المسندة الى المتغير .

انواع البيانات ( Data Types ) :
في الامثلة السابقة قمنا باسناد قيمتين عددية ونصية الى متغيرين ، وبينًا الفرق بينهما ، وفي لغة الـ PHP بشكل عام يوجد أكثر من هذين النوعين من البيانات ، ساشرح بعضاً منها الآن ، والبقية في الدروس القادمة :
- البيانات النصية ( String ) .
- البيانات العددية الصحيحة ( Integer ) .
- البيانات العددية الكسرية ( Double ) .
- المصفوفـات ( Array ) .
- الكـائنات ( Object ) .
- البيانات الغير معروفة ! .


البيانات النصية ( String )

البيانات النصية ( String ) :
هي البيانات التي تكون بين علامات التنصيص " " بغض النظر عن محتوهـا ، فيمكن أن تكون حروف أو اعداد أو رموز أو غيرها ، ومثال ذلك كما ذكرنا سابقاً :

Code ..


<?
$user = "Khaled";
$age = "13.5";
?>






التعامل مع البيانات النصية ( String ) :
لاضـافة المتغيرات التي تحتوي على بيانات نصية مع متغيرات من نفس النوع نحتاج الى عملية دمج بين المتغيرات ، ولعمل ذلك نكتب :

Code ..


<?
$total = $user . $age;
?>






في هذه الحالة سيتم اسناد القيمة Khaled13.5 الى المتغير ( total$ ) .
اذا اردنا وضع مسـافة بين المتغيرين نضيف متغير جديد يحتوي على المسـافة وهو ( space$ ) ثم نقوم بعملية الدمج كالتالي :

Code ..


<?
$space = " ";
$total = $user . $space . $age;
?>






وفي هذه الحالة سيتم وضع القيمة Khaled 13.5 في المتغير ( total$ ) ، وبطبيعة الحال يمكن استخدم المتغيرات النصية داخل متغيرات نصية أخرى ، حيث سيتم تعويض المتغير بقيمتة الأصلية .




البيانات العددية ( Numeric )

البيانات العددية ( Numeric ) :
وكما ذكرنا في التقسيم السابق أنها نوعين ( الاعداد الصحيحة Integer ) و ( الاعداد الكسرية Double ) ، وكمثال على النوعين :

Code ..


<?
$integer1 = 233;
$integer2 = -29;
$double1 = 5.27;
$double2 = -4.6;
?>






التعامل مع البيانات العددية ( Numeric ) :
العمليات الحسابية المشهورة ( + , - , * , / ) بالاضـافة الى باقي القسمة ( % ) عمليات شائعة جداً في التعامل مع المتغيرات العددية ، وبطبيعة الحال لن نحتاج الى ذكر أي مثال عن هذه العمليات ، وسنكتفي بذكر بعض النقاط الاساسية التي قل ما يخلو سكربت منها .

اول النقاط هي اضافة المتغير الى نفسه ، بمعنى تعريف عملية حسابية على متغير معين بحيث تخزن القيمة في نفس المتغير ، مثلا لو كان لديك عدد الزوار وتريد في كل مرة أن يزود عدد الزوار بـ 1 ، يمكنك كتابة ما يلي :

Code ..


<?
$counter = $counter + 1;
?>






بالتالي سيتم زيادة المتغير ( counter$ ) بـ 1 في كل مرة يتم فيها تنفيذ السكربت ، وبطريقة أخرى يمكن كتابة السطر السابق كالتالي :

Code ..


<?
$counter = $counter++;
?>






والـ ++ تعني زيادة قدررها ( 1 ) على قيمة المتغير الأصلية ، وكذلك الـ -- تعني طرح 1 من القيمة الأصلية .

وفي حالة الرغبة بزيادة أي عدد أخر ( غير الواحد ) على أي متغير باسلوب الطريقة الثانية يمكن كتابة ما يلي :

Code ..


<?
$counter +=4;
?>






وهذا يعني زيادة مقدارها 4 على قيمة المتغير الأصلية ، وبالسالب كذلك بنفس الأسلوب .




بعض الدوال الهامة

بعض الدوال الهامة في التعامل مع المتغيرات :
- isset : وهي دالة للتأكد من وجود متغير معين ، فمثلا :

Code ..


<?
echo isset($age);
?>






سيتم طباعة الرقم 1 اذا كان المتغير ( age$ ) موجوداً ( تم انشاءه مسباقاً ) ، والعكس اذا كان غير موجود سيتم طباعة الرقم 0 ، وهذه الدالة يتم استخدامها كثيراً في الشروط وهذا ما سنتطرق اليه لاحقاً .

- unset : هذه الدالة تعمل على مسح المتغير من الذاكرة كليأ ، فقط قم بعمل التالي :

Code ..


<?
unset($age);
?>






وفي هذه الحالة سيتم مسح المتغير ( age$ ) بشكل كامل .

- empty : وهذه الدالة معاكسة للدالة isset بحيث لو كتبنا ما يلي :

Code ..


<?
echo empty($age);
?>






سيتم طباعة الرقم 1 في حالة عدم وجود المتغير ( age$ ) أو أن قيمة المتغير تساوي 0 أو ( فراغ ) ، وفي حالة وجود المتغير ( age$ ) لن يتم طبـاعة أي شي .

walid_8281500
03-19-2009, 08:50 PM
مميزات لغة الـ PHP : -


مميزات لغة الـ PHP
تتميز لغة PHP بالكثير من الخصائص التي جعلتها الخيار الأمثل لمبرمجي الويب في العالم :

السهولة :

تعتبر لغة PHP من أسهل لغات البرمجة تعلما، فهي تريحك من جميع تعقيدات إدارة الذاكرة وتعقيدات معالجة النصوص الموجودة في C من جهة ، والكثير من الضعف الموجود في بينية وتصميم لغة البرمجة Perl من جهة أخرى .

تمتلك لغة PHP بنية وقواعدا ثابته وواضحة جدا، معظم قواعد اللغة مأخوذة من كل من C و **** و Perl لصنع لغة برمجة عالية السهولة والسلاسة دون فقدان أي من القوة في اللغة، يفيدك ذلك إذا كنت تعلم أي شيء عن لغات البرمجة الأخرى مثل Visual Basic أو C أو **** حيث ستجد دائما بأنك تفهم مواد الدورة بسرعة، وستكتشف كيف تقوم PHP بتسهيل أصعب الأمور وإذلال العقبات التي تواجه المبرمج حتى يتفرغ تماما للإبداع فقط ، كل ما تفكر به تستطيع تنفيذه بلغة PHP .

السرعة :

لغة PHP من اللغات المعروفة بسرعتها العالية في تنفيذ البرامج، وخاصة في الإصدارة الرابعة من المترجم ، حيث تمت كتابة مترجم PHP من الصفر ليعطي أداءا في منتهى الروعة، كما أن لغة PHP مصممة أصلا كنواة لمترجم ، بحيث يمكن أن تضع هذه النواة في عدة قوالب أو أغلفة لتعمل مع التقنيات المختلفة ، فيمكنك تشغيل مترجم PHP كبرنامج CGI مثلا ، ولكن الأفضل هو إمكانية تركيب مترجم PHP على مزود IIS في صورة وحدة إضافية تضاف إلى المزود عن طريق دوال ISAPI ، وتوجد نسخة أخرى منه تركب على مزود Apache أيضا في صورة وحدة خارجية ، وتوجد أيضا نسخة مخصصة للدمج مع شفرة مزود Apache بحيث تصبح جزءا من برنامج Apache نفسه ، وهي الطريقة الأكثر استخداما الآن في مزودات الويب التي تعمل على أنظمة UNIX وهي الطريقة التي تعطي أفضل أداء لمترجم PHP، حيث يصبح المترجم جزءا من المزود ، وبالتالي فإنه سيكون محملا في الذاكرة بانتظار صفحات PHP ليقوم بترجمتها وعرضها للزوار مباشرة دون التأخير الإضافي الذي تتطلبه برامج Perl/CGI مثلا حيث يجب أن يتم تشغيل مترجم Perl مع كل زيارة للصفحة لترجمة الصفحة ، ثم يتم إغلاق المترجم ، ثم استدعاءه مجددا عند الزيارة الثانية وهكذا ، وهذا يشكل فارقا كبيرا في المواقع ذات الضغط العالي بالذات، ويكون استخدام PHP حلا أفضل بكثير .


المزايا والتوافقية

المزايا :

يأتي مترجم PHP لوحده محملاً بعدد هائل من الدوال الجاهزة الاستخدام في جميع المجالات، من دوال المعالجة الرياضية والحسابية إلى دوال الوصول إلى قواعد البيانات ومزودات FTP ، توفر لك دوال PHP مثلا وصولا إلى مزودات البيانات MySQL و PostgreSQL و MS SQL و Oracle وغيرها من مزودات قواعد البيانات، وهنالك أيضا مجموعة من الدوال لمعالجة ملفات XML ، ودوال أخرى لإرسال واستقبال الملفات عن بعد باستخدام بروتوكول FTP ، وهنالك مجموعة من الدوال لمعالجة وإنتاج الصور ديناميكيا وملفات Flash ديناميكيا ، ناهيك عن جميع الدوال الخاصة بمعالجة النصوص والمصفوفات .

التوافقية :

كما قلنا سابقا، فعلى الرغم من أن هنالك الكثير من نسخ PHP التي يعمل كل منها في بيئة مختلفة، إلا أنها جميعا تشترك في النواة الأصلية التي تقوم بالمعالجة الحقيقة لملفات PHP لذا فإن جميع مترجمات PHP تتصرف بنفس الطريقة فيما يتعلق بتنفيذ السكريبتات، فإذا كان السكريبت الذي عملته يعمل على نظام Windows مع مزود IIS فيجب أن يعمل دون الحاجة لأية تغييرات عند نقله إلى مزود Apache ، بالطبع تظل بعض الأمور البسيطة جدا التي يوفرها بعض المزودات دون غيرها، ولكن جميع البرامج التي كتبتها منذ أن بدأت تعلمي للغة إلى الآن تعمل على جميع المزودات دون الحاجة لأي تغييرات ، إضافة إلى ذلك فإن التغييرات التي حدثت باللغة الأساسية من الإصدارة الثالثة إلى الرابعة قليلة جداً ، وأغلب التغييرات كانت في البنية التحتية للمترجم .


الحماية وقابلية التوسع

الحماية :

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

قابلية التوسع :

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


نظرة تاريخية

تاريخ PHP :

بدأت PHP كمكتبة من الدوال تضاف على لغة Perl لتسهل عمل برامج CGI بلغة Perl، وبعد أن تلقى Rasmus Lerdof بعض الاقتراحات بتحويلها إلى مترجم بسيط ، قام بعمل ذلك المترجم وطرحه على الإنترنت وسماه PHP أو Personal Home Pages أي الصفحات الشخصية، فقد كان عبارة عن نسخة مصغرة من Perl مع بعض الميزات الإضافية للويب ، ثم أضاف إليه دعما لنماذج HTML وسماه PHP2/FI ، فقام مجموعة من المبرمجين بالعمل على مترجم PHP وأضافوا إليه واجهة تطبيقات برمجية API لتسهيل عملية توسعته فأصبح لدينا PHP 3 ، بعد فترة من الزمن قامت شركة Zend للتقنيات بعمل مترجمها الخاص للغة والذي سمي zend أيضا ، وقد اتصف هذا المترجم بالسرعة العالية وقدراته المحسنة، وجمع مع مكتبات PHP الأخرى لتكوين نواة المترجم PHP، مترجم PHP الآن مقسم على قسمان: المترجم zend ويتم تطويره على مزودات CVS الموجودة في موقع zend والقسم الثاني يسمى PHP وهو عبارة عن المكتبات والدوال الأساسية التي تأتي مع البرنامج ، يقوم مترجم zend بقراءة الملفات ومعالجتها والتعامل مع المتغيرات وتنفيذ البرنامج وتوفير واجهة تطوير للتطبيقات API لتوسعة اللغة ، أما PHP فتحتوي الآن على مكتبات مكتوبة بلغة C ومتوافقة مع واجهة التطبيقات التي يوفرها مترجم zend ، وبالتالي يعمل القسمان معا لتكوين مترجم PHP ، وعندما تزور موقع PHP الرسمي وتحصل على مترجم PHP جاهزا أو تحصل على الشفرة البرمجية الخاصة بك ، فإنك تحصل على كل من مترجم zend ومكتبات PHP معا.
تطور PHP تطورا مفاجئا في الفترة الأخيرة ، وتشير إحصائيا Net Craft إلى أن مترجم PHP هو أكثر وحدات مزود Apache انتشارات على الإنترنت ، كما أن مترجم PHP مركب على حوالي مليوني مزود ويب على الإنترنت أو أكثر .

هنا الموقع الاصلي لهذه الغة http://www.php.net (http://www.php.net/)