سه شنبه ۱۱ اردیبهشت ۰۳

نحوه اجراي صفحه گذاري در MySQL با PHP روي اوبونتو 18.04

۵ بازديد

مقدمه
صفحه گذاري مفهوم محدود كردن تعداد رديف هاي برگشت يافته در يك مجموعه ثبت شده به صفحات جداگانه و منظم است تا امكان جهت گيري آسان بين آنها فراهم شود ، بنابراين وقتي يك مجموعه داده بزرگ وجود دارد مي توانيد صفحه گذاري خود را پيكربندي كنيد تا فقط تعداد مشخصي از رديف ها را در هر صفحه برگردانيد. به عنوان مثال ، وقتي يك فروشگاه اينترنتي هزاران محصول دارد، صفحه بندي مي تواند با كاهش تعداد اقلام ذكر شده در يك صفحه ، از نمايش بيش از حد كالا به كاربران جلوگيري كند ، زيرا اغلب بعيد است كه كاربر نياز به مشاهده همه محصولات داشته باشد. مثال ديگر برنامه اي است كه سوابق يك تلفن همراه را نشان مي دهد. فعال كردن صفحه بندي در چنين مواردي ، سوابق را به چندين صفحه تقسيم مي كند كه مي توانند در صفحه بهتر ظاهر شوند.
علاوه بر مزاياي بصري براي كاربران نهايي ، صفحه بندي باعث مي شود برنامه ها سريعتر شوند زيرا باعث مي شود تعداد سوابق برگشتي همزمان كاهش يابد. اين كار داده هاي لازم براي انتقال بين مشتري و سرور مجازي را محدود مي كند و به حفظ منابع سرور مجازي مانند 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 ”

Previous

“;
}

if( $page+1<=$total_pages) {
echo ”

Next

“;
}
. . .

در اينجا ، متغير $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 در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تاييد صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سريع)

نحوه راه اندازي Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa براي فوز كردن برنامه ها (تكنيك تست خودكار نرم افزار) و خدمات شبكه روي Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

چگونه مي توان با كتابخانه (library) درخواست ها در پايتون شروع به كار كرد

نحوه اجراي صفحه گذاري در MySQL با PHP روي اوبونتو 18.04

نحوه تنظيم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندي برنامه Laravel 6 براي توسعه با Docker Compose در اوبونتو 18.04

نحوه بهينه سازي درخواست هاي MySQL با ذخيره سازي ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible براي نصب و راه اندازي وردپرس با LAMP در اوبونتو 18.04

چگونه مي توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظيم كرد (شروع سريع)

چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

نحوه پيكربندي يك خوشه Galera با MySQL در سرورهاي اوبونتو 18.04

نحوه تهيه نسخه پشتيبان و بازيابي يك خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه مي توان پلتفرم Eclipse Theia Cloud IDE را روي اوبونتو 18.4 تنظيم كرد

نحوه استقرار و مديريت DNS با استفاده از DNSControl در Debian 10

چگونه مي توان پلتفرم Cloud IDE كد سرور را روي CentOS 7 تنظيم كرد

كلمات كليدي خريد سرور

خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي هلند – خريد وي پي اس – خريد vps هلند – خريد vps فرانسه

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.