Vissza a bloghoz

Lapozás alkalmazása több rekord megjelenítéséhez MySQL és PHP használatával Ubuntu 20.04 rendszeren

Lapozás alkalmazása több rekord megjelenítéséhez MySQL és PHP használatával Ubuntu 20.04 rendszeren

Bevezetés

Lapozás egy fontos fogalom az adatvezérelt alkalmazások építésében. Amikor rekordokat kérdezünk le az adatbázisból, nagy számú rekordot kaphatunk vissza. Például, ha aktív felhasználókra vagy egy adott helyhez tartozó felhasználókra futtatunk le egy lekérdezést, akár több száz vagy több ezer felhasználó is visszatérhet. Ennek a hatalmas mennyiségű rekordnak a megjelenítése egyetlen weboldalon nem felhasználóbarát megoldás, mivel túlterhelheti a felhasználót, valamint tönkreteheti a felhasználói élmény gördülékenységét.

Ezért előnyösebb megoldás a rekordok számának korlátozása. Ez a lapozás fogalma. Más szóval, a rekordok számát oldalakra osztjuk, majd megjelenítjük az oldalt. Egyetlen oldalon tíz, tizenöt vagy bármilyen más ésszerű mennyiségű rekord szerepelhet, amely megjeleníthető a felhasználói felületen.

Bár a lapozás javíthatja az alkalmazás általános felhasználói élményét, gyorsabbá is teheti az alkalmazást, mivel kevesebb rekordot kell lekérnünk. Ezáltal kevesebb adat továbbítódik a hálózaton a kliens és a szerver között, ami csökkenti a késleltetési időt.

Ebben az útmutatóban egy olyan PHP kódot fogunk készíteni, amely csatlakozik az adatbázishoz, és megvalósítjuk a lapozást a MySQL adatbázis és annak LIMIT záradéka segítségével.

Előfeltételek

Az útmutató követéséhez a következőkre lesz szüksége:

  1. Az Ubuntu legújabb verziója, telepítve és futva. Kövesse a Hogyan állítsa be Ubuntu szerverét útmutatót ha segítségre van szüksége.

  2. Szüksége lesz a PHP és a MySQL telepítésére is. A PHP és a MySQL beállításához van egy útmutatónk: LAMP Stack setup – Linux Apache MySQL PHP.

1. lépés — Adatbázis-felhasználó és tesztadatbázis beállítása

Ebben az útmutatóban létrehozzuk az adatbázis-kapcsolatot a MySQL adatbázissal, és lekérjük a rekordokat. Ezek a rekordok egy HTML oldalon fognak megjelenni egy táblázat (table) elemben. A kapcsolat létrehozásához és a rekordok megjelenítéséhez egy PHP szkriptet fogunk használni. Amint készen vagyunk az adatbázis-kapcsolattal, tesztelni fogjuk az alkalmazásunkat lapozással és lapozás nélkül is. Az így történő tesztelés lehetővé teszi számunkra, hogy megértsük, hogyan működik a lapozás a gyakorlatban.

A MySQL adatbázishoz való csatlakozáshoz szükségünk lesz egy minta MySQL adatbázisra és a felhasználó hitelesítési adataira a MySQL adatbázishoz való csatlakozáshoz. Ebben a lépésben létrehoz egy nem-root felhasználót a MySQL adatbázisához, egy mintaadatbázist és egy táblát a PHP szkript teszteléséhez.

Először jelentkezzen be a szerverére. Ezután jelentkezzen be a MySQL szerverre az alábbi paranccsal:

A rendszer kérni fogja a root felhasználó jelszavát. Írja be a jelszót, majd nyomja meg az Enter billentyűt a továbblépéshez. Ezután hozzon létre egy mintaadatbázist, melynek neve test_db, amelyet az útmutatóban fogunk használni. Új adatbázis létrehozásához futtassa az alábbi parancsot:

A MySQL szerver kimenetén látható lesz, hogy egy sor módosult. Ezután létre kell hoznunk egy új felhasználót ehhez az adatbázishoz. Ennek a felhasználónak minden jogosultságot megadunk. Gyakorlati alkalmazásoknál azonban ügyeljen a jogosultságok korlátozására. A felhasználónkat test_user-nek fogjuk hívni. Az alábbi parancsban cserélje ki a PASSWORD részt egy erős jelszóra:

Miután a felhasználó létrejött, frissítse a jogosultságokat:

Most, hogy mind a(z) test_user, mind a(z) test_db készen áll, használja a test_db adatbázist táblák létrehozásához. A(z) test_db adatbázisra való váltáshoz futtassa az alábbi parancsot:

Amint a kimenetben látjuk, hogy az adatbázis megváltozott, készen állunk a táblánk létrehozására. Létrehozunk egy új táblát Products néven a termékek tárolására. Céljainknak megfelelően ebben a táblában csak két oszlopra lesz szükségünk: product_id és product_name. A product_id-t AUTO_INCREMENT-re állítjuk, így az értéke minden alkalommal növekedni fog, amikor új terméket adunk hozzá. A másik, product_name nevű oszlop a termék nevének tárolására szolgál majd. A product_name oszlop segítségével különböztetjük meg az egyes termékeket név alapján:

Most hozzáadunk néhány terméket ehhez az újonnan létrehozott táblához. Ehhez futtassa az alábbi parancsokat:

Annak ellenőrzésére, hogy ezek a termékek bekerültek-e a táblába, futtassa az alábbi parancsot:

Ha látja a fent megadott termékeket, készen áll a továbblépésre. Lépjen ki a MySQL adatbázisból az alábbi paranccsal:

Most, hogy beállítottuk a MySQL adatbázist és megadtuk a tesztadatokat, készen állunk a PHP szkript megírására, amely csatlakozik ehhez az adatbázishoz és lekéri a rekordokat.

2. lépés – Rekordok lekérése és megjelenítése lapozás nélkül

Ahogy fentebb megbeszéltük, először lapozás nélkül jelenítjük meg a rekordokat. Készítünk egy PHP szkriptet, amely csatlakozik a MySQL adatbázishoz és lekéri a rekordokat. Csatlakozni fogunk a fent létrehozott test_db adatbázishoz a test_user felhasználóval, és lekérjük a rekordokat.

A products táblánkban jelenleg mindössze tíz rekord található. Sok felhasználó számára talán nem nyilvánvaló, hogy szükség van-e a lapozásra vagy sem. Az alkalmazás lapozás nélküli tesztelése azonban rávilágít arra, hogyan segíti az az alkalmazás általános élményét. Azt is megértjük majd, hogyan segít az adatok felosztása a jobb felhasználói élmény kialakításában, és hogyan csökkenti a szerver terhelését.

A PHP szerverén, a webhely mappájának dokumentumgyökerében futtassa az alábbi parancsot:

sudo nano /var/www/html/pagination_test.php

Most adja hozzá az alábbi tartalmat ehhez a fájlhoz. Ügyeljen arra, hogy a PASSWORD részt helyettesítse a következő felhasználó jelszavával: test_user:

Mentse el a fájlt. Mielőtt továbblépnénk, összefoglaljuk, mit csináltunk fent:

  1. Először csatlakoztunk a MySQL adatbázishoz, és ehhez a PHP Data Object (PDO) könyvtárat használtuk. A MySQL adatbázishoz való csatlakozáshoz a fent használt MySQL felhasználó hitelesítő adatait használtuk. A PDO egy rendkívül hasznos könyvtár, amelyet az adatbázishoz való csatlakozásra használnak. Megkönnyíti az adathozzáférési réteg kódolását, és lehetővé teszi a különböző adatbázisokhoz való csatlakozást az alkalmazás jelentős átírása nélkül. A PDO előkészített utasításokat használ, ami biztosítja, hogy a biztonság ne sérüljön. Így a lekérdezések végrehajtása biztonságosan történik.

  1. Ezután a PDO API-t használtuk a select * from products utasítás végrehajtásához. A $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false) biztosítja, hogy a PHP-ban lévő adattípusok megegyezzenek az adatbázisban lévőkkel. Így a product_id és a product_name rendre egész számként és karakterláncként jelennek meg.

  2. A $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); arra utasítja a PDO-t, hogy hiba esetén kivételt dobjon. Ezáltal könnyen elkaphatjuk a kivételt a try catch blokkban, és szükség szerint kezelhetjük azt.

Most, hogy a szkriptünk készen áll, futtatnunk kell azt. Ehhez nyissa meg a böngészőjét, és látogasson el a következő URL-re: /var/www/html/pagination_test.php. Győződjön meg róla, hogy az URL-hez hozzáfűzi a szervere IP-címét. Ha helyben futtatja, az URL a következő lesz: http://localhost/var/www/html/pagination_test.php.

A következő kimenetet fogja látni:

Applying Pagination to Display Multiple Records using MySQL with PHP image 1

Itt a termékeink lekérésre kerülnek és megjelennek az oldalon. Most képzelje el, ha több száz termékünk lenne. Ez egy hosszú ciklust eredményezne az adatok lekéréséhez és az oldalon való megjelenítéséhez. Ez növelné az oldal betöltési idejét.

A következő részben módosítani fogjuk a PHP szkriptet, és beillesztjük a MySQL LIMIT záradékot. Ez megoldja a nagy számú rekord megjelenítésének problémáját. Hozzáadjuk az oldalszámozási linkeket, hogy a felhasználó navigálhasson az oldalak között.

3. lépés – Oldalszámozás beállítása PHP használatával

Ebben a lépésben beállítjuk az oldalszámozást PHP használatával, hogy az adatokat több táblázat segítségével jelenítsük meg. Az oldalszámozás megvalósításához módosítani fogjuk az előző lépésben megírt szkriptet.

A MySQL adatbázis LIMIT záradékát fogjuk használni. Mielőtt ezt hozzáadnánk a szkripthez, lássunk egy példát a MySQL LIMIT szintaxisára:

A fenti utasításban láthatjuk, hogy a LIMIT záradéknak offset és records argumentumai vannak. offset megadja, hogy hány rekordot kell kihagyni, és a records megadja az oldalonként megjelenítendő vagy az adatbázisból lekérdezendő rekordok maximális számát.

Most, hogy már tudjuk, hogyan működik az oldalszámozás, nézzük meg, hogyan fogjuk megvalósítani. Oldalanként három rekordot fogunk megjeleníteni. Tehát, ha tíz rekord van az adatbázisunkban, akkor négy oldalunk lesz, ha a rekordok teljes számát elosztjuk az oldalankénti rekordok számával. Mivel az eredmény nem biztos, hogy egész szám lesz, a PHP Ceil függvényét fogjuk használni, hogy a legközelebbi egész számra kerekítsünk az egész számú eredmény eléréséhez. Alább látható egy egyszerű kódrészlet a Ceil függvény bemutatására:

Most hozzáadjuk az oldalszámozáshoz szükséges kódot. Az oldalszámozás engedélyezéséhez és a navigációs linkek hozzáadásához nyissa meg a /var/www/html/pagination_test.php fájlt az alábbi paranccsal:

Ezután cserélje ki a fájl tartalmát az alábbi kódra:

Íme a kód összefoglalása:

  1. Tárolnunk kell az információt arról az oldalról, amelyen éppen állunk. Ehhez a $page változót használjuk. A $page változót használjuk arra, hogy kinyerjük az aktuális oldalt a $_GET[page] változó segítségével.

  2. Ezután meg kell határoznunk, hogy hány elemet jelenítünk meg egy oldalon. Ehhez a $per_page változó. Itt oldalanként csak három terméket jelenítünk meg.

  3. Ahogy fentebb megbeszéltük, szükségünk van az adatbázisban lévő rekordok teljes számára. Ez azért szükséges, hogy meg tudjuk határozni az oldalak teljes számát. A $total_records változó tárolja ezt az információt.

  4. Végül tudnunk kell, hány rekordot kell kihagyni. Például, ha a második oldalon vagyunk, ki kell hagynunk az adatbázis első három rekordját. Az $offset változót használjuk ennek az információnak a tárolására. Ezt az információt minden oldalbetöltéskor kiszámítottuk a következő képlet segítségével: $offset=($page-1)*$per_page. Ha bármilyen más számú elemet szeretne megjeleníteni, megadhatja az értéket a $per_page változóban.

  5. A navigációs gombok megjelenítéséhez az alábbi kódot használjuk:

A logika az, hogy a $page az aktuális oldal tárolására szolgál. Ha meg akarjuk jeleníteni az előző opciót az oldalon, a szkript kivon egyet a $page változó értékéből. Ha az eredmény nagyobb vagy egyenlő, mint egy, az előző opció megjelenik az oldalon.

Hasonlóképpen, a következő opció megjelenítéséhez hozzáadunk egyet a $page változóhoz. Itt biztosítjuk, hogy az összeadás eredménye ne haladja meg az oldalak teljes számát a $total_pages változóban.

Ezután ideje ellenőrizni az oldalt. Nyissa meg a böngészőt, és keresse fel az oldalt a korábban használt URL-címmel:

Az alábbi kimenetet fogja látni:

Applying Pagination to Display Multiple Records using MySQL with PHP image 2

table2

table

Itt végre implementálta a lapozást a PHP szkriptben a MySQL LIMIT záradékának használatával. A lapozás alkalmazásában történő megvalósításával jobb módot kap a több rekord közötti navigálásra.

Összegzés

Ebben az útmutatóban megvizsgáltuk, hogyan lehet lapozást megvalósítani PHP és MySQL használatával Ubuntu rendszeren. Ezen lépések segítségével olyan alkalmazásokat építhet, amelyek megfelelően képesek megjeleníteni nagy számú rekordot, oldalakra osztva a hatékony kezelés érdekében.

Ezenkívül további hasznos útmutatóink is vannak a PHP és MySQL használatáról Ubuntu rendszeren:

Kellemes számítógéphasználatot!

author

Shreyas Patil

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.