مقدمه
صفحه گذاری مفهوم محدود کردن تعداد ردیف های برگشت یافته در یک مجموعه ثبت شده به صفحات جداگانه و منظم است تا امکان جهت گیری آسان بین آنها فراهم شود ، بنابراین وقتی یک مجموعه داده بزرگ وجود دارد می توانید صفحه گذاری خود را پیکربندی کنید تا فقط تعداد مشخصی از ردیف ها را در هر صفحه برگردانید. به عنوان مثال ، وقتی یک فروشگاه اینترنتی هزاران محصول دارد، صفحه بندی می تواند با کاهش تعداد اقلام ذکر شده در یک صفحه ، از نمایش بیش از حد کالا به کاربران جلوگیری کند ، زیرا اغلب بعید است که کاربر نیاز به مشاهده همه محصولات داشته باشد. مثال دیگر برنامه ای است که سوابق یک تلفن همراه را نشان می دهد. فعال کردن صفحه بندی در چنین مواردی ، سوابق را به چندین صفحه تقسیم می کند که می توانند در صفحه بهتر ظاهر شوند.
علاوه بر مزایای بصری برای کاربران نهایی ، صفحه بندی باعث می شود برنامه ها سریعتر شوند زیرا باعث می شود تعداد سوابق برگشتی همزمان کاهش یابد. این کار داده های لازم برای انتقال بین مشتری و سرور مجازی را محدود می کند و به حفظ منابع سرور مجازی مانند RAM کمک می کند.
در این آموزش ، شما یک اسکریپت PHP برای اتصال به پایگاه داده خود و پیاده سازی صفحه بندی با اسکریپت خود با استفاده از بند LIMIT در MySQL ایجاد خواهید کرد.
پیش نیازها
قبل از شروع به موارد زیر نیاز خواهید داشت:
⦁ یک سرور مجازی Ubuntu 18.04 که با دنبال کردن دستور العمل راه اندازی سرور مجازی اولیه با اوبونتو 18.04 ، شامل یک کاربر غیر ریشه سودو راه اندازی شده باشد.
⦁ Apache ، MySQL و PHP که روی سیستم شما نصب شده باشند. شما می توانید راهنمایی در مورد نحوه نصب Linux ، Apache ، MySQL ، PHP (LAMP) روی Ubuntu 18.04 را در این لینک دنبال کنید.
مرحله 1 – ایجاد کاربر دیتابیس و تست دیتابیس
در این آموزش یک اسکریپت PHP ایجاد خواهید کرد که به یک پایگاه داده MySQL متصل می شود ، سوابق را دریافت میکند و آنها را در یک صفحه HTML در یک جدول نمایش می دهد. اسکریپت PHP را به دو روش مختلف از مرورگر وب خود آزمایش خواهید کرد. اول ، ایجاد یک اسکریپت بدون هیچ کد صفحه بندی برای دیدن نحوه نمایش سوابق. دوم ، افزودن کد ناوبری صفحه در فایل PHP برای درک نحوه کار به صورت عملی.
کد PHP برای اهداف تصدیقی نیاز به یک کاربر MySQL و اتصال به یک بانک اطلاعاتی نمونه دارد. در این مرحله یک کاربر غیر ریشه برای پایگاه داده MySQL ، یک پایگاه داده نمونه و یک جدول برای تست اسکریپت PHP ایجاد خواهید کرد.
برای شروع به سرور مجازی خود وارد شوید. سپس با دستور زیر به سرور مجازی MySQL خود وارد شوید:
⦁ $ sudo mysql -u root -p
⦁
رمز عبور اصلی سرور مجازی MySQL خود را وارد کرده و برای ادامه ENTER را بزنید. سپس اعلان MySQL را مشاهده می کنید. برای ایجاد یک بانک اطلاعاتی نمونه ، که در این آموزش به آن test_db خواهیم گفت ، دستور زیر را اجرا کنید:
⦁ Mysql> sudo mysql -u root -p
⦁
خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.00 sec)
سپس ، یک test_user ایجاد کنید و به همه امتیازات مربوط به test_db را به کاربر اعطا کنید. PASSWORD را با یک مقدار قوی جایگزین کنید:
⦁ Mysql> GRANT ALL PRIVILEGES ON test_db.* TO ‘test_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;
Output
Query OK, 1 row affected (0.00 sec)
⦁
مجدد امتیازات MySQL را با دستور زیر لود کنید:
⦁ Mysql> FLUSH PRIVILEGES;
⦁
Output
Query OK, 1 row affected (0.00 sec)
سپس ، برای شروع مستقیم کار در پایگاه داده test_db ، به پایگاه داده test_db بروید:
⦁ Mysql> Use test_db;
Output
Database changed
اکنون یک جدول products ایجاد کنید. جدول، محصولات نمونه شما را شامل میشود – برای این آموزش شما فقط به دو ستون برای داده ها نیاز دارید. ستون product_id به عنوان کلید اصلی برای شناسایی منحصر به فرد هر رکورد کار می کند. این ستون روی AUTO_INCREMENT تنظیم می شود تا محصول جدیدی را برای هر مورد درج شده تولید کند. شما می توانید از قسمت product_name برای تفکیک هر مورد با نام استفاده کنید:
⦁ Mysql> Create table products (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50) NOT NULL ) Engine = InnoDB;
Output
Query OK, 0 rows affected (0.02 sec)
برای افزودن 10 محصول برای تست به جدول products عبارات SQL زیر را اجرا کنید:
⦁ Mysql> Insert into products(product_name) values (‘WIRELESS MOUSE’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘BLUETOOTH SPEAKER’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘GAMING KEYBOARD’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘320GB FAST SSD’);
⦁
⦁ Mysql> Insert into products(product_name) values (’17 INCHES TFT’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘SPECIAL HEADPHONES’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘HD GRAPHIC CARD’);
⦁
⦁ Mysql> Insert into products(product_name) values (’80MM THERMAL PRINTER’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘HDMI TO VGA CONVERTER’);
⦁
⦁ Mysql> Insert into products(product_name) values (‘FINGERPRINT SCANNER’);
⦁
این خروجی را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.02 sec)
با اجرای دستور زیر تأیید کنید که محصولات وارد جدول شده اند:
⦁ Mysql> select * from products;
محصولات موجود در خروجی را در دو ستون مشاهده خواهید کرد:
Output
+————+———————–+
| product_id | product_name |
+————+———————–+
| 1 | WIRELESS MOUSE |
| 2 | BLUETOOTH SPEAKER |
| 3 | GAMING KEYBOARD |
| 4 | 320GB FAST SSD |
| 5 | 17 INCHES TFT |
| 6 | SPECIAL HEADPHONES |
| 7 | HD GRAPHIC CARD |
| 8 | 80MM THERMAL PRINTER |
| 9 | HDMI TO VGA CONVERTER |
| 10 | FINGERPRINT SCANNER |
+————+———————–+
10 rows in set (0.00 sec)
از MySQLخارج شوید
⦁ Mysql> quit;
•
با استفاده از پایگاه داده نمونه ، جدول و داده های آزمایشی موجود ، اکنون می توانید اسکریپت PHP ایجاد کنید تا داده ها در یک صفحه وب نمایش داده شود.
مرحله 2 – نمایش رکوردهای MySQL بدون صفحه بندی
اکنون یک اسکریپت PHP ایجاد می کنید که به پایگاه داده MySQL که در مرحله قبل ایجاد کرده اید متصل می شود و محصولات را در یک مرورگر وب لیست می کنید. در این مرحله ، کد PHP شما بدون هیچگونه صفحه بندی اجرا خواهد شد تا نشان دهد که چگونه سوابق جدا نشده در یک صفحه نشان داده می شوند. اگرچه در این آموزش فقط ده رکورد برای اهداف آزمایش دارید ، اما دیدن سوابق بدون صفحه بندی نشان می دهد که چرا تقسیم بندی داده ها در نهایت باعث ایجاد یک تجربه کاربری بهتر و بار کمتر روی سرور مجازی خواهد شد.
با دستور زیر فایل اسکریپت PHP را در روت document وب سایت خود ایجاد کنید:
⦁ $ sudo nano /var/www/html/pagination_test.php
سپس محتوای زیر را به فایل اضافه کنید. به یاد داشته باشید که در مرحله قبل ، PASSWORD را با رمز عبور صحیحی که به test_user اختصاص داده اید ، جایگزین کنید:
/var/www/html/pagination_test.php
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$sql = “select * from products”;
$stmt = $pdo->prepare($sql);
$stmt -> execute();
echo ”
“;while (($row = $stmt -> fetch(PDO::FETCH_ASSOC)) !== false) {
echo “”;echo “”;
echo “”;
echo “”;
}echo ”
“.$row[‘product_id’].” | “.$row[‘product_name’].” |
“;
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
فایل را با فشار دادن CTRL + X ، Y و ENTER ذخیره کنید.
در این اسکریپت شما با استفاده از کتابخانه PDO (PHP Data Object) با اعتبارات دیتابیس که در مرحله 1 ایجاد کرده اید به پایگاه داده MySQL وصل می شوید.
PDO یک رابط کاربری سبک برای اتصال به پایگاه های داده است. لایه دسترسی به اطلاعات، قابل حمل تر است و می تواند در پایگاه های داده های مختلف و فقط با بازنویسی کد مینور کار کند. از آنجا که PDO از دستورات آماده پشتیبانی می کند (ویژگی برای اجرای سریعتر درخواست ها به روشی مطمئن)، از امنیت بیشتری نیز برخوردار است .
سپس ، به APO PDO دستور می دهید تا عبارت select * from products را اجرا کند و محصولات را در جدول HTML بدون صفحه بندی فهرست کند. خط $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); تضمین می کند که انواع داده ها
همانطور که در پایگاه داده ظاهر می شوند، بازگردانده می شوند. این بدان معنی است که PDO ، product_id را به عنوان یک عدد صحیح و product_name را به عنوان یک رشته باز می گرداند. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); به PDO دستور می دهد در صورت بروز خطا، به صورت استثنا عمل کند. برای اشکال زدایی آسان تر ، خطا را در داخل بلوک try{}…catch{} در PHP مشاهده می کنید.
برای اجرای فایل اسکریپت PHP به صورت /var/www/html/pagination_test.php که ایجاد کرده اید ، آدرس زیر را که your-server-IP با آدرس IP عمومی سرور مجازی شما جایگزین شده، مشاهده کنید:
http://your-server-IP/pagination_test.php
صفحه ای را با جدول محصولات خود مشاهده خواهید کرد.
اسکریپت PHP شما مطابق آنچه انتظار می رود کار می کند؛ تمام محصولات در یک صفحه لیست میشوند. اگر هزاران محصول داشتید ، این امر باعث می شود که یک حلقه طلانی ایجاد شود و محصولات از پایگاه داده گرفته شده و در صفحه PHP بارگیری شوند.
برای غلبه بر این محدودیت ، اسکریپت PHP را تغییر داده و بند MySQL LIMIT و برخی پیوندهای navigation را در انتهای جدول قرار می دهید تا قابلیت صفحه بندی را اضافه کنید.
مرحله 3 – اجرای صفحه گذاری با PHP
در این مرحله هدف شما تقسیم داده های آزمایشی در چندین صفحه قابل کنترل است. این کار نه تنها باعث افزایش خوانایی می شود بلکه از منابع سرور مجازی نیز با کارایی بیشتری استفاده می کند. شما اسکریپت PHP را که در مرحله قبل ایجاد کرده اید برای تنظیم صفحه بندی اصلاح می کنید.
برای این کار ، بند MySQL LIMIT را اجرا خواهید کرد. قبل از افزودن این متن به اسکریپت ، بیایید نمونه ای از دستور MySQL LIMIT را ببینید:
⦁ Mysql> Select [column1, column2, column n…] from [table name] LIMIT offset, records;
⦁
بند LIMIT دو آرگومان را همانند پایان این عبارت برمیدارد. مقدار افست (offset ) تعداد رکورد هایی است که باید قبل از ردیف اول از آن پرش کنید. records حداکثر تعداد سوابق را برای نمایش در هر صفحه تعیین می کند.
برای آزمایش صفحه بندی ، سه رکورد در هر صفحه نمایش می دهید. برای به دست آوردن تعداد کل صفحات ، باید کل سوابق را از جدول خود با ردیف هایی که می خواهید در هر صفحه نمایش دهید تقسیم کنید. سپس با استفاده از عملکرد PHP Ceil ، همانطور که در مثال زیر کد PHP زیر نشان داده شده است ، مقدار حاصل را به نزدیکترین عدد صحیح گرد کنید:
$ $total_pages=ceil($total_records/$per_page);
در زیر نسخه اصلاح شده اسکریپت PHP با کد صفحه بندی کامل آمده است. برای درج کدهای صفحه بندی و ناوبری ، فایل /var/www/html/pagination_test.php را باز کنید:
⦁ $ sudo nano /var/www/html/pagination_test.php
⦁
سپس کد هایلایت شده زیر را به فایل خود اضافه کنید:
/var/www/html/pagination_test.php
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
/* Begin Paging Info */
$page = 1;
if (isset($_GET[‘page’])) {
$page = filter_var($_GET[‘page’], FILTER_SANITIZE_NUMBER_INT);
}
$per_page = 3;
$sqlcount = “select count(*) as total_records from products”;
$stmt = $pdo->prepare($sqlcount);
$stmt->execute();
$row = $stmt->fetch();
$total_records = $row[‘total_records’];
$total_pages = ceil($total_records / $per_page);
$offset = ($page-1) * $per_page;
/* End Paging Info */
$sql = “select * from products limit :offset, :per_page”;
$stmt = $pdo->prepare($sql);
$stmt->execute([‘offset’=>$offset, ‘per_page’=>$per_page]);
echo ”
“;while ( ($row = $stmt->fetch(PDO::FETCH_ASSOC) ) !== false) {
echo “”;echo “”;
echo “”;
echo “”;
}echo ”
“.$row[‘product_id’].” | “.$row[‘product_name’].” |
“;
/* Begin Navigation */
echo ”
“;echo “”;if ($page-1 >= 1) {
echo “”;
}if ($page+1 <= $total_pages) {
echo “”;
}echo “”;echo ”
Previous | Next |
“;
/* End Navigation */
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
در فایل خود از پارامترهای دیگری برای اجرای صفحه بندی استفاده کرده اید:
⦁ $page: این متغیر صفحه فعلی را در اسکریپت شما نگه می دارد. هنگام حرکت بین صفحات ، اسکریپت شما با استفاده از متغیر $ _GET [‘page’] یک پارامتر URL به نام page را بازیابی می کند.
⦁ $per_page: این متغیر حداکثر رکوردی را که می خواهید در هر صفحه نمایش داده شود ، در اختیار دارد. در مورد خاص شما ، بهتر است در هر صفحه سه محصول لیست کنید.
⦁ $ total_records: قبل از لیست کردن محصولات ، شما یک دستور SQL را برای دریافت تعداد کل سوابق در جدول هدف خود اجرا میکنید و آن را به عنوان متغیر $ total_records تعیین میکنید.
⦁ $ offset: این متغیر نشان دهنده کل سوابقی است که باید قبل از ردیف اول از آن بگذرید. این مقدار توسط اسکریپت PHP شما با استفاده از فرمول $ offset = ($ page-1) * $ per_page محاسبه می شود. ممکن است این فرمول را با پروژه های صفحه بندی PHP تطبیق دهید. به یاد داشته باشید که می توانید متغیر $ per_page را متناسب با نیاز خود تغییر دهید. به عنوان مثال ، اگر در حال اجرای یک وب سایت یا مقدار دیگری برای یک دستگاه تلفن همراه هستید ، ممکن است آن را به مقدار 50 تغییر دهید تا پنجاه مورد در هر صفحه نمایش داده شود.
باین بار هم آدرس IP خود را در یک مرورگر ببینید و your_server_ip را با آدرس IP عمومی سرور مجازی خود جایگزین کنید:
http://your_server_ip/pagination_test.php
اکنون دکمه های navigation را در انتهای صفحه مشاهده خواهید کرد. در صفحه اول یک دکمه Previous دریافت نمی کنید. همین مورد در صفحه آخر نیز اتفاق می افتد و دکمه صفحه بعدی یعنی Next را نمی بینید. همچنین ، توجه داشته باشید که با مراجعه به هر صفحه ، چگونه پارامتر URL صفحه تغییر می کند.
پیوندهای navigation در انتهای صفحه با استفاده از قطعه کد PHP زیر از فایل شما حاصل می شود:
/var/www/html/pagination_test.php
. . .
if( $page-1>=1) {
echo ”
“;
}
if( $page+1<=$total_pages) {
echo ”
“;
}
. . .
در اینجا ، متغیر $page تعداد صفحه فعلی را نشان می دهد. سپس برای به دست آوردن صفحه قبلی ، کد ، 1 را از متغیر کم خواهد کرد. بنابراین ، اگر در صفحه 2 هستید ، فرمول (1-2) نتیجه 1 را به شما می دهد و این صفحه قبلی است که در لینک ظاهر می شود. با این حال به خاطر داشته باشید که در صورت نتیجه بالاتر یا برابر با 1 ، صفحه قبلی را نشان می دهد.
به همین ترتیب ، برای رسیدن به صفحه بعد ، به متغیر $page عدد 1 را اضافه می کنید و همچنین باید اطمینان حاصل کنید که نتیجه $page که به پارامتر URL صفحه اضافه می کنیم از کل صفاتی که در کد PHP محاسبه کرده اید بیشتر نباشد.
در این مرحله ، اسکریپت PHP شما با صفحه بندی کار می کند و شما قادر به اجرای بند MySQL LIMIT برای navigation بهتر رکورد هستید.
نتیجه
در این آموزش ، صفحه بندی را در MySQL با PHP در سرور مجازی اوبونتو 18.04 پیاده سازی کردید. شما می توانید با استفاده از اسکریپت PHP از این مراحل با یک مجموعه رکورد بزرگتر استفاده کنید تا صفحه بندی را انجام دهید. با استفاده از صفحه بندی در وب سایت یا برنامه خود می توانید navigation بهتر کاربر و استفاده بهینه از منابع را در سرور مجازی خود ایجاد کنید.
از این لینک ها می توانید بهینه سازی بیشتری برای بانک اطلاعاتی و سایر کارهای پایگاه داده خود انجام دهید:
⦁ نحوه بهینه سازی MySQL با Query Cache در اوبونتو ⦁ 18.04
⦁ مقدمه ای بر درخواست ها در MySQL
⦁ نحوه رفع مشکلات در MySQL
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
مراحل ایمن سازی Apache HTTP در FreeBSD 12 – بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16
درک Objectهای Map و Set در JavaScript – استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18
نحوه راه اندازی Eclipse Theia Cloud IDE در اوبونتو – چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04
نحوه استفاده از Cron برای خودکارسازی کارها در CentOS 8 – چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی
نحوه نوشتن کد ناهمگام (غیر همزمان) در Node.js – نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18
راه اندازی اولیه سرور با CentOS 8 – تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes
نحوه تنظیم کلیدهای SSH در CentOS 8 – نحوه نصب و استفاده از PostgreSQL در CentOS 7
نحوه ساختن یک برنامه Node.js با Docker [Quickstart] – چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو
چگونه می توان هاست های مجازی Apache را در اوبونتو – مدیریت DNS با استفاده از DNSControl در Debian 10
نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 – چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7
نحوه نصب و استفاده از TimescaleDB در CentOS 7 – نحوه نصب Apache Kafka در Debian 10
نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 – نحوه نصب وردپرس با OpenLiteSpeed در اوبونتو 18.04
استفاده از Cron برای خودکارسازی کارها در اوبونتو 18 –
نصب و استفاده ازRadamsa برای فوز کردن برنامه ها روی Ubuntu 18 –
نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10 –
نحوه نصب Docker Compose در Debian 10 –
چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد –
نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04 –
نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7 –
بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18 –
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/