LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Dynamické načítání dat z databáze pomocí jQuery a PHP

Načítání dat z databáze lze provést mnoha způsoby. U některých z nich ale proběhne vizuálně nepříjemné znovunačtění stránky (refresh), které může kazit dojem jinak pěkné webové prezentace. V tomto článku podrobně vysvětlím, jak se této vadě na kráse vyhnout.

6.3.2013 00:00 | Vladimír Macháček | Články autora | přečteno 16584×

Možnosti použití

Dynamické načítání se dá použít teoreticky všude. Ankety, chaty, komentáře k článkům, hry, aplikace na webu a samotné načítání obsahu jako např. článků, novinek a obrázků. Další možnost je třeba odesílání článků, emailů a úprava právě odeslaného komentáře, což je např. na Facebooku. Největší nevýhoda je asi ta, že pokud bude mít uživatel vypnutý javascript, tak většina aplikací, anket a dynamické načítání apod. používající tuto knihovnu, nebudou fungovat.

Kde začít

Nejdříve by bylo vhodné si ujasnit, jak budeme postupovat, jaká bude struktura stránky a co chceme za výsledek. V tomto návodu budeme načítat článek z databáze a budeme chtít vypsat nadpis, anotaci a samotný článek. Chceme tedy, aby se po kliknutí na odkaz v menu načetl článek bez přenačítání stránky a zobrazil se na určitém místě. Při načítání dat, pro lepší dojem a vzhled, přidáme loader (obrázek při načítání) nebo progressbar, který je zabudovaný v každém prohlížeči, který podporuje tagy HTML5. Nemusí tedy fungovat v každém prohlížeči! Progressbar je grafické zobrazení probíhajícího procesu. Je to taková ikona. Loader je animovaný obrázek ve formátu gif. Je ho možné vytvořit v jakémkoliv grafickém programu, ve kterém je možnost vytvářet animace. Tím nejznámějším je asi Photoshop, Corel a Gimp. Na internetu je mnoho stránek, kde se dá tento obrázek vytvořit bez větší námahy. Později v článku uvedu, jak zprovoznit obě možnosti zobrazení procesu.


Pro zobrazení ukázky je nutné mít povolený javascript a prohlížeč, který podporuje tagy HTML5!

První kroky

Když jsme si ujasnili úlohu, můžeme se pustit do samotného programování. Vytvoříme si 3 soubory (index.php, load.php a load.js). Potom si stáhneme knihovnu jQuery. Knihovnu lze také načítát přímo ze stránek vydavatele. Stačí pouze do atributu href zadat adresu souboru. U tohoto příkladu budu ale používat pouze staženou knihovnu.

Teď si vytvoříme strukturu v souboru index.php. Budeme mít nějaký odkaz na článek a div, do kterého se budou načítát data. Div, do kterého budeme načítat data, bude content. Struktura bude následující:


<html>
<head>
<script src="js/jquery.js"></script>
<script src="js/load.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dynamické načítání dat</title>
</head>

<body>
	<div id="menu">
    	<a href="index.php?id-article=1">1.článek</a>
        <br />
        <a href="index.php?id-article=2">2.článek</a>
    </div>
	<div id="content">
    	<div id="article">
        	<?php 
            	include('php/load.php');//Načtení souboru load.php
            ?>
        </div>
    </div>
</body>
</html>

Load.php

Tento skript bude získávat data z databáze a vypisovat je. Skript funguje následovně:

  1. Nejdříve se provede připojení k databázi.
  2. Pokud se připojení podařilo, provede se získání a následný výpis dat z databáze. Pokud ne, skript se ukončí a vypíše se chybová hláška.

Nejdříve si vytvoříme všechny proměnné pro připojení a získání článku.


<?php 
$dblogin='root';//Uživatelské jméno
$dbpassword='password';//Uživatelské heslo
@$idarticle=$_GET['id-article'];//Id požadovaného článku
?>

Teď vytvoříme try-catch blok s připojením a chybovou hláškou.


<?php 
$dblogin='root';//Uživatelské jméno
$dbpassword='password';//Uživatelské heslo
@$idarticle=$_GET['id-article'];//Id požadovaného článku
//try-catch blok
try {
	$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', $dblogin, $dbpassword);//Připojení k databázi
    }
} catch (Exception $e) {//Pokud se připojení nepodařilo
    exit("Nelze se připojit k databázi ".$e->getMessage());//Vypiš chybovou hlášku a chybu
	}
?>

Jako další si připravíme dotaz, ošetříme jej proti SQL injection a provedeme jej.


<?php 
$dblogin='root';//Uživatelské jméno
$dbpassword='password';//Uživatelské heslo
@$idarticle=$_GET['id-article'];//Id požadovaného článku
//try-catch blok
try {
	$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', $dblogin, $dbpassword);//Připojení k databázi
	$stmt = $db->prepare("SELECT * FROM articles WHERE id=?");//Připravení dotazu
	$stmt ->bindParam(1, $idarticle, PDO::PARAM_INT);//Ošetření dotazu proti SQL injection
	$stmt->execute();//Provedení dotazu
	}
} catch (Exception $e) {//Pokud se připojení nepodařilo
    exit("Nelze se připojit k databázi ".$e->getMessage());//Vypiš chybovou hlášku a chybu
	}
?>

Nakonec vypíšeme všechna nalezená data. Protože očekáváme jen jeden článek = jeden řádek z databáze, tak použijeme metodu fetch(). Pokud by bylo řádků více, použijeme metodu fetchAll().


<?php 
$dblogin='root';//Uživatelské jméno
$dbpassword='password';//Uživatelské heslo
@$idarticle=$_GET['id-article'];//Id požadovaného článku
//try-catch blok
try {
	$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', $dblogin, $dbpassword);//Připojení k databázi
	$stmt = $db->prepare("SELECT * FROM articles WHERE id=?");//Připravení dotazu
	$stmt ->bindParam(1, $idarticle, PDO::PARAM_INT);//Ošetření dotazu proti SQL injection
	$stmt->execute();//Provedení dotazu
	while ($row = $stmt->fetch()) {//Vypsání dat
    	echo '<div class="article">'.$row['title'].'<thr /><br />'.$row['annotation'].'<hr /><br />'.$row['article'].'</div>';
	}
} catch (Exception $e) {//Pokud se připojení nepodařilo
    exit("Nelze se připojit k databázi ".$e->getMessage());//Vypiš chybovou hlášku a chybu
	}
?>

Load.js

Odesílání dat je prováděno metodou $_GET[]. Tento skript bude provádět následující operace:

  1. Nejdříve se zkontroluje, zda je dokument načtený a připravený.
  2. Pokud ano, začne se zaznamenávat klikání na odkazy v menu.
  3. Pokud bylo kliknuto na nějaký odkaz v menu, získá se jeho atribut href a k tomu se přičte div article.
  4. Obsah divu content se smaže a na jeho místo se vloží zobrazení procesu.
  5. Jakmile se získají data z databáze, smaže se zobrazení procesu a získaná data se vypíši do divu content.
Nejdříve zaznamenáme načtení dokumentu, kliknutí na odkaz a vytvoříme proměnou content, ve které bude uložen atribut odkazu a php skript obsažený v divu article.

// JavaScript Document
$(document).ready(function(){//Zaznamenání načtení dokumentu
	$('#menu a').click(function(){//Zaznamenání kliknutí na odkaz v menu
			var content = $(this).attr('href')+' #article';//Vytvoření proměnné content a získání atributu href;
		})
	})

Potom zobrazíme průběh procesu pomocí jedné z dříve jmenovaných možností.


// JavaScript Document
$(document).ready(function(){//Zaznamenání načtení dokumentu
	$('#menu a').click(function(){//Zaznamenání kliknutí na odkaz v menu
    		var content = $(this).attr('href')+' #article';//Vytvoření proměnné content a získání atributu href;
			$('#content').html('<img src="images/loader.gif" id="loader" />');//Zobrazení procesu
		})
	})

Pokud nechcete zobrazovat proces pomocí obrázku můžete použít progressbar. Stačí akorát zaměnit kód v závorce a to následovně.


$('#content').html('Načítám...<br /><progress></progress>')//Zobrazení procesu;

Nakonec načteme data a vypíšeme je v divu content.


// JavaScript Document
$(document).ready(function(){//Zaznamenání načtení dokumentu
	$('#menu a').click(function(){//Zaznamenání kliknutí na odkaz v menu
			var content = $(this).attr('href')+' #article'//Vytvoření proměnné content a získání atributu href;
			$('#content').html('Načítám...<br /><progress></progress>');
			$('#content').load(content),//Načtení obsahu z proměnné
				function(output) {
					$('#content').html(output);//Výpis obsahu na požadované místo
					}
			return false;
		})
	})

Závěrem

Jak je vidět již na první pohled, tak načítání dat pomocí knihovny jQuery a PHP není nic složitého. Dle mého názoru je to jednoduché a efektivní. Data se načítají rychleji a to bez zbytečného problikávání a skákání stránky. Pro uživatele je to určitě příjemnější.

Verze pro tisk

pridej.cz

 

DISKUZE

Dvě drobnosti k článku 6.3.2013 08:12 Martin Chudoba
JQuery? 6.3.2013 11:28 Matěj Andrle
  |- Re: JQuery? 6.3.2013 13:20 Vladimír Macháček
  L Re: JQuery? 6.3.2013 16:11 Martin Chudoba
    L Re: JQuery? 6.3.2013 17:06 Matěj Andrle
      L Re: JQuery? 7.3.2013 07:43 Martin Chudoba




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

18.6.2018 0:43 /František Kučera

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.


Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze