كيفية عمل تعدد لصفحات عرض النتائج ؟؟
تعدد صفحات نتائج الاستعلام من قواعد البيانات له فائدة كبيرة جدا .
تخيل انه لديك في قسم من اقسام موقعك 100 سجل , وتريد عرضها للزائر , فكم من
الوقت سيستغرق عرض هذه النتائج ( ان استطاع المتصفح اصلا تحمل ذلك العدد الهائل ) ,
كما انها ستسبب ضغطا كبيرا على قاعدة البيانات
لذلك وُجدت الحاجة لمايعرف بتعدد الصفحات , وهو ان يتم عرض كل 10 سجلات (مثلا )
في كل صفحة , على ان يوجد شريط للتصفح باسفل الصفحة يؤدي لبقية صفحات نتائج هذا الاستعلام
في البداية يجب ان نعرف انه عند الاستعلام من قاعدة البيانات , يمكننا تحديد من
اين يبدأ الاستعلام وكم سجلا نريد ان نستعلم عنها
مثال :
mysql_query("SELECT column FROM table ORDER BY column LIMIT 17,5")
نتيجة هذا الاستعلام ستعرض لنا 5 سجلاتابتداء من بعدالسجل رقم 17
( تفسير:النتائج ستكون عبارة عن السجلات 18 ,19 , 20 , 21, 22)
الشرح :
من هذا المنطلق , سنقوم بتحديد قيمة اولا لعدد السجلات اللتي نريد عرضها في كل صفحة ونضعها في متغير $perpage
الان عرفنا عدد السجلات التي نريد اظهارها في كل صفحة ويتبقى علينا رقم السجل الذي سنبدأ الاستعلام من بعده ( في المثال السابق 17 )
سنسمي هذا المتغير $count
ونقوم بارسال قيمته للمتصفح لكي يتم الاستعلام بواسطتها
لكي نأخذ قيمة count من المتصفح , نستخدم $_GET كما يلي :
$count=$_GET['count'];
اذا لم تكن هناك قيمة لـ count فسنعين لها القيمة صفر
if (!$count) { $count=0;}
بعد عرض نتائجنا الناتجة عن الاستعلام التالي :
$query2=mysql_query("SELECT column FROM table ORDER BY column LIMIT $count,$perpage")
or die("can't get the table");
سنقوم باجراء استعلام آخر لمعرفة اجماليعدد السجلات الموجودة لدينا في القاعدة
$query1=mysql_query("SELECT column FROM table ORDER BY column ")
or die("can't get the table");
$check_end=mysql_num_rows($query1);
الان خزّنا عدد السجلات الموجودة لدينا في المتغير $check_end
يأتي دور عمل تعدد الصفحات
اولا نضع عداد للصفحات ونعين له القيمة 1 مبدأيا
$i=1;
عدد السجلات التي سنعرضها في كل صفحة نعين قيمتها للمتغير $perpage
$perpage=2;
الان , سنستخدم متغير للرقم الذي سيتم اعطاء قيمتة للمتغير count وسميناه $next واعطينا مبدأيا القيمة صفر
$next=0 ;
الان نبدأ بجملة شرطية , مفادها انه طالما المتغير $next اقل من اجمالي السجلات $check_end سيتم تنفيذ الاوامر :
while($next<=$check_end){
الان سنضع شرطا اخر داخل الشرط السابق , وظيفتها عدم وضع رابط على رقم الصفحة التي يتصفحها الزائر :
if ($count==$next){echo" $i ";}
بخلاف ذلك الشرط , سيتم وضع رابط على رقم الصفحة , متضمنا قيمة المتغير count والتي هي المتغير next
else{echo" <a href='page.php?count=$next'>$i</a>";}
$next=$next+$perpage;$i++; }
شرح الاوامر :
اولا كتبنا انه لو كان المتغير $next يساوي المتغير $count فسيطبع لنا رقم
الصفحة $i غير نشطة
( يعني لو كان المتغير يساوي الصفحة التي نستعرضها فلن نضع
عليها رابطا لاننا نستعرضها فعلا )
اذا لم يتحقق هذا الشرط فانه سينفذ مايلي وهو
وضع رابط على رقم الصفحة يعطي للمتصفح قيمة المتغير count القيمة $next
بعد ذلك
, سنزيد قيمة المتغير $next بقيمة مقدارها $perpage لكي يتم اضافتها لرابط
رقم الصفحة التالية
الان نزيد رقم الصفحة $i بمقدار واحد كما يلي
$i++;
الكود كاملا :
$count=$_GET['count'];
if (!$count) { $count=0;}
$query1=mysql_query("SELECT column FROM table ORDER BY column ")
or die("can't get the table");
$check_end=mysql_num_rows($query1);
$query2=mysql_query("SELECT column FROM table ORDER BY column LIMIT $count,$perpage")
or die("can't get the table");
//سيتم عرض السجلات الناتجة عن الاستعلام
$i=1;
$perpage=2;
$next=0 ;
while($next<=$check_end){
if ($count==$next){echo" $i";
}else{
echo" <a href='page.php?count=$next'>$i</a>";}
$next=$next+$perpage;$i++;
}
|