في البداية يجب ان يكون هناك حدود
لصفحة اي نقطة بداية ونقطة نهاية نريد ان تعرض السجلات
الموجودة في القاعدة من نقطة البداية الى نقطة النهاية وعلى
هذا الاساس نضع متغيرين الاول البداية $start ونتركة بدون
قيمة والثاني العدد الذي ترغب ان يكون حد النهاية في عرض
السجلات $perpage="10"; نضع القيمة حسب الرغبة الان نبداء
استخراج البينات لكن هناك شرط بسيط سوف نضعة
نقوم
بتمرير قيمة start على الدالة isset والقصد فحص المتغير ان لم
يكن لة قيمة نعيد تعيينة عند الصفر لانة في كل صفحة سوف ياخذ
قيمة جديدة الخطوة الثانية استخراج البينات
كود
الاستعلام السابق كان محدد بنقطة بداية ونهاية بستخدام كلمة
LIMIT وضع الاستعلام في متغير result
ثم نعود مرة اخرى
لستعلام قاعدة البينات لمعرفة مجموع عدد السجلات داخلها
وقمنا
بتمريرة على الدالة mysql_num_rows لتعطينا العدد الكلي لسجلات
الموجودة . واصبح العدد الكل في متغير numrows سوف نستخدمة في
العمليات الحسابية بعد قليل لكن قبل استخدامة نريد ان نحدد
قيمة لكل من الصفحة السابقة والصفحة التالية
الصفحة
السابقة previous_page هي قيمة البداية ناقص قمية الحد النهائي
للعرض اما الصفحة التالية next_page هي قيمة البداية زائد
قيمة الحد النهائي للعرض
نبداء الان في العمليات الحسابية
والشروط لدينا اربع شروط الشرط الاول
الشرط
السابق : لتحقق من قيمة start هل هي اكبر من الصفر وهل قمية
numrows اكبر من مجموع start وا perpage وستخدمنا العامل المنطقي
|| الفائدة منة يعطينا النتيجة صح اذا تحققت
الاختبارين وخطاء اذا لم يتححق احد الاختبارات السابقة او
كلاهما اذا تحقق الشرط نبداء في طباعة الفقرة الفائدة منة
حتى لا يقوم باظهار كلمة السابق والتالي حتى ولو لم يكن هناك
سجلات تعرض .
الشرط الثاني
الشرط
السابق : نتحقق من قيمة start اذا كانت اكبر من الصفر نقوم
بطباعة رابط الصفحة السابقة السبب لانة لا يوجد صفحة سابقة اذا كانت قيمة start تساوي صفر والدالة PHP_SELF تعني نفس الملف
ليس ضروري كتابت اسم ملفك بتحديد ( يعني خلها زي ما هي
)
الشرط الثالث
الشرط
السابق : اذا كانت قيمة المتغير numrows اكبر من مجموع حد
البداية والنهاية للعرض يطبع الصفحة التالية لانة لن يكون
هناك صفحة تالية اذا كان المجموع اقل من عدد السجلات
.
الشرط الرابع
نفس
الشرط الاول ونطبع اغلاق الفقرة
نهاية عملية تعدد الصفحات
ونعود ألى استخراج النتيجة
وأكمل
باقي برنامجك
اليكم كامل الكود
لا
يحتاج هذا الكود اي تعديل إلى في الاستعلامات يجب ان تتناسب مع
الجداول لديك ومفايتح الجداول
تعدد الصفحات ( ط 2 )
نظرة سريعة على بداية الكود
الجديد لإنشاء تعدد لصفحات perpage وضعنا متغير للبداية
وهو start وأعطيناه القيمة صفر إذا لم يكن له قيمة ثم وضعنا
متغير أخر perpage وهو الحد الأعلى للعدد السجلات في كل صفحة
وأعطيناه القيمة عشرة وقمنا باستعلام قاعدة البينات مرتين
المرة الأولى لاستخراج السجلات وأضفنا حدود لهذا الاستعلام
والمرة الثانية لمعرفة عدد جميع السجلات في القاعدة .. ( كل
هذا شرح بتفصيل في الدرس الأول )
لاحظ
ان الجملة السابقة تركناها مفتوحة { ولن نغلقها حتى ننتهي
وهذا الشرط : يتحقق من ان عدد السجلات اكبر من الحد الأعلى
لعرض السجلات في الصفحة. إذا كان عدد السجلات اكبر يـبدأ تطبيق
العملية ويبدأ التطبيق بطباعة بداية فقرة تكون في منتصف
الصفحة .
نقوم بحساب الصفحات السابقة تماما كما فعلاً في
الشرط الثاني في الطريقة الأولى
تحقق
بنفسك من الدرس السابق
ثم نجري عملية حسابية نستخدم فيها
دالة مفيدة وهي intval وظيفتها إعادة تعيين المتغير ...(
واحدة من ثلاث دوال بنفس الوظيفة )
لان
قيمة المتغير pages تتغير في كل مرة و بهذا الأسلوب نعيدها إلا
القيمة السابقة . ملاحظة : المتغير pages يساوي العدد الكلي
على الحد الأعلى , افترض ان العدد الكي 17 تقسيم الحد الأعلى 10
, يوجد هناك باقي للقسمة
هنا يوجد لدينا مشكلة ولحل هذه
المشكلة نضع شرط إضافي
الفائدة
من هذا الشرط يضيف باقي القسمة الى عدد الصفحات حتى ينتج معنى
رقم صحيح
إلى هنا تخلصنا من كل ما يعيق العملية ....
ونبدأ في استخدام الحلقة التكرارية for
من
المفروض ان تكون هذه التركيبة معروفة لديك قبل الشروع في مثل هذا
النوع من الدروس .. يأخذ الحرف I قيمة بداية وهنا يبدأ من
الرقم واحد ثم يأتي شرط التكرار ليتحقق هل عدد الصفحات اصغر او
يساوي من المتغير I الان نقوم بعملية حسابية ..
ركز
في هذا السطر وهو لتحديد الصفحة التالية نظرب الحد الأعلى في
المتغير I ناقص واحد فإذا كان المتغير I يساوي واحد, اصبح ناتج
الضرب يساوي صفر وبهذا لا يكون لدينا صفحة تالية
أما اذا
كان المتغير I اكبر من واحد لنفرض 2 وقمنا بطرح 1 اصبح ناتج
الضرب يساوي قيمة المتيغر perpage
الان نضع شرط بسيط اذا
تحقق يطبع الصفحة الحالية ولن تكون على شكل رابط , وهي الصفحة
التي نتاوجد فيها اذا لم يتحقق يطبع باقي الصفحات عبارة عن روابط
تؤدي الى محتوياتها
ذا
كانت قيمة nextpag مساوية لقيمة start يطبع لنا رقم الصفحة طباعة
عادية وإذا لم تكن مساوية يطبع لنا رقم الصفحة عبارة عن رابط
يؤدي لمحتوياتها هنا انهينا الجزء الاكثر اهمية ولم يبقى غير
تحديت التالي
هذا
الشرط يتحقق من أمرين الامر الأول كي لا تتم طباعة كلمة التالي
عندما نكون في اخر صفحة والامر الثاني لا يطبع كلمة التالي إذا
لم يكن هناك إلا صفحة واحدة اذا تحقق الشرط يطبع كلمة
التالي
واخيرا نقفل الفقرة ونقفل الشرط الاول في
العملية من البداية
بقي
طريقة ثالثة لا ادري هل يتم شرحها ام لا لان ما تم شرحه يفي
بالغرض وبقي عدة طرق إضافية مثلا يتصفح المتصفح باختيار عدد
السجلات التي تعرض وعلى اساس هذا العدد يتكون صفحات ... لا اضن ان هناك حاجة لمثل هذه الأساليب
في
البداية سنجري الاتصال بقاعدة البينات لكي نتمكن من جلب
الإستعلام .
Code ..
<? $result
= mysql_query("SELECT * FROM
rafia_forum WHERE id='$id'"); ?>
هذا الاستعلام يستخرج سجل
من الجدول rafia_forum وهو الذي تمت التجربة عليه
.
يحدد هذا السجل رقمه التسلسلي وهو المتغير id ،
لتجربة الإستعلام قم بتبديل هذا المتغير برقم احد السجلات
الموجودة في قاعدة بياناتك وقم بتعديل إسم الجدول لما يناسبك
.
الان نقوم باستخراج كل الحقول الموجودة في هذا
السجل كما يلي :
Code ..
<? $row
= mysql_fetch_array($result);
?>
- ملاحظة : لم نستخدم
الحلقات في عملية استخراج النتيجة وهذا ما يقع فيه الكثير من
الاخوة , لان الاستعلام على حقل واحد فقط , يكفي ان نضع الحقل في
مصفوفة بشكل مباشر .
قبل معالجة البينات نتأكد من أن
القيمة لعدد الاسطر موجودة , إن لم تكن تاخذ القيمة صفر :
Code ..
<?
if(!isset($line)){$line
= 0;}
?>
بعد ذلك نضع متغير يحمل
قيمة عدد الاسطر في كل صفحة :
Code ..
<? $perpage
= "10";
?>
ثم نقوم بتحرير الحقل
الذي نريد تقسيمه لعدة أسطر من المتغير row :
الان نقوم
بتقسيم المتغير post إلى اقسام بحسب عدد الاسطر :
Code ..
<? $expline
= explode("\n",$post);
?>
استخدمنا الدالة
explode في التقسيم على أساس n \ حرف السطر
الجديد هو غير مرئي لكنه يأتي في نهاية كل سطر معبراً عن بداية
سطر جديد ،ووضعنا الناتج من التقسيم في مصفوفة : expline
.
تذكير : explode : تقوم بتقسيم السلسلة
وتحويلها الى مصفوفة .
الان نقوم بحساب عدد عناصر
المصفوفة بستخدام الدالة count :
Code ..
<?
$countlin = count($expline);
?>
countlin هو
المتغير الذي حفظنا فيه مجموع عدد الاسطر ، الان نقوم بتجهيز
العملية الحسابية في تقسيم الصفحات ..
( راجع الدرس الاول
)
Code ..
<?
//تعيين رقم الصفحة
السابقة بناء على عدد الاسطر $previouspage =
$line - $perpage;
//تعيين رقم الصفحة
التالية $nextpage
= $line +
$perpage; ?>
إلى هنا سنكون قد جهزنا
جميع المتغيرات التي سوف تساعدنا في تقسيم العرض ولذلك سنبدأ في
التقسيم .
نقوم بعرض الاسطر انطلاقاً من نقطة معينة في
المتغير line وحتى نقطة نهاية معينة في المتغير
nextpage مستخدمين في ذلك حلقة التكرار for
:
- ملاحظة : اثناء
الطباعة ستجد <br> في النهاية وهي شرط اساسي لنجاح
العملية اما في البداية او النهاية ، لن تضطر لإستخدام الدالة
nl2br ، السبب لان التعامل مع مصفوفة ، اعني مقسمة في
اسطر جاهزة .
انتهينا ولم يبقى الى اظهار كلمة السابق
والتالي ، مستخدمين في ذلك اربع شروط تم شرحها في الدرس الاول
: