شرح كيفية عمل تعدد صفحات تقسيم النتائج sql php

السلام عليكم ورحمة الله وبركاته

بكل بساطه و بدون تعقيد عملية تعدد الصفحات أو تقسيم النتائج معتمد علي شقين
الاول هو ال sql و ده اسهل شيئ
و الثاني هو ال php و ده برضوا سهل إن شاء الله
الان نتكلم بشكل نظري انا عندي جدول مثلاً للمواضيع جيد
و الجدول ده موجود فيه 75 موضوع
و انا عايز اجلبهم في صفحتي بس بتقسيم النتائج من هذا الجدول الي عدة صفحات
طيب حلو الكلام انا عايز بائه اظهر في كل صفحه 25 موضوع معنه كده إن هيطلع لي 3 صفحات
لأنك لو قسمت 75 علي ال 25 يبقي النتيجه 3 حلو اوي كده
هنا باقه يجي دور ال sql
و دور التعليمه limit
مثال عملي
عندي جدول بأسم topic
الان سأقوم بالاستعلام من هذا الجدول لجلب النتائج بالطريقه التقليديه
رمز Code:select * from `topic`
طبعاً بالطريقه دي هيظهر كل محتويات الجدول هنا يجي دور التعليمه
limit
الان سنقوم بتقسيم النتائج الي 25 ننتيجه في الصفحه مثال
رمز Code:select * from `topic`
limit 0,25دلوقتي الاستعلام بدوره هيجلب 25 نتيجة من الجدول topic
طيب كده باقي 50 نتيجه متقسمه الي صفحتين بخلاف الصفحه الاولي اللي فيها ال 25 نتيجه
هقدر اجلبهم ازاي
مثلاً لو حبيت اجيب الصفحه الثانيه
رمز Code:select * from `topic`
limit 25,25هيبدأ يجلب النتائج من بعد النتيجه رقم 25
فيبدأ بالعرض من
26
الي
50
طيب لو عاوز اجلب الصفحه التالته
رمز Code:select * from `topic`
limit 50,25هيبدأ يجلب النتائج من بعد النتيجه رقم 50
فيبدأ بالعرض من
51
الي
75
اظن ابتضحت الصوره طيب دلوقتي زائر الموقع إحتمال كبير إنه يكون مش بيعرف في استخدام ال sql
يبقي هنا يجي دور ال php
أول حاجه لازم نأمن المتغير الخاص برقم الصفحه بحيث لا يتم العبث به و إظهار نتائج غير مرغوب فيها
تابع معايا
رمز PHP:$page = (!isset($_GET['page']) ? 1 : intval($_GET['page']));/*
أولاً قمنا بالتحقق لو كان لم يتم تعريف المتغير في المتصفح سيأخذ من تلقاء نفسه
القيمه 1 اي سينلقنا الي الصفحه الاولى
و إن تم تعريفه في المتصفح سيأخذ قيمة نفسه
*/
$page =(intval($_GET['page'])<=0 ? 1 : $page );/*
و هنا قلنا لو كان المتغير اقل من أو يساوي 0 سيأخذ قيمة 1 أو إن كان غير ذلك سيكون نفسه
*/
كده إحنا أمنا المتغير $page الخاص بجلب الصفحات حتي لا يتم التحايل علي عملية جلب النتائج
الان هل تتذكر معي ما قمنا بعمله في الجزء الخاص يال sql
حان دوره و لكن عن طريق ال php
دلوقتي نتكلم شويه نظري
انا حالياً طلبت الصفحه الثانيه جيد و اريد جلب النتائج الخاصه بها
من البديهي ان يكون المتغير page في المتصفح يحمل القيمه رقم 2
الان نريد ان يكون رقم الجلب 25 ليجلب من المواضيع التي من بعد 25 الي 50
توضيح يعني في استعلام ال sql تكون التعليمه limit بهذه الطريقه
رمز Code:limit 25,2525 هي عدد النتائج المراد عرضها في المصفحه
25 لجلب النتائج اللي في الصفحه الثانيه
جيد الان كما ذكرت انا في الصفحه رقم 2 و عايز اوصل الي الرقم خمسين
يبقي اضرب رقم الصفحه الي عدد النتائج المراد جلبها في الصفحه الواحده
رمز PHP:
$limit=$page*25;
هنصل علي 50 لأننا في الصفحه رقم 2 ثم نقوم بطرح قيمة عدد النتائج في الصفحه الواحده من ناتج الضرب
ليصبح الكود كالتالي
رمز PHP:$limit=($page*25)-25;
جيد جداً الان ما ريد بوضع قيمة كمية النتائج في الصفحه الواحده في متغير أليس هذا افضل
رمز PHP:$numpage=25;//متغير عرض النتائج في الصفحه الواحده
$limit=($page * $numpage) - $numpage;
الان سنقوم بالتعديل علي الاستعلام ليصبح معتمد علي المتغيرات و ليس الارقام المباشره
رمز PHP:<?
//الاستعلام الخاص بجلب البيانات من الجدول
$sql=mysql_query("select * from `topic` limit $limit,$numpage ");
// التأكد من وجود صفوف في الجدول
if(!mysql_num_rows($sql))
{
echo 'لا توجد بيانات';
} else{
while($arr=@mysql_fetch_array($sql))
{
// طباعة محتويات القاعده
}
}
?>
مشاركة هذا الرد في
DiggDel.icio.usTechnoratiTwitter|
الان و بعد ان قمنا بعمل تقسيم للنتائج القادمه من قاعدة البيانات
سنقوم بإظهار ارقام الصفحات الناتجه من الاستعلام علي هذا الجدول
رمز PHP:<?php
$page = (!isset($_GET['page']) ? 1 : intval($_GET['page']));
$page =(intval($_GET['page'])<=0 ? 1 : $page );
$numpage=2;// متغير عرض النتائج في الصفحه الواحده
$limit=($page * $numpage) - $numpage;
//الاستعلام الخاص بجلب البيانات من الجدول
$sql=mysql_query("select * from `topic` limit $limit,$numpage ");
//تكملة الكود بجلبه علي شكل مصفوفه في تكرار while($arr=@mysql_fetch_array($sql))
{
echo $arr['text'].'<br>';
}
$numbers=ceil(mysql_num_rows(mysql_query("select id from `topic` "))/$numpage);
$i=0 ;
while($i<$numbers)
{
++$i;
if($page<>$i)$n="<a href=\"?page=$i\">$i</a>";
else
{
$n="$i";
}
echo $n;
}
?>

  

إرسال تعليق

0 تعليقات