آموزش صفحه بندی (Pagination) مطالب با PHP
صفحه بندی مطالب در PHP، یکی از مهارتهایی است که برنامه نویسان وب باید آن را به خوبی بلد باشند. ممکن است که در فرآیند خواندن اطلاعات از پایگاه داده، برای دریافت میلیونها رکورد، از مشکلات زمانی و سردرگمی کاربران رنج ببریم. به عنوان مثال، بارگیری ۱۰۰۰ تصویر در یک صفحه، بسیار بیشتر از بارگیری ۵۰ تصویر در همان صفحه به طول میانجامد. بنابراین، به منظور بهترین خوانایی و فهم برای کاربر، رکوردها را به تعدادی صفحه با توجه به نیاز کاربر تقسیم میکنیم. این عمل به صفحه بندی یا Pagination معروف است و علاوه بر این، این روش باعث بهبود تجربه کاربری میشود.
در اینجا، آموزش ساخت صفحه بندی مطالب در PHP ارائه میشود. با پیشرفت در این مهارت، شما میتوانید بهبودی در عملکرد وبسایت خود را احساس کنید و تجربه کاربری بهتری را برای کاربران خود فراهم کنید.
صفحه بندی با PHP و MySQL
صفحه بندی در PHP و MySQL، به راحتی با استفاده از چندین قابلیت و تابع سادهای قابل پیادهسازی است. در ادامه، یک نمونه پیادهسازی صفحه بندی با PHP و MySQL ارائه شده است:
ابتدا، باید اتصال به پایگاه داده MySQL را برقرار کنید. برای این کار، از تابع mysqli_connect استفاده میکنیم:
// اتصال به پایگاه داده
$con = mysqli_connect("localhost", "username", "password", "database_name");
در ادامه، میتوانیم تعداد کل رکوردهای جدول خود را با استفاده از تابع mysqli_num_rows بدست آوریم:
// بدست آوردن تعداد کل رکوردها
$result = mysqli_query($con, "SELECT COUNT(*) AS total_records FROM table_name");
$total_records = mysqli_num_rows($result);
سپس، برای نمایش رکوردها در هر صفحه، باید تعداد رکوردها در هر صفحه را تعیین کنید. در اینجا، فرض میکنیم هر صفحه شامل ۱۰ رکورد است:
// تعیین تعداد رکوردها در هر صفحه
$records_per_page = 10;
حالا با توجه به تعداد کل رکوردها و تعداد رکوردها در هر صفحه، میتوانیم تعداد کل صفحات را محاسبه کنیم:
// محاسبه تعداد کل صفحات
$total_pages = ceil($total_records / $records_per_page);
حالا، برای نمایش رکوردها در هر صفحه، از محاسبه شماره صفحه فعلی و استفاده از LIMIT در درخواست SQL استفاده میکنیم:
“// محاسبه شماره صفحه فعلی
$current_page = isset($_GET[‘page’]) ? $_GET[‘page’] : 1;
// محاسبه محدودیت LIMIT برای درخواست SQL
$offset = ($current_page – 1) * $records_per_page;
// درخواست SQL برای نمایش رکوردها در صفحه فعلی
$sql = “SELECT * FROM table_name LIMIT $offset, $records_per_page”;
$result = mysqli_query($con, $sql);
// نمایش رکوردها در صفحه فعلی
while($row = mysqli_fetch_array($result)) {
// نمایش رکورد در صفحه
}
در نهایت، برای نمایش لینکهای صفحه بندی، از یک حلقه for استفاده کنید و لینکها را با استفاده از شماره صفحه و تعداد کل صفحات ایجاد کنید:
// نمایش لینکهای صفحه بندی
echo “
“;
“`
با این کد، شما میتوانید یک صفحه بندی ساده برای نمایش رکوردها در PHP و MySQL پیاده کنید. البته برای بهبود عملکرد و امنیت بیشتر، میتوانید از قابلیتهایی مانند اعتبارسنجی و فیلترینگ ورودیها استفاده کنید. همچنین، برای بهینهسازی عملکرد، میتوانید از کشینگ و فشردهسازی صفحات استفاده کنید.
چگونه از کشینگ و فشردهسازی صفحات استفاده کنم؟
بله، میتوانید از کشینگ و فشردهسازی صفحات برای بهبود عملکرد وبسایت خود استفاده کنید. در ادامه، راهنمایی کوتاهی برای استفاده از کشینگ و فشردهسازی صفحات ارائه میشود:
کشینگ:
کشینگ، فرایند ذخیره سازی موقت دادههای یک صفحه وب در حافظهی نهان سیستم عامل یا سرور وب است. با استفاده از کشینگ، زمان لود صفحات به شدت کاهش مییابد و باعث بهبود عملکرد وبسایت میشود.
برای استفاده از کشینگ در PHP، میتوانید از تابع ob_start استفاده کنید. با استفاده از این تابع، محتوایصفحهی وب را در حافظهی نهان سیستم عامل یا سرور وب ذخیره میکنید. به عنوان مثال، در کد زیر، محتوای صفحهی وب در حافظهی نهان ذخیره میشود:
// شروع کشینگ
ob_start();
// نمایش محتوای صفحه
echo "Hello World!";
// پایان کشینگ و ذخیره محتوای صفحه در حافظهی نهان
$content = ob_get_clean();
حالا با استفاده از محتوای ذخیره شده در حافظهی نهان، میتوانید صفحه را نمایش دهید. با این کار، هر بار که صفحهی وب را بارگیری میکنید، محتوای صفحه از حافظهی نهان سریعاً بارگیری میشود وزمان لود صفحهی وب به شدت کاهش مییابد.
فشردهسازی:
فشردهسازی، فرایند کاهش حجم دادههای یک صفحه وب است. با استفاده از فشردهسازی، حجم دادههای ارسالی بین سرور و کاربر کاهش مییابد و باعث بهبود سرعت بارگیری صفحات میشود.
برای استفاده از فشردهسازی در PHP، میتوانید از تابع gzcompress استفاده کنید. با استفاده از این تابع، محتوای صفحهی وب را فشرده میکنید و به کاربر ارسال میکنید. به عنوان مثال، در کد زیر، محتوای صفحهی وب فشرده شده و به کاربر ارسال میشود:
“// فشردهسازی صفحه
ob_start(“ob_gzhandler”);
// نمایش محتوای صفحه
echo “Hello World!”;
// پایان فشردهسازی و ارسال محتوای صفحه به کاربر
ob_end_flush();
“`
با استفاده از کشینگ و فشردهسازی صفحات، میتوانید بهبودی قابل توجهی در عملکرد وبسایت خود ایجاد کنید. اما بهتر است قبل از استفاده از این قابلیتها، اطمینان حاصل کنید که سرور وب شما از آنها پشتیبانی میکند و در صورت نیاز، با مدیریت سرور وب خود مشورت کنید.
ایجاد پایگاه داده در MySQL
برای ایجاد پایگاه داده در MySQL، میتوانید از دستورات SQL استفاده کنید. در ادامه، مراحل ایجاد یک پایگاه داده ساده در MySQL را شرح میدهیم:
- ابتدا برنامهی MySQL را با استفاده از دستور زیر اجرا کنید:
mysql -u root -p
این دستور شما را به پایگاه دادهی MySQL متصل میکند.
- سپس، با استفاده از دستور زیر، یک پایگاه داده جدید ایجاد کنید:
CREATE DATABASE dbname;
در این دستور، dbname نام پایگاه دادهی جدید شما است.
- برای ایجاد جدولها در پایگاه داده، از دستور زیر استفاده کنید:
USE dbname;
CREATE TABLE table_name (
column1 datatype(size),
column2 datatype(size),
column3 datatype(size),
...
);
در این دستور، dbname نام پایگاه دادهی شما و table_name نام جدول جدید شما است. همچنین، در این دستور، برای هر ستون در جدول، نام ستون و نوع دادهی آن مشخص میشود.
- برای افزودن رکوردها به جدول، از دستور زیر استفاده کنید:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
در این دستور، برای هر ستون در جدول، مقدار آن مشخص میشود.
- برای دریافت اطلاعات از جدول، از دستور زیر استفاده کنید:
SELECT column1, column2, column3, ...
FROM table_name;
در این دستور، برای هر ستون در جدول، نام ستون وارد میشود و تمام ستونهای جدول انتخاب میشود.
- در نهایت، برای بستن ارتباط با پایگاه داده، از دستور زیر استفاده کنید:
QUIT;
این دستور شما را از پایگاه دادهی MySQL خارج میکند.
با این دستورات، میتوانید یک پایگاه داده ساده در MySQL ایجاد کنید. البته برای پیادهسازی پیچیدهتر و بزرگتر، باید از دستورات SQL پیشرفتهتر استفاده کنید و بهتر است به کتابخانهها و ابزارهای مدیریت پایگاه دادهها نیز مسلط شوید.
اتصال به پایگاه داده
برای اتصال به پایگاه داده در PHP، میتوانید از تابع mysqli_connect()
استفاده کنید. این تابع برای اتصال به پایگاه داده MySQL استفاده میشود. در ادامه، نحوهی استفاده از این تابع را برای اتصال به پایگاه داده MySQL شرح میدهیم:
- ابتدا، مشخصات سرور دیتابیس خود را تعیین کنید:
$servername = "localhost"; // نام سرور دیتابیس
$username = "username"; // نام کاربری دیتابیس
$password = "password"; // رمز عبور دیتابیس
$dbname = "database"; // نام دیتابیس
- سپس، با استفاده از تابع
mysqli_connect()
، به پایگاه داده متصل شوید:
$conn = mysqli_connect($servername, $username, $password, $dbname);
- برای بررسی صحت اتصال، میتوانید از تابع
mysqli_connect_error()
استفاده کنید:
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
در صورتی که اتصال برقرار نشود، پیغام خطا به همراه علت خطا نمایش داده میشود.
- در نهایت، با استفاده از تابع
mysqli_query()
، کوئریهای مورد نیاز خود را به دیتابیس ارسال کنید:
$sql = "SELECT * FROM MyGuests";
$result = mysqli_query($conn, $sql);
در این مثال، یک کوئری انتخاب همهی رکوردها از جدول MyGuests ارسال شده است.
- پس از اتمام کار با دیتابیس، برای بستن اتصال به پایگاه داده، از تابع
mysqli_close()
استفاده کنید:
mysqli_close($conn);
با استفاده از تابع mysqli_connect()
و توابع دیگری که برای کار با دیتابیس MySQL در PHP وجود دارد، شما میتوانید به راحتی به پایگاه داده خود متصل شوید و عملیات مورد نیاز را روی آن انجام دهید.
چگونگی دریافت شماره صفحه فعلی در PHP
در PHP، شمارهی صفحهی فعلی میتواند با استفاده از متغیر $_SERVER['PHP_SELF']
به دست آید. مقدار این متغیر نام فایل اجرایی PHP است که در حال حاضر در حال اجرا است. به عنوان مثال، اگر فایلی با نام index.php
در حال اجرا باشد، $_SERVER['PHP_SELF']
برابر با /index.php
خواهد بود.
برای استخراج شمارهی صفحهی فعلی، میتوانید از تابع basename()
استفاده کنید. این تابع، نام فایل اجرایی PHP را بدون پسوند بازگردانده و شماره صفحه را از آن استخراج کنید. برای مثال، فرض کنید فایل اجرایی PHP شما با نام index.php
اجرا شدهباشما میتوانید از تابع basename()
برای استخراج نام فایل PHP استفاده کنید و سپس از تابع pathinfo()
برای دریافت پسوند فایل استفاده کنید. سپس میتوانید شمارهی صفحهی فعلی را با استفاده از تابع str_replace()
و یا تابع preg_replace()
استخراج کنید. در ادامه مثالی را برای استخراج شماره صفحه ارائه میدهیم:
// استخراج نام فایل PHP و پسوند آن
$file_name = basename($_SERVER['PHP_SELF']);
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
// بررسی اینکه آیا پسوند فایل PHP وجود دارد
if ($file_extension == 'php') {
// استخراج شماره صفحه
$page_number = preg_replace('/[^0-9]/', '', $file_name);
echo"شماره صفحهی فعلی: " . $page_number;
}
در این مثال، ابتدا با استفاده از تابع basename()
، نام فایل اجرایی PHP را استخراج کردیم. سپس با استفاده از تابع pathinfo()
، پسوند فایل را استخراج کردیم و بررسی کردیم که آیا این پسوند برابر با php
است یا نه. در صورتی که پسوند برابر با php
باشد، با استفاده از تابع preg_replace()
، تمامی کاراکترهای غیر عددی را از نام فایل حذف کردیم و شماره صفحه را استخراج کردیم. در نهایت، با استفاده از تابع echo
، شماره صفحه را نمایش دادیم.
دریافت تعداد کل صفحات در PHP
در PHP، برای دریافت تعداد کل صفحات، ابتدا باید تعداد کل موارد موجود در لیست خود را به دست آورید. سپس با تقسیم تعداد موارد بر تعداد مواردی که در هر صفحه نمایش داده میشوند، تعداد کل صفحات را به دست خواهید آورد.
برای مثال، فرض کنید یک لیست از ۱۰۰۰ مورد دارید و میخواهید آن را در ۲۰ مورد در هر صفحه نمایش دهید. در این صورت، تعداد کل صفحات برابر خواهد بود با:
“`php
$total_records = 1000; // تعداد کل موارد
$records_per_page = 20; // تعداد موارد در هر صفحه
$total_pages = ceil($total_records / $records_per_page); // تعداد کل صفحات
در این مثال، با استفاده از تابع ceil()
، مقسوم علیه را بر تقسیم کننده تقسیم کردیم تا تعداد کل صفحات را به دست آوریم. تابع ceil()
نزدیکترین عدد صحیح بزرگتر مساوی با عدد داده شده را برمیگرداند. به عنوان مثال، اگر تقسیم ۱۰۰۰ بر ۲۰ برابر با ۵۰ شود، با استفاده از تابع ceil()
، تعداد کل صفحات برابر با ۵۰ خواهد بود.
بازیابی دادهها
برای بازیابی دادهها از پایگاه داده و نمایش آنها در صفحهی وب، میتوانید از زبان PHP و دیتابیس MySQL استفاده کنید. برای این کار، ابتدا باید یک اتصال به دیتابیس برقرار کنید. سپس با استفاده از کوئریهای SQL، دادههای مورد نیاز خود را از جدول مورد نظر در دیتابیس بازیابی کنید. در نهایت، با استفاده از تکنولوژیهای HTML و CSS، دادهها را در صفحهی وب نمایش دهید.
در ادامه، یک مثال برای بازیابی دادهها از دیتابیس و نمایش آنها در صفحهی وب ارائه میدهیم:
۱.اتصال به دیتابیس:
ابتدا باید یک اتصال به دیتابیس برقرار کنید. برای این کار، میتوانید از تابع mysqli_connect()
استفاده کنید. این تابع، اطلاعات مربوط به نام کاربری، رمز عبور، نام دیتابیس و هاست دیتابیس را به عنوان ورودی دریافت میکند و یک اتصال به دیتابیس برقرار میکند. به عنوان مثال:
// اطلاعات اتصال به دیتابیس
$host = 'localhost';
$username = 'db_user';
$password = 'db_pass';
$db_name = 'database_name';
// برقراری اتصال به دیتابیس
$conn = mysqli_connect($host, $username, $password, $db_name);
// بررسی موفقیت اتصال
if (!$conn) {
die("اتصال به دیتابیس ناموفق بود: " . mysqli_connect_error());
}
در این مثال، ابتدا اطلاعات مربوط به اتصال به دیتابیس را در متغیرهای $host
، $username
، $password
و $db_name
ذخیره کردیم. سپس با استفاده از تابع mysqli_connect()
، یک اتصال به دیتابیس برقرار کردیم و آن را در متغیر $conn
ذخیره کردیم. در صورتی که اتصال به دیتابیس برقرار نشد، با استفاده از تابع die()
، برنامه را متوقف کردیم و پیغام خطا را نمایش دادیم.
- بازیابی دادهها:
پس از برقراری اتصال به دیتابیس، میتوانید با استفاده از کوئریهای SQL، دادههای مورد نیاز جدول مورد نظر در دیتابیس بازیابی کنید. برای این کار، میتوانید از تابع mysqli_query()
استفاده کنید. این تابع، یک کوئری SQL را به عنوان ورودی دریافت میکند و نتیجهی آن را به صورت یک شیء باز میگرداند. به عنوان مثال:
// اجرای کوئری برای بازیابی دادهها از جدول users
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
// بررسی موفقیت اجرای کوئری
if (!$result) {
die("خطا در بازیابی دادهها: " . mysqli_error($conn));
}
در این مثال، با استفاده از کوئری SELECT * FROM users
، تمامی ردیفهای جدول users
را انتخاب کردیم و آن را در متغیر $result
ذخیره کردیم. در صورتی که اجرای کوئری با موفقیت انجام نشد، با استفاده از تابع die()
، برنامه را متوقف کردیم و پیغام خطا را نمایش دادیم.
- نمایش دادهها در صفحهی وب:
پس از بازیابی دادهها، میتوانید آنها را در صفحهی وب نمایش دهید. برای این کار، میتوانید از تکنولوژیهای HTML و CSS استفاده کنید. به عنوان مثال:
// نمایش دادهها در یک جدول HTML
echo "";
echo "نام کاربری ایمیل ";
while ($row = mysqli_fetch_assoc($result)) {
echo "" . $row['username'] . " " . $row['email'] . " ";
}
echo "
";
در این مثال، با استفاده از تابع mysqli_fetch_assoc()
، ردیفهای بازیابی شده از دیتابیس را به صورت یک آرایهی انجمنی بازگردانده و در متغیر $row
ذخیره کردیم. سپس با استفاده از تکنولوژیهای HTML و CSS، دادهها را در یک جدول HTML نمایش دادیم. به عنوان مثال، نام کاربری را از طریق $row['username']
و ایمیل را از طریق $row['email']
بازیابی کردیم و آنها را در داخل تگهای <td>
قرار دادیم. در نهایت، با استفاده از تگهای <tr>
، ردیفهای جدر اینجا ادامهی پاسخ به سوال قبلی به دو بخش تقسیم شده است.
- بستن اتصال به دیتابیس:
پس از اتمام عملیات با دیتابیس، باید اتصال به دیتابیس را ببندید. برای این کار، میتوانید از تابع mysqli_close()
استفاده کنید. به عنوان مثال:
// بستن اتصال به دیتابیس
mysqli_close($conn);
- کامل شده:
با توجه به مراحل بالا، کد کامل برای بازیابی دادهها و نمایش آنها در صفحهی وب به صورت زیر است:
“`php
// اطلاعات ا
کد پایانی
Pagination
<?php
//database connection
$conn = mysqli_connect('localhost', 'root', '');
if (! $conn) {
die("Connection failed" . mysqli_connect_error());
}
else {
mysqli_select_db($conn, 'pagination');
}
//define total number of results you want per page
$results_per_page = 10;
//find the total number of results stored in the database
$query = "select *from alphabet";
$result = mysqli_query($conn, $query);
$number_of_result = mysqli_num_rows($result);
//determine the total number of pages available
$number_of_page = ceil ($number_of_result / $results_per_page);
//determine which page number visitor is currently on
if (!isset ($_GET['page']) ) {
$page = 1;
} else {
$page = $_GET['page'];
}
//determine the sql LIMIT starting number for the results on the displaying page
$page_first_result = ($page-1) * $results_per_page;
//retrieve the selected results from database
$query = "SELECT *FROM alphabet LIMIT " . $page_first_result . ',' . $results_per_page;
$result = mysqli_query($conn, $query);
//display the retrieved result on the webpage
while ($row = mysqli_fetch_array($result)) {
echo $row['id'] . ' ' . $row['alphabet'] . '';
}
//display the link of the pages in URL
for($page = 1; $page<= $number_of_page; $page++) {
echo '' . $page . ' ';
}
?>
خروجی صفحه بندی (Pagination) مطالب با PHP
جمع بندی
در این مقاله، به بررسی دو موضوع مهم در برنامهنویسی وب پرداخته شد: تعداد کل صفحات و بازیابی دادهها و نمایش آنها در صفحهی وب.
برای محاسبه تعداد کل صفحات، ابتدا باید تعداد کل موارد موجود در لیست را به دست آورد. سپس با تقسیم تعداد موارد بر تعداد مواردی که در هر صفحه نمایش داده میشوند، تعداد کل صفحات را به دست میآوریم.
برای بازیابی دادهها و نمایش آنها در صفحهی وب، ابتدا باید یک اتصال به دیتابیس برقرار کنید. سپس با استفاده از کوئریهای SQL، دادههای مورد نیاز جدول مورد نظر در دیتابیس را بازیابی کرده و با استفاده از تکنولوژیهای HTML و CSS، آنها را در صفحهی وب نمایش میدهیم.
در کل، برای برنامهنویسی وب، باید با تکنولوژیهای مختلفی مانند HTML، CSS، JavaScript و PHP آشنا باشید و به خوبی از آنها استفاده کنید. همچنین، باید با پایگاهدادهها و کوئریهای SQL آشنایی داشته باشید تا بتوانید دادههای مورد نیاز خود را بازیابی و در صفحهی وب نمایش دهید.
در نهایت، توصیه میشود که در هنگامبرنامهنویسی وب، از الگوها و روشهای استاندارد و صحیح استفاده کنید و همیشه به بهترینهای امنیتی و بهینهسازی صفحه توجه کنید. همچنین، میتوانید از ابزارهای مختلف مانند فریمورکها و کتابخانههای موجود استفاده کنید تا کد نویسی خود را سادهتر و بهتر بنویسید.