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

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



walid_8281500
03-19-2009, 08:25 PM
السلام عليكم

قمت بوضع موضوعين سابقين وهم دروس الـــ php للمبتدئين وهو على الرابط التالي

http://www.traidnt.net/vb/showthread.php?t=125306

و دروس لـــ php المتقدمة وهي على الرابط التالي

http://www.traidnt.net/vb/showthread.php?t=125326

اما هذة الموسوعة فهي تنقسم الى قسمين وهما:

(دروس مساعدة)
و
(دروس عملية)

فنبدأ بسم الله في اول قسم وهو :

::::دروس مساعدة::::

انا جديد بـphpBB اريد فهم لوحة التحكم؟؟؟؟؟


مقدمة - إدارة المنتدى
عند الانتقال الى لوحة التحكم العربية ستظهر لك في الجانب الايسر من الصفحة عدة خيارات بينها خيارت رئيسية يندرج تحتها خيارات فرعية سنتناولها واحدة تلو الاخرى بالتفصيل الممل ..

1-إدارة المنتدى :
ويندرج تحتها ( إدارة - الصلاحيات - تهذيب ) .

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

1-2 الصلاحيات :
من هنا يتم تحديد صلاحيات كل ساحة على حدة عند الدخول لهذا القسم ستظهر امامك قائمة منسدلة بها كل الساحات التي توجد في منتداك اختر اسم الساحة ثم اضغط البحث عن ساحة .

عند الدخول للساحة سيظهر امامك جدول بة عدة عنواين وخيارات ساقوم اولاً بشرح عنواين الجدول :

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

الان شرح الخيارت اسفل كل موضوع وهي :

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

1-3 تهذيب :
من هذا القسم يمكنك حذف جميع المواضيع المكتوبة قبل عدد معين من الايام يمكن عمل ذلك لكل الساحات او في ساحة معينة


إدارة عامة

ويندرج تحتها ( إحفظ قاعدة البيانات - إعداد - بريد جماعي -استرجع قاعدة البيانات - وجوه ضاحكة - مانع الكلمات ) .

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

2-2 اعداد :
ومن هنا يتم التحكم بالاعدادات العامة للمنتدى هناك ملاحظة واحدة في هذا القسم اذا كنت تستخدم لوحة تحكم عربية فان تغير اللغة ادى الى سوء تعبير .. المهم في هذا القسم اعلم ان " ل ا"هي نعم و" نعم "هي لا ، في بعض النسخ فقط ..

2-3 بريد جماعي :
من هنا يتم ارسال بريد لكل اعضاء المنتدى .

2-4 إسترجاع قاعدة البيانات :
من هنا يمكنك اعادة المنتدى للحالة التي كان عليها عند نسخ قاعدة البيانات .

2-5 وجوه ضاحكة :
من هنا يتم التحكم بالابتسامات والوجوة التعبيرية فيمكنك تغير رمز الابتسامة ويمكنك اضافة ابتسامات جديدة .

2-6 مانع الكلمات :
من هنا يتم وضع الكلمات المحظور وتحديد كلمات بديلة لها فعند قيام عضو بكتابة كلمة محظورة يتم استبدالها بالكلمة البديلة .


إدارة المجموعات والتنسيق

ويندرج تحتها ( إدارة - الصلاحيات ) .

3-2 ادارة المجموعات :
من هنا يمكنك انشاء مجموعة لاي غرض كان وتعين مراقب للمجموعة .

3-2 الصلاحيات :
من هنا يتم اعطاء مجموعة كاملة صلاحيات في المنتدى .

إدارة التنسيق
ويندرج تحتها ( اضف - كون - تصدير - ادارة ) .

4-1 اضف :
من هنا يتم اضافة اي ستايل جديد بشرط رفع مجلد الستايل من خلال برنامج الاف تي بي الى مجلد تيمبلت الموجود في المنتدى .

4-2 كون :
من هنا يتم تكوين ستايل جديد .

4-3 تصدير :
من هنا يتم تصدير مواصفات الستايل المختار الى ملف خارجي .

4-4 إدارة :
من هنا يتم تعديل اوحذف اي ستايل موجود في مجلد التيمبليت .


إدارة المشتركين

ويندرج تحتها ( تحكم المنع - امنع اسماء - ادارة - الصلاحيات -مستويات ) .

5-1 تحكم المنع :
من هنا يتم منع الاشخاص من الاشتراك في المنتدى حسب الاسم او عنوان الاي بي او البريد الالكتروني .

5-2 امنع اسماء :
من هنا يتم منع عضو معين من المشاركة بمجرد وضع اسمه في قائمة الاسماء الممنوعة .

5-3 ادارة :
من هنا يتم ادارة والتحكم بالمشتركين عند الدخول على هذا القسم سيظهر امامك خيارين اذا كنت تعرف اسم المستخدم معرفة تامة اكتب اسمه في الحقل الفارغ واضغط"البحث عن مستخدم"اما اذا كنت لاتعرف كتابة اسمة بشكل صحيح اضغط"ابحث عن اسم مشترك"وتفتح لك نافذة من خلالها ابحث عن المشترك .

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

5-4 صلاحيات :
عند تحديد اسم المشترك ستنتقل الى صفحة تعرض اسماء الساحات لديك ويمكنك تعين المستخدم المقصود مشرف لاي ساحة تريدها .

ملحوظة : عند الدخول لهذا القسم ستجد قائمة منسدلة في الاعلى امامها "مستوى المستخدم"وهناك خيارين في القائمة هما إداري ومستخدم اذا اردت ان يكون المشرف مجرد مشرف على ساحة وليس له حق دخول لوحة التحكم اختر مستخدم اما اذا اخترت اداري اصبح العضو مدير عام ويمكنة دخول لوحة التحكم وله كل صلاحياتك انت لذا ضعه مستخدم وتوجه للساحة او الساحات التي تريد ان يشرف عليها واختر من امامها مشرف .

5-4 مستويات :
من هنا يتم تحديد مستويات الاعضاء بناء على عدد مشاركاتهم مثل عضو جديد , عضو نشيط وغيره .

ملاحظة : من هنا يمكنك اعطاء اي عضو مرتبة من نوع خاص وهو ماتحدثنا عنه في الخطوة 1-2 الصلاحيات .

walid_8281500
03-19-2009, 08:26 PM
PHP Expert Editor : -


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

1- يمكنك التعامل مع أكثر من نوع من الأنواع الشائعة والتي لها ارتباط مع الـ PHP , عندما تذهب إلى New , لديك 5 اخيارات و هي : ( Php in HTML - Php - HTML - Plain **** - XML ) ..

2- يهتم المحرر إهتماماً كبيراً بطريقة عرض الكود ، فمثلاً الـ function يعرضها بخط عريض و الارقام باللون الازرق , كما يمكنك التحكم في هذه الخصائص من تغير الالوان والخطوط وغيرها بالشكل المناسب .

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

4- يحتوي على مميزات أخرى التي تتوفر في أغلب المحرارت مثل البحث عن كلمة أو أكثر ، وترقيم الأسطر وميزة الإكمـال التلقائي ، وفتح اكثر من ملف في نفس اطار البرنامج وغيرها .

5- يحتوي على شكلين ( Styles ) يمكنك الانتقاء منهما , و ايضا هناك مكتبة اكواد كاملة تساعد في فهم بعض الأكواد ، كما يمكن الإستفادة منها مبـاشرة بادراجها في كودك البرمجي .

6- الميزة الجملية في المحرر هي وجود قائمة في الجهة اليمنى تحتوي على المتغيرات و الدوال و الكلاسات و عمليات الإدراج ( include - require ) الموجودة في الملف ، مقسمه بشكل جميل تحتوي على أرقـام الأسطر التي وردت فيها تلك المتغيرات أو الدوال ... أو الخ ..

هذه نبذه بسيطة عن المحرر PHP Expert Editor , أتمنى أن أكون وفقك في عرضها بشكل مناسب ..

لاقتناء نسخه من البرنامج

http://www.phpvillage.com/phpBB2/vie...ighlight=#2838

walid_8281500
03-19-2009, 08:28 PM
أسـاسيـات XML : -


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

Code ..


<?xml version="1.0"?>
<table>
<row id="1">
<name>Ahmed</name>
<age>27</age>
<email>screen_na1me@server.com</email>
</row>
<row id="2">
<name>Adel</name>
<age>22</age>
<email>screen_na2me@server.com</email>
</row>
</table>






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


فهم الـ XML

من المهم جدًا فهم أن XML صممت لتخزين و نقل البيانات و ليست لعرضها ، و إذا أردت عرض البيانات فعليك استعمال HTML ، و في العادة ملفات HTML تعرض و تخزن المعلومات لكن مع HTML سيمكن التركيز أكثر على أسلوب عرض هذه البيانات و تدع مسألة التخزين لل XML ، فإما أن تضع بيانات في ملفات XML مستقلة أو تكون مدمجة في ملفات HTML ك Data Islands بالعربي "جزر البيانات"، أيضا يمكن أن تنقل البيانات بين مختلف الأنظمة و ليس بالضرورة أن تكون متوافقة حيث وجود عدد كبير من قواعد البيانات لكل واحد منها طريقة مختلفة لتخزين البيانات، XML جنبت المبرمجون الكثير من الأعمال الإضافية بحيث تحول البيانات من مختلف أنماط التخزين إلى ملفات XML و بالتالي تختفي التعقيدات و يجعل البيانات قادرة على الاستعمال من مختلف أنواع البرامج، أيضًا يمكن استعمال XML لتشارك المعلومات بين الأجهزة المختلفة، كالأجهزة الموجود في الحواسب الشخصية .
XML سهلة جدًا للتعلم فهي واضحة و قواعدها سهلة، لهذا خلق برامج لمعالجة ملفات XML هو سهل أيضًا .
في نص XML الموجود أعلاه السطر الأول وظيفته تعريف نسخة XML المستعملة، السطر الثاني هو عبارة عن عنصر يمثل جذر الوثيقة و في مثالنا هذا العنصر شرح أن الوثيقة لجدول ، و بقية الأسطر هي عبارة عن عناصر متفرعة عن الجذر ، في هذه العناصر الفرعية توجد قواعد بسيطة لكتابها ، مثلا :

Code ..


<table> … </table>






و بخلاف HTML وسوم الXML لا حدود لها لكن من الضروري جدًا أن تقفل ، و كذالك فإن XML تتأثر بحالة الأحرف الصغيرة و الكبيرة، مثال : M ليست m، و الوسوم يجب أن تقفل بالتتابع ، مثلا :

Code ..


<table><row> … </row></table>







يعتبر خطأ إن كتبتها بهذا الشكل:

Code ..


<tabel><row> … </table></row>






و كل وثائق XML يحب أن تكتب على هذا النحو و بانتظام

Code ..


<table>
<row>
<elements> … </elements>
</row>
</table>






الترتيب هو العنصر الجذر ثم العنصر المتفرع و أخيرًا العنصر الطفل، و من مميزات XML "الخاصية" و تعطي المزيد من التفاصيل عن العناصر ، مثلا :

Code ..


<table type="MyISAM" >
<row primary="id">
<id type="int"> ... </id>
<name type="varchar"> ... </name>
</row>
</table>






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

Code ..


<row> Php Village </row>






لا تختلف عن :

Code ..


<row>Php Village </row>



ماذا احتـاج ؟

كما تلاحظ لا شيء خاص في XML ، لا يحتاج لسرفر خاص، آي برنامج لمعالجة النصوص يمكن له تحرير وثائق XML ، لكن عليك الإدراك أن عناصر XML لا تقبل بعض الرموز في وسومها ، كأن تبدأ برقم تحتوي على فراغ و تبدأ ب "XML"، و تجنب أن تتضمن الوسوم علامة "." أو "-" أو ":" و إستعمال العربية ممكن لكن قد تحصل على مشاكل أن صادفت جهاز لا يدعم العربية .
أغلب المتصفحات تدعم XML لكن بالأخص Internet Explorer 5 أو الأحدث يدعمها بشكل مذهل عبر إبرازها بشكل جذاب و سهل للتصفح ، لكن تذكر دائمًا أن XML لا تصلح لعرض البيانات، و إن أردت عرض بياناتها فاستعمل HTML بهذه الطريقة ، انشأ ملف HTML إلى جانب وثيقة XML في نفس المجلد، و إنسخ فيه هذه السطور :

Code ..


<html>
<xml id="info" src="data.xml"></xml>
<table border="1" datasrc="#info">
<tr>
<td><span datafld="name"></span></td>
<td><span datafld="age"></span></td>
<td><span datafld="email"></span></td>
</tr>
</table>
</html>






من خلال معرفتك بال HTML ستعرف ما يعنيه أغلب الوسوم الموجودة أعلاه ، لكن هناك بعض الإضافات التي ربما ستتعرف عليها للمرة الأولى ، في السطر الثاني قمت باستدعاء وثيقة XML المسماة "data.xml" و أعطيتها هوية مميزة هي info، لماذا؟ لأنه يمكن أن تستدعي أكثر من وثيقة واحدة و التمييز ضروري لاجتناب الفوضى ، بعد استدعاء الوثيقة قمت بإنشاء جدول و مخبرًا المتصفح أنني سأستعمل البيانات الموجودة في وثيقة XML هويتها هي info، و في الجدول و بين <td> و </td> طلبت من المتصفح عرض الحقول الموجودة في XML عبر كتابة إسم العناصر ، مثلا :

Code ..


XML
<table><row><element> data </elment></row></table>
HTML
<xml id="dat" src="file_patch"></xml>
<table datasrc="#dat">
<tr><td><spam datafld="element></spam></td></tr>
</table>






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


نقـاط هامة

يجب أن تعرف ما يلي :
- الـ XML لا تحتـاج الى مترجم .
- لكي تتمكن من إضـافة البيانات من قاعدة بيانات الى الـ XML نستخدم الدالة Fopen() .
- لاستخدام اللغة العربية مع الـ XML يجب أن الكود التـالي :

Code ..


<?xml version="1.0" encoding="windows-1256"?>
<row> قرية بي اتش بي </row>






- لعرض جميع البيـانات المخزنة في ملف XML نستخدم :

Code ..


<xml id="info" src="data.xml"></xml>
<table border="1" datasrc="#info">
<tr>
<td><span datafld="name"></span></td>
<td><span datafld="age"></span></td>
<td><span datafld="email"></span></td>
</tr>
</table>






- أما اذا أردت أن تعرض الصف الأول فقط :

Code ..


<xml id="info" src="data.xml"></xml>
<span id="info" datafld="name"></span>






- لاستخدام الـ XML مع الـ J.****** اليكم هذا المثـال :

Code ..


<html>
<head>
<****** type="****/**********">
function movenext()
{
x=info.recordset
if (x.absoluteposition < x.recordcount)
{
x.movenext()
}
}
function moveprevious()
{
x=info.recordset
if (x.absoluteposition > 1)
{
x.moveprevious()
}
}
</******>
</head>

<body>
<xml src="data.xml" id="info" async="false"></xml>

<p>
Name:
<span datasrc="#info" datafld="name"></span>
<br />Age:
<span datasrc="#info" datafld="age"></span>
<br />Email:
<span datasrc="#info" datafld="email"></span>
</p>
<p>
<input type="button" value="Previous"
onclick="moveprevious()" />
<input type="button" value="Next"
onclick="movenext()" />
</p>
</body>
</html>

walid_8281500
03-19-2009, 08:29 PM
8 خطوات لبرمجة أي برنامج : -


مقدمة
هذا الموضوع هو ملخص لهذا الموضوع :
Application Design and Coding Tips ، وقد أضفت بعض الإضافات .

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

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

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

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

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

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

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

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

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

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


الخطوات التالية

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

إبدأ البرمجة بملف الإعدادات الذي يسمى عادة config.php ، حيث تضع فيه المتغيرات اللازمة للبرنامج ، ثم بملف الاتصال بقاعدة البيانات db_connect ، وكذلك ملف الدخول إلى لوحة التحكم login.php ، وأذكر بأن هذه مجرد أمثلة ، وكل برنامج قد يحتاج إلى ملفات أخرى غير مذكورة هنا .

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

7) كن منظماً .
- اكتب قائمة بما يجب عليك فعله بالتفصيل ، هذا يساعدك على عدم نسيان مهمة ما، ويعينك على متابعة تنفيذ البرنامج .
- اكتب في كل ملف تاريخ آخر مرة قمت بتعديله .
- اختبر البرنامج بشكل دائم وبكل الاحتمالات ، وصحح الأخطاء التي تجدها .
- أطلب من الآخرين أن يختبروا البرنامج واكتب ملاحظاتهم .

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

walid_8281500
03-19-2009, 08:30 PM
::::دروس عملية::::

انشاء صورة لتأكيد التسجيل : -



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

اذا لم ترى ذلك من قبل او لم تفهم قصدي تفضل هنا .

بالتاكيد سالت نفسك كيف يتم تكوين هذه الصورة وهل هي صور متعددة موجودة اساسا بالموقع ؟

وكيف يتم تمييز الحروف التى تظهر على الصورة بينما تقوم انت بادخالها من لوحة المفاتيح ؟

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

في البداية سنقوم بعملية تكوين الصورة مع تحديد نوع الصورة
، ويكون ذلك كالتالي :
Code ..


<?php
/*ارسال الهيدر*/
Header("Content-Type: image/png");
?>





اذا اردت استخدام الامتداد jpg فقط غير png في الكود بالاعلى الى jpg ، وهكذا مع بقية انواع الصور .

الان تريد ان تعرف كيف سنقوم بتكوين الصورة ! ولكن مهلا في البداية يجب وضع كود السيشن او الجلسة كما يلي :
Code ..


<?php
/* بداية الجلسة.
*/
session_start();

/*سوف نقوم بتعريف هذا المتغير لاحقا.*/
$new_string;

/*تسجيل المتغير الخاص بالجلسة لكى نتمكن
من استخدامه بعد ذلك. */
session_register('new_string');
?>





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

الان نبدأ الكود الخاص بانشاء الصورة :
Code ..


<?php
/* انشاءالصورة*/
/*الرقم الاول هو عرض الصورة والرقم
الثانى هو الارتفاع*/
$im = ImageCreate(200, 40);
?>





الان وضعت المتغير im كرمز سوف اقوم باستخدامه للتعبير عن الصورة طوال الدرس ، وحددنا ابعاد الصورة باستخدام الدالة image create .

لكن هل هي صورة بلا الوان ! لا الان سوف نجعلها اكثر حيوية وحركة :
Code ..


<?php
/*نقوم بتعين لونين
مختلفين للاستخدام في الصورة */
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
?>





استخدمنا اللونين white و black ، ويمكن تغيير الالوان بتغيير قيم الارقام في الكود .

حالياً لدينا صورة im تحتوى على لونين white و black وابعادها 200×40 ، دعونا ننتقل لمرحلة اخرى وهي عمل الكود العشوائي للارقام والحروف التي ستظهر على الصورة باستخدام نظام md5 للتشفير ولكن لن نتطرق لكيفية عمل نظام التشفير لانه خارج الموضوع ، ستجد شرح الدالة في قسم الدوال .
Code ..


<?php
/*توليد الكود العشوائى.*/
srand((double)microtime()*1000000);

/*تشفير الكود وتحويله لارقام وحروف */
$string = md5(rand(0,9999));

/*الان نحدد ثلاث خيارات
المتغير – عدد الخانات التى يتم جلبها من المتغير – عدد
الحروف والارقام التي ستظهر وتضمن داخل المتغير الجديد
وهي هنا رقم 5.*/
$new_string = substr($string, 17, 5);
?>






الان تعالوا نعيد تنظيم الالوان والاكود داخل الصورة :
Code ..


<?php
/*fill image with
black*/
ImageFill($im, 0, 0, $black);
?>





قمنا بتلويين الصورة بالكامل باللون الاسود كلون خلفية للصورة .

الان اين سنكتب على الصورة ؟
هل نبدأ من المنتصف ام من اليسار ؟

ابعاد الصورة هي 200×40 ، اذاً احداثي الركن السفلي الايمن هو 200,40 ، لذلك علينا بتحديد المنتصف بشكل تقريبي ، النقطتين 80 و 10 مثلاً :
Code ..


<?php
ImageString($im, 5, 80, 10, $new_string, $white);
?>






اول متغير هو الصورة im ، الثاني هو حجم الخط يمكن استخدام اى رقم من 1 الى 5 ، 80 و 10 احداثي نقطة بداية الكتابه على الصورة ، الخامس هو الكود الذي قمنا بتشفيره وجلبة من دالة التشفير ، السادس هو لون خط الكتابه وهو هنا اللون الابيض .

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


<?php
/*الاعداد النهائي للصورة*/
ImagePNG($im, "verify.png");
ImageDestroy($im);
?>





اعطينا الصورة اسم verify.png ، فقط قمنا بتحويل كافة المعلومات التي قمنا بادخالها للمتغير im الى صورة وسميناها اسم جديد ، ثم استخدمنا دالة image destroy ، وهذه الخطوة فائدتها تحرير ذاكرة السرفر من البيانات المدخلة .

الان الكود النهائي بعد تجميع كل هذه الخطوات :
Code ..


<?php
/*ارسال الهيدر*/
Header("Content-Type: image/png");

/* بداية الجلسة. */
session_start();

/*سوف نقوم بتحديد المتغير لاحقا.*/
$new_string;

/*ربط المتغير. */
session_register('new_string');

/*كود تعريف صفحة اتش تى ام ال عادية .*/
echo "<html><head><title>v
erify</title></head>";
echo "<body>";
/* تجهيز الصورة*/
$im = ImageCreate(200, 40);

/*تحديد الوان الصورة*/
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);

/*انشاء الكود العشوائي.*/
srand((double)microtime()*1000000);

/*تشفير المتغير او الكود*/
$string = md5(rand(0,9999));

/*انشاء المتغير الجديد.*/
$new_string = substr($string, 17, 5);

/*تلوين خلفية
الصورة باللون الاسود*/
ImageFill($im, 0, 0, $black);

/*تحديد حجم الخط
واحداثي نقطة بدء الكتابه ولون الخط */
ImageString($im, 5, 80, 10, $new_string, $white);

/* اعداد الصورة النهائية لكى تكون جاهزة
للعرض في المتصفح*/
ImagePNG($im, "verify.png");
ImageDestroy($im);
?>


الجزء الثاني

الان كيف استخدم هذا كله ؟
او كيف اضمنه ضمن برنامج او صفحة او سكربت ؟

حسناً ..
1-قم بعمل ملف جديد بي اتش بي .
2-ضع في الملف الكود السابق كاملاً .
3-ضع كود النموذج التالي اسفل الكود السابق في نفس الملف :
Code ..


<?php
/*نقوم بتضمين الصورة
مثلها مثل أي صورة عادية.*/
echo "<img src=\"verify.png\">";
echo "<br><br>";
echo " من فضلك ادخل الكود الموجود في الصورة
ولاحظ حساسية الارقام والحروف من حيث كبيرة او
صغيرة ";
echo " <form action=\"formhandler.php\"
method=post>";
echo "<input name=\"random\"
type=\"****\" value=\"\">";
echo "<input
type=\"submit\">";
echo "</form>";
echo "</body>";
echo "</html>";
?>






الان نحتاج لملف اخر
وقد اسميناه في الكود بالاعلى formhandler.php

وضع الكود التالي في الملف الجديد
Code ..


<?php
/*بدء الجلسه التى قمنا
بعملها في الملف الاول*/
session_start();
$random = trim($random);

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

/*الان نقوم باستدعاء الممتغير نيو سترينج والذي
قمنا بتسجيله داخل الجلسه او السيشن في الصفحة السابقه
ويعود هنا بنفس قيمته ثم نقوم بمقارنتة بالمتغير راندوم
.*/
if ($new_string == $random){
echo "شكرا لك الكود الذي ادخلته صحيح
";
}
else{
echo "الكود خطأ فضلا ارجع للخلف واعد
المحاولة.";
}
?>


ملحوظة :
اذا ظهرت رساله خطأ :
Code ..


can`t open verify.png for writing





قم برفع اي صورة لديك في نفس مجلد السكربت واعد تسميتها الى نفس الاسم واجعل تصريحها 777

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


مقدمة
أضمن لك بعد هذا الدرس البسيط ألا تبحث بعد اليوم عن فورم مراسلة لموقعك وأن تقوم ببرمجته بنفسك http://traidnt.net/vb/images/smilies/cupidarrow.gif
لكن لا تبدأ بالقراءة وفي ذهنك إنك لن تفهم .. فقط ركز قليلاً وجرب .. وأحيطك علماً بأن سطور البرمجة التي تراها هنا ليست إلا html يمكنك عملها بالفرونت بيج .. ولن تحتاج إلا لحوالي ثلاثة أسطر فقط تكتبها بلغة php http://traidnt.net/vb/images/smilies/cupidarrow.gif ..

أولاً : سنتعرف على الملفات المستخدمة في السيكربت ووظيفة كل منها :
1- add.html : هذه الصفحة تحتوي على الحقول التي يقوم الزائر بتعبئتها .. وللتبسيط سنطلب من الزائر البيانات التالية ( عنوان الرسالة – نص الرسالة ) .. وستتعلم لاحقاً كيفية إضافة حقول إضافية .. لكن الأهم أن نفهم هذه الخطوة .
2- Send.php : وهذا الملف هو الذي سيقوم باستقبال البيانات التي كتبها الزائر وسيقوم بإرسالها على بريدك .


الملف add.html

الآن سنقوم بتصميم الصفحة الأولى add.html .. وسأختصر قدر الإمكان الأسطر البرمجية لكي تركز على فهم المطلوب .. يمكنك أن تستخدم الفرونت بيج لكن أنصحك أن تقوم باستخدام المفكرة مؤقتاً حتى تعرف وظيفة كل سطر تكتبه وتتعرف على أسماء المتغيرات وتحددها ... قم بفتح برنامج المفكرة واكتب التالي :
Code ..


<form method="post" action="send.php">
<input type="****" name="subject"> عنوان الرسالة : <br>
<input type="****" name="message"> الرسالة : <br>
<input type="submit" value="أرسل" >
</form>






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

1 - method : وهي طريقة إرسال البيانات .. إما Get أو Post ، والفرق بينهما بكل بساطة هو أن Get بعد أن يقوم الزائر بتعبئة الحقول وضغط الإرسال ستقوم بعرض عنوان الصفحة بعد علامة استفهام ؟ في شريط العنوان بالمتصفح ، وستظهر البيانات التي وضعها الزائر أيضا في شريط العناوين .... وأما Post فستقوم بإرسال المعلومات دون عرضها في شريط العناوين .. ونحن هنا بالطبع لانريد عرض البيانات في شريط العنوان .. لذلك أستخدمنا Post .
2 ‌- Action : ونحدد هنا إسم الملف الذي تتجه إليه البيانات التي يضعها الزائر بعد ضغطه للإرسال .. ليقوم ذلك الملف باستقبالها ومعالجتها بحسب ما فيه من أوامر .

- السطر الثاني طالبنا الزائر بإدخال قيمة باستخدام الأمر input .. وهذا الأمر يحتاج إلى :

1 ‌- Type : وهنا نحدد نوع الإدخال من قبل الزائر .. هل هو نص **** ? أو اختيار من متعدد كأزرار الراديو Radio ? أو مربعات إختيار يقوم الزائر بتحديدها أو تركها وهي ما تسمى بـالـ Checkbox ... وكما ترى بأننا هنا نريد من الزائر إدخال اسمه ، فبالتأكيد سنحدد نوع الإدخال على أنه **** .
2 ‌- Name : هنا سنضع اسم المتغير .. وهذا يعني بأن البيانات التي سيضعها الزائر في مثالنا الحالي ستحفظ في المتغير subject .

- السطر الثالث هو تكرار للسطر الثاني مع اختلاف اسم المتغير طبعاً .. وقد أعطيناه الاسم message هنا .. وطبعا الرسالة نوعها نصية **** .

- السطر الرابع هو إضافة زر الإرسال .. ونوعه Submit ، سيحمل الكلمة ( أرسل ) للدلالة على طبيعة عمله .

- الوسوم <br> هي أحد وسوم html ، ويستخدم لترك سطر فارغ ..

- في النهاية يجب إقفـال الفورم عن طريق الوسم </form> .


الملف send.php

الصفحة الثانية هي الصفحة send.php وهي التي ستقوم باستلام البيانات التي سيضعها الزائر للمتغيرين السابقين ( subject$ و message$ ) .

سنستخدم للقيام بعملية الإرسال الدالة ()mail .. وسأوضحها باختصار ..

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

ويتم كتابة الدالة بالشكل التالي :
Code ..


<?
Mail($to,$subject,$message)
?>






يعني تقوم بالإرسال للبريد to$ ، رسالة عنوانها subject$ وموضوعها message$ .. أعتقد واضحة ؟ http://traidnt.net/vb/images/smilies/cupidarrow.gif

لمزيد من المعلومات راجع قسم الدوال ، الدالة Mail .

طيب .. تتفقون معي بأن صاحب الموقع يريد من الزائر الإرسال لبريده .. بمعنى أن البريد المرسل إليه ثابت بعنوان واحد لايتغير .. إذاً ستكو قيمة المتغير $to هي قيمة ثابتة هذه القيمة هي بريد صاحب الموقع .. لنفرض أن هذه القيمة هي master@islamsun.com ، سنكتب السطر التالي :
Code ..


<?
$to="master@islamsun.com";
?>






هذا المتغير to$ قمنا بتعريفه للدالة ، وبقي متغيرين أو بارميترين لكي تعمل الدالة بشكل صحيح .. هما عنوان الرسالة والموضوع .. وهو ما قمنا به قبل قليل في فورم الـ HTML ، ذكرنا أن عنوان الرسالة سيضعه الزائر في الحقل الذي أسميناه بالمتغير subject$ والرسالة سيكتبها في الحقل الذي اسمه message$ .

هنا نكون قد انتهينا من توضيح جميع احتياجات الدالة ()mail لتقوم بالإرسال ولم يبقى سوى سطر واحد إضافى على السطر السابق .. وهو ما يلي :
Code ..


<?
Mail($to,$subject,$message);
?>






يعني أن الملف send.php كاملاً سيكون على الشكل :
Code ..


<?
$to="master@islamsun.com";
Mail($to,$subject,$message);
?>






لو قمت برفع الملفين على موقعك واختبرتهم ستجد بأن العملية ناجحة وتمت عملية الإرسال فعلاً .. وهذا هو الأساس في عمل فورم المراسلة بشكل بسيط ، لكن قد تحتاج لبعض الإضافات مثل :
1- إضافة أمر للتأكد من تعبئة الزائر للحقول حتى لايتم الإرسال للحقول إذا لم تحتوي على أي إدخالات .. وتستطيع عمل ذلك باستخدام جملة الشرك if .. else .
2- بعد الإرسال يتم طباعة عبارة ( شكرا لك .. لقد تم إرسال رسالتك ) .. وتستطيع القيام بذلك عن طريق إضافة السطر التالي لملف send.php :
Code ..


<?
Echo "شكرا لك .. لقد تم إرسال رسالتك";
?>






3- السماح باستخدام html .
4- تغيير مصدر الرسالة from .. حيث سيكون في المثال السابق nobody .
5- وضع الملف add.html في الفرونت بيج والتعديل عليه من ناحية الشكل والمظهر ليناسب ذوقك .

لم يبق إلا أن تتقن الطريقة بالتدرب على استخدام الفورم واستخدام الدالة ()mail ، وإضافة شيء جديد كل فترة وستجد أنك تتعلم بالتدريج كتابة php ، ومن يدري قد تكون بدايتك الفعلية لتعلم هذه اللغة ...

walid_8281500
03-19-2009, 08:33 PM
طريقة عمل سكريبت Upload بسيط !!:-


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

بعد هذه المقدمة أقول :
أننا سوف ننشئ ملفّين ، أحدهما هو ملف الكونفيق ( Config.php ) و الآخر هو ملف الأبلود ( Upload.php ).

ملف الكونفيق سيحتوي فقط على المسار الذي سنرفع ملفاتنا إليه ( بمعنى أنه سيكون سطر واحد فقط ، اذا استثنينا وسمي <? و ?> .. )

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

حالياً هذا شكل ملف الكونفيق :
Code ..


<?
$path = "C:\lahloob";
// اخترت رفع الملف إلى مجلد لهلوب في السي
?>






ملف الـ upload.php سيحتوي على ما يلي :
1 ) وسم بداية كود الـ PHP .
2) استدعاء ملف الكونفيق اللي يحتوي المسار
Code ..


<?
include "config.php";
?>





3) إدراج النموذج (الفورم) الخاص باستعراض الملفات لتحميلها و أيضاً نحتاج إلى زر خاص بالتحميل كما يلي :
Code ..


<?
echo "<form method=\"POST\"
action=\"$PHP_SELF?upload=uploading\"
enctype=\"multipart/form-data\">
<input type=file name=file size=30><br><br>
<button name=\"submit\" type=\"submit\">
تحميل</button></form>";
?>





طبعاً في هذا الجزء من الكود بعض الغوض ، لذا سأشرحه .
إستخدمنا المتغيّر PHP_SELF$ ، و هذا المتغيّر مبني داخل لغة PHP ووظيفته إرجـاع رابط السكريبت الحالي . إذن نحن في خانة الـ action سنقوم باسترجـاع الرابط الحالي الذي نعمل عليه ثم نضيف إليه upload=uploading؟ .
حيث أن upload و uploading متغيّرات عادية سأقوم بتعريفها لاحقاً .

لاحظوا إننا في هذا النموذج عرّفنا المتغيّرات التالية :
upload -- uploading -- file


الخطوات التـالية

4) الآن نصل إلى نقطة هامة و هي ما ذا يجب أن يفعل السكريبت بعد اختيار المستخدم للملف الذي يريد تحميله ، و ضغطه على زر "تحميل" ؟

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

لعمل ذلك سنحتاج الى وضع متغيّر بإسم result$ و نسند له عبارة "تم تحميل الملف بنجاح" ، دون أن نطبع هالرسالة .
Code ..


<?
$result = "تم تحميل الملف بنجاح !!";
?>






بعد ذلك نحاول رفع الملف ، إذا تم رفعه بنجاح ستبقى قيمة result$ كما هي ، وإذا كان مشكلة في عملية النسخ سنقوم بتغيير قيمة المتغير result$ لتكون : "لم تختر الملف بشكل صحيح" ، الدالّة التي سنستخدمها لرفع الملفات هي copy و سنضيف قبلها علامة @ لكي نتفادى رسائل التحذير ..

Code ..


<?
@copy($file, "$path/$file_name")
or $result ="لم تختر الملف بشكل صحيح";
?>






كما تلاحظون فدالة الـ copy تاخذ اسم الملف ، الذي عرفناه في النموذج العلوي -- و تاخذ أيضا مسار الملف .
file$ ---> قمنا بتعريفه في النموذج الأول .
path$---> مسار الملف ، و حددناه في الكونفيق .
file_name$ --> هذا المتغيّر يتم إنشاؤه بشكل تلقائي و يحمل اسم الملف الذي نريد نرفعه .

الآن نطبع قيمة result$ و هي إما نجاح عملية التحميل أو فشلها كما يلي :
Code ..


<?
echo "$result";
?>






5) نغلق الوسم الخاص بالسكريبت .

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

لعمل ذلك نحتاج إلى أداة الشرط switch ، نتأكد من خلالها أن المستخدم قد ضغط على زر التحميل ( يعني إن upload=uploading ) ، في هذه الحالة سنستخدم الخطوات المذكورة في الخطوة 4 ، عدا ذلك لا نستخدمها .

Code ..


<?
switch ($upload)
{
default:
// الآن استخدم الخطوات من 1 إلى 3
break; // و تجاهل أي خيار أو شرط آخر switch هذا لقطع الأمر

case "uploading": // upload=uploading يعني إذا
// نفذ الخطوة 4
break;
}
// الآن نستخدم الخطوة 5
?>

walid_8281500
03-19-2009, 08:34 PM
بنـاء لوحة تحكم بالـ Session :-


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

قبل أن أبدأ في شرج الطريقة ، فسافترض بعض الافتراضـات التي سـاقوم بشرح الطريقة بناءً عليها :

1- لدينا قــاعدة بيانات إسمها Loign تحتوي على جدول الأعضـاء authers ، وهذا الجدول يحتوي على حقلين ، الأول هو user وهو خاص باسم المستخدم والآخر هو password وهو بطبيعة الحال خاص بكلمة المرور ، وسنقوم باضافة اسم مستخدم وكلمة مرور مبدئيه وسافترض أن الاسم هو php وكلمة المرور هي 123 ، يمكنك انشاء هذا الجدول واضافة هذه البيانات اليه بسهولة باستخدم الكود التالي :
Code ..


CREATE TABLE authers (
id int(11) NOT NULL auto_increment,
user **** NOT NULL,
password **** NOT NULL,
email **** NOT NULL,
UNIQUE id (id)
);

INSERT INTO authers VALUES ( '1', 'php', '123', 'a@phpvillage.com');






2- اسماء الملفات التي سنستخدمها في هذا الدرس كالتالي :
- login.php لعرض النموذج أو الـ Fourm الخاص بادخال اسم المستخدم وكلمة المرور .
- edit.php لتعديل البيانات الخاصة بالعضو .

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

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


<table width=100% dir=rtl border=1 align=center>
<form method=post action=$PHP_SELF>
<tr><td colspan=2><font size=2>المستخدم</font></td></tr>
<tr><td colspan=2><input type=****box name=user size=13>
</td></tr>
<tr><td colspan=2><font size=2>كلمة المرور</font>
</td></tr>
<tr><td colspan=2><input type=password name=password size=13>
</td></tr>
<tr><td><input type=submit value="دخول">
</td></tr></form></table>






كما هو واضح في هذا النموذج فإن المستخدم مطالب بادخال اسم المستخدم وكلمة المرور ومن ثم الضغط على زر دخول لتنفيذ طلبه ، لكن ما هي الطريقة التي من خلالها يمكن التعامل مع هذا الطلب حسب ما نريد ؟

للاجابة على هذا السؤال نحتاج الى أمرين ، الأول هو معرفة ما هي حالة الشخص المتصفح ، هل قام بعملية تسجيل الدخول فنعرض له لوحة التحكم أم لم يقم بتسجيل الدخول فنعرض له النموذج ، وفي كلتا الحالين نحتاج أن نتعرف على متغير الحالة session variable الذي سنقوم بتسجيله في حالة دخول المستخدم باسم صحيح وبكلمة مرور صحيحة وبالتالي إذا تم تسجيل المتغير فإن لوحة التحكم ستظهر أما اذا لم يتم تسجيله فلن يتم ذلك وساشرح هذا بالتفصيل في هذا الدرس


كود الملف login.php

الكود الخاص بالملف login.php هو :
Code ..


<?
include("config.php");
if ($o == out) {
session_destroy("userid_");
}

echo "<table width=15% bordercolor=000000 dir=rtl border=1 align=center>";
if (!session_is_registered("userid_")) {
if (!$user2 and !$password2) {
echo "<form method=post action=$PHP_SELF>";
?>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>المستخدم</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=****box name=user2 size=15>
</td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>كلمة المرور</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=password name=password2 size=15> </td></tr>
<tr><td bordercolor=FFFFFF align=center><input type=submit value="دخول">
</td></tr></form></table>
<?
}
elseif ($user2 and $password2) {
$check_login_info = mysql_query("select * from authers where
user='$user2' and password='$password2'")
or die (mysql_error());
if (mysql_num_rows($check_login_info) > 0 ) {
$re = mysql_query("select * from authers where user='$user2'");
while ( $r = mysql_fetch_array($re))
{ $userid_ = $r["id"]; }
session_register("userid_");
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
else { echo "<tr><td height=100 bordercolor=FFFFFF align=center>
<font size=2 face=Tahoma>اسم المستخدم وكلمة المرور غير صحيحة</font>
</td></tr></table>"; }
}
}
elseif (session_is_registered("userid_")) {
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
?>






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

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


session.save_path = /tmp
session.save_path = c:\windows\temp






قم بتجربة السكربت مرة أخرى وستجد أن الرسـائل أختفت ! ، وما قمنا به ببسـاطة هو تغيير مجلد حفظ ملفات الجلسـات أو الـ Session الى مجلد موجود فعلاً ، يمكنك تغييره الى أي مجلد ترغب به


شرح الكود 1

حاليـاً كل شي جـاهز لمحـاولة الدخول بإسم المستخدم وكلمة المرور ، جرب أي أسم يخطر على بالك وأي كلمة مرور تخترعها ، ستجد أن النتيجة عدم الدخول الى لوحة التحكم ، بل كانت النتيجة هو ظهور رسـالة عدم السمـاح بالدخول ، قم بالعودة والدخول بإسم المستخدم الصحيح php وكلمة المرور الصحيحة 123 ستظهر لك لوحة التحكم ، وهنـا ساشرح الكود السابق بشي من التفصيل والمرور على أغلب الأسـطر .

1- البداية بكود تسجيل الخروج التالي :

Code ..


<?
if ($o == out) {
session_destroy("userid_");
}
?>





وهنا يتم التأكد من وجود المتغير $o إذا كان يسـاوي out فسيتم استدعاء الدالة session_destroy وهي تقوم بالغاء الجلسة المسندة اليها ، وهي في مثالنا userid_ ، ببسـاطة هذه الدالة تجعل كأن شيئا لم يحدث ولم يتم تسجيل الدخول من الأسـاس ، ويرجع النموذج الخاص بادخال اسم المستخدم وكلمة المرور بالظهور مجدداً ..
2- الكود التالي هو لعرض نموذج الإدخال :
Code ..


<?
echo "<table width=15% bordercolor=000000 dir=rtl border=1 align=center>";
if (!session_is_registered("userid_")) {
if (!$user2 and !$password2) {
echo "<form method=post action=$PHP_SELF>";
?>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>المستخدم</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=****box name=user2 size=15>
</td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<font face=Tahoma size=2>كلمة المرور</font></td></tr>
<tr><td colspan=2 bordercolor=FFFFFF align=center>
<input type=password name=password2 size=15> </td></tr>
<tr><td bordercolor=FFFFFF align=center><input type=submit value="دخول">
</td></tr></form></table>
<?
}
?>





والمهم هنا هو الشرط if (!session_is_registered("userid_")) { وهو للتأكد من عدم تسجيل الدخول وعدم تسجيل الجلسة userid_ ، إذا تحقق الشرط فسيتم تنفيذ السطر الذي يليه ، وهو يحتوي على شرط آخر هو if (!$user2 and !$password2) { ، وهذا الشرط للتأكد من عدم تنفيذ النموذج ليتم عرضه ، إذا كان المتغيران user2 و password2 غير موجودين وليس لهما أي قيمة فسيتم تنفيذ الأسطر التـالية وهي عرض النموذج


شرح الكود 2

3- الأسطر التالية هي :
Code ..


<?
elseif ($user2 and $password2) {
$check_login_info = mysql_query("select * from authers where
user='$user2' and password='$password2'")
or die (mysql_error());
if (mysql_num_rows($check_login_info) > 0 ) {
$re = mysql_query("select * from authers where user='$user2'");
while ( $r = mysql_fetch_array($re))
{ $userid_ = $r["id"]; }
session_register("userid_");
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
?>





وهي في حالة عدم تحقق الشرط السابقة ذكره if (!$user2 and !$password2) { ، سيتم الإنتقـال الى المقطع الثاني من الشرط والذي يحتوي على elseif ($user2 and $password2) { ، وسيتم تنفيذ ما جاء بعده إن تحقق الشرط ، وكما هو واضح فإن الشرط يتحقق في حالة إدخال اسم المستخدم وكلمة المرور والضغط على تنفيذ ، سيتم تنفيذ جميع الأسطر التالية والتي فيها التحقق من اسم المستخدم المدخل وكلمة المرور المدخلة والتأكد من صحتهما ، إن كان كذلك سيتم تسجيل الجلسة في السطر :
Code ..


<?
session_register("userid_");
?>





وسيتم عرض لوحة التحكم فيما يلي هذا السطر من أسطر


شرح الكود 3

4- الكود التالي هو :
Code ..


<?
else { echo "<tr><td height=100 bordercolor=FFFFFF align=center>
<font size=2 face=Tahoma>اسم المستخدم وكلمة المرور غير صحيحة</font>
</td></tr></table>"; }
}
?>





وهو في حالة عدم تحقق الشرط الخاص بالتحقق من اسم المستخدم وكلمة المرور والشرط هو if (mysql_num_rows($check_login_info) > 0 ) { ، بمعنى أن النتائج من قاعدة البيانات هي أكبر من الصفر أي تم إيجاد البيانات ، عند عدم تحقق هذا الشرط ستظهر الرسالة ( اسم المستخدم وكلمة المرور غير صحيحة ) .
5- آخر جزء هو :
Code ..


<?
elseif (session_is_registered("userid_")) {
$user_id = mysql_query("select * from authers where id='$userid_'");
while ($row = mysql_fetch_array($user_id)) {
$username = $row["user"];
}
echo "<table width=15% dir=rtl bordercolor=000000 border=1 align=center>
<tr><td bordercolor=FFFFFF align=center>
<font face=Tahoma size=1>أهلا بـ $username</font></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=edit.php?ids=$userid_>الملف الشخصي</a></td></tr>
<tr><td bordercolor=FFFFFF align=center>
<a href=login.php?o=out>خروج</a></td></tr>";
}
?>





وفيه سيتم إظهار لوحة التحكم إن لم يتحقق أول الشروط وهو :
Code ..


<?
if (!session_is_registered("userid_")) {
?>





وكما قلت فهو شرط خاص بالتحقق من عملية تسجيل الجلسة userid_ .

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


الملف edit.php

أنسخ هذا الكود واحفظه في ملف بإسم edit.php :
Code ..


<?
include("config.php");
echo "<table width=50% dir=rtl align=center border=1>";
if (session_is_registered("userid_")) {
echo "<form method=post action=edit.php?ids=$ids>";
if (!$user3 and !$email3) {
$result = mysql_query("select * from authers where id='$ids'");
while ($row = mysql_fetch_array($result)) {
$user2 = $row["user"];
$email2 = $row["email"];
echo "<tr><td width=25%>
<font face=Tahoma size=2>الإسم : </a></td>";
echo "<td>
<input type=****box size=30 name=user3 value='$user2'></td></tr>";
echo "<tr><td width=25%>
<font face=Tahoma size=2>البريد الإلكتروني :</a></td>";
echo "<td>
<input type=****box size=30 name=email3 value='$email2'>";
echo "</td></tr><tr><td bordercolor=FFFFFF align=center>
<input type=submit value='تنفيذ'></td></tr></form>";
}
} elseif ($user3 and $email3) {
$up = mysql_query("update authers set user='$user3',
email='$email3' where id='$ids'")
or die (mysql_error());
if ($up) {echo "<tr><td width=100% align=center>
<font face=Tahoma size=2>تم تحديث البيانات بنجاح ..</font>
</td></tr>";}
}
}
elseif (!session_is_registered("userid_")) {
echo "<tr><td width=100% align=center>
<font face=Tahoma size=2>غير مسموح لك بدخول هذه الصفحة ..</font>
</td></tr>";
}
echo "</table>";
?>





هذا الشرط if (session_is_registered("userid_")) { هو الذي يقوم بحماية الصفحات في لوحة التحكم ، فقط يجب أن تمرر له إسم الجلسة التي تتعـامل معها وهي في مثالنا [/b]userid_[/b] ، فقط تذكر أنه يجب عليك اختيـار إسم الجلسة بشكل جيد بحيث لو كان لديك أكثر من لوحة تحكم في نفس الموقع لا يختلط عليك الأمر ولا تدع مجالاً لاحتمالية إختراق لوحة تحكمك الخاصة ، فإن كنت تحتاج الى استخدام أكثر من لوحة تحكم في موقعك فقم بتغيير إسم الجلسة ، وهكذا لكل تعامل جديد مع الـ Sessions .

walid_8281500
03-19-2009, 08:35 PM
التاريخ باللغة العربية:-


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

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

دالة التاريخ في البي اتش بي هي Date ، ولها معاملين ( أي قيمتين لاعداد مخرجات الدالة ) ، احد المعاملين اجباري والثاني اختياري ، اما الاول وهو الاهم تعتمد عليه مخرجات التاريخ بشكل اساسي مثل ضبط السنة بخانتين أو ضبط الشهر باسم الشهر .. وغيرها ، اما المعامل الثاني فهو ما يسمى بـ ( UNIX time stamp) وهو خاص بنظام اليونكس وكيفية تخزين التاريخ فيه ، عموماً ما يهمنا هنا هو المعامل الأول وهو ما يسمى بـ ( Format String ) ، وكمثال على ما ذكرنا :

Code ..


<?
$today = date(Y-m-d);
echo $today;
?>






هذا المثال سيقوم بطباعة تاريخ اليوم على الشكل التالي 2002-03-13 ، ولاهمية الرموز التي يمكن استخدامها مع الـ Date ساذكر اهمها :
d رقم اليوم في الشهر على شكل خانتين من 01 الى 31 .
D اسم اليوم في الاسبوع على شكل 3 خانات مثل Mon أي الاثنين .
g رقم الساعة في اليوم من 1 الى 12 .
j رقم اليوم في الشهر من 1 الى 31 بدون وضع الصفر .
m رقم الشهر في السنة على شكل خانتين من 01 الى 12 .
y رقم السنة على شكل خانتين ، مثلا 02 .
Y رقم السنة على شكل اربع خانات ، ومثالها 2002 .

هذه من اهم الرموز لكي تتضح الصورة فقط ، ولعلنا نتطرق لها بشكل اوسع قريباً


انشاء الجداول في قاعدة البيانات

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

Code ..


CREATE TABLE month_name (
id tinyint(4) NOT NULL default '0',
month **** NOT NULL
) TYPE=MyISAM;

INSERT INTO month_name VALUES (1, 'يناير');
INSERT INTO month_name VALUES (2, 'فبراير');
INSERT INTO month_name VALUES (3, 'مارس');
INSERT INTO month_name VALUES (4, 'ابريل');
INSERT INTO month_name VALUES (5, 'مايو');
INSERT INTO month_name VALUES (6, 'يونيو');
INSERT INTO month_name VALUES (7, 'يوليو');
INSERT INTO month_name VALUES (8, 'اغسطس');
INSERT INTO month_name VALUES (9, 'سبتمبر');
INSERT INTO month_name VALUES (10, 'اكتوبر');
INSERT INTO month_name VALUES (11, 'نوفمبر');
INSERT INTO month_name VALUES (12, 'ديسمبر');







بعد انشاء هذا الجدول يجب أن يكون لديك جدول اخر يحتوي على التاريخ المراد تحوليه ، ولنفترض أن لديك الجدول ( news ) يحتوي على الحقول ( title , date ) ويحتوي على البيانات التالية :
date title
2002-04-20 الخبر الأول
2002-04-25 الخبر الثاني
2002-05-01 الخبر الثالث

قم بانشاء الجدول


ادراج التاريخ في صفحة PHP

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

بقي أن نذكر أننا سوف نضطر الى كتابة طلبين لقاعدة البيانات احدهما لجلب حقول العنوان ( title ) والاخر لجلب حقول التاريخ ( date ) كما يلي :

Code ..


<?
$result = mysql_query("select * from news");
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\"
\",month_name.month,\" \",DATE_FORMAT(date,'%Y'))
AS date FROM news ,month_name
WHERE month_name.id = month(date)";
$result2 = mysql_query("$sql");
while ($row=mysql_fetch_array($result)
and $row2=mysql_fetch_array($result2))
{
$title = $row["title"];
$date = $row2["date"];
echo "$title , $date<br>";
}
?>






عند تنفيذ السكربت ، سترى ما يلي :
الخبر الأول , 20 ابريل 2002
الخبر الثاني , 25 ابريل 2002
الخبر الثالث , 01 مايو 2002


توافق البيانات

في حالات كثيرة تكون كتابة السكربت السابق بهذا الشكل مسببه للكثير من المشاكل ، و خاصة عند طلب ترتيب للجدول على حسب حقل معين ، وهذه المشاكل هي في توافق البيانات مع بعضها البعض ، فلو افترضنا في مثالنا السابق أن الخبر الأول الذي يحمل التاريخ 2002-04-20 كان باسم آخر ، مثلا ( العنوان الأول ) ، وبعد اضافة حقول ترتيب لجلب البيانات كالتالي :
Code ..


<?
$result = mysql_query("select * from news
order by title");
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\"
\",month_name.month,\" \",DATE_FORMAT(date,'%Y'))
AS date FROM news ,month_name
WHERE month_name.id = month(date)";
$result2 = mysql_query("$sql");
while ($row=mysql_fetch_array($result)
and $row2=mysql_fetch_array($result2))
{
$title = $row["title"];
$date = $row2["date"];
echo "$title , $date<br>";
}
?>






ستجد أن النتائج هي :
الخبر الثالث , 20 ابريل 2002
الخبر الثاني , 25 ابريل 2002
العنوان الأول , 01 مايو 2002 وهذا بطبيعة الحال مشكلة في توافق البيانات .

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


<?
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\"
\",month_name.month,\" \",DATE_FORMAT(date,'%Y'))
AS date FROM news ,month_name
WHERE month_name.id = month(date)
order by title";
?>






وبالتالي تصبح البيانات المخرجه كالتالي :
الخبر الثالث , 01 مايو 2002
الخبر الثاني , 25 ابريل 2002
العنوان الأول , 20 ابريل 2002

وهي بالتاكيد صحيحة .