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