PHP prakticky/Výběr článku z databáze

Z Wikiknih
Skočit na navigaci Skočit na vyhledávání

Abychom mohli vybírat z databáze, potřebujeme samozřejmě databázi a tabulku; tabulka bude obsahovat jen základní údaje, poté ji můžete rozšířit.

CREATE TABLE `clanky` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nazev` VARCHAR( 255 ) NOT NULL ,
`popis` TEXT NOT NULL ,
`clanek` TEXT NOT NULL ,
) ENGINE = MYISAM ;
INSERT INTO `clanky` (`nazev`, `popis`, `clanek`) VALUES
('Článek č. 1', 'Popis prvního článku', 'Tady je hlavní text prvního článku.'),
('Článek č. 2', 'Popis druhého článku je o něco delší', 'Text druhého článku.');

Připojení k DB[editovat]

Vytvoříme si soubor, je jedno jak ho pojmenujete, já zvolím connect.php, budeme ho používat k připojení do databáze.

<?php
$db_server = "localhost"; // server do kterého se budeme připojovat
$db_jmeno = "user"; // jméno pro připojení
$db_heslo = "password"; // heslo pro připojení
$db_vyber = "test"; // název databáze
mysql_connect($db_server, $db_jmeno, $db_heslo)
  or die("Nepodařilo se připojit do databáze.");
mysql_select_db($db_vyber)
  or die("Nepodařilo se vybrat databázi");
?>

Výběr a zpracování údajů z databáze[editovat]

Ve zkratce tento skript funguje tak, že příkazem include připojíme ke zpracování i dříve vytvořený soubor connect.php. URL pro zobrazení článku s identifikačním číslem 1 by měla podobu: http://nejaka.adresa.cz/vyber_clanku.php?id_clanku=1. Globální pole $_GET obsahuje všechny informace předávané v adresním řádku prohlížeče. Na řádku 4 zjišťujeme pomocí funkce isset(), zda bylo v URL zadáno ID článku (zde je příklad uvedený tak, že proměnná bude nastavena vždy), pokud bude, tak budeme pokračovat s vykonáváním skriptu.

Z globálního pole $_GET načteme identifikaci hledaného článku a příkazem $id = (int)$id ji přetypujeme na číslo. To je nutné jako ochrana před SQL injection. Na řádku 7 uložíme do proměnné $dotaz SQL dotaz v podobě SELECT id, nazev, popis, clanek FROM clanky WHERE id=" . $id . " LIMIT 1. Tento dotaz nám z tabulky clanky vytáhne sloupce id, nazev, popis a clanek, vytáhne pouze jediný (LIMIT 1) a to ten, který je určený proměnnou $id.

Na dalším, osmém, řádku provedeme pomocí funkce mysql_query() dotaz uložený v proměnné $dotaz a výsledek uloží do proměnné $vysledek, tuto potom na dalším řádku použijeme jako parametr funkce mysql_fetch_array(), která nám zpracovaný dotaz uloží do jmenného pole s názvem $data. Dále na 11. řádku pomocí funkce empty() testujeme, jestli se v poli $data nachází nějaká hodnota. Pokud ano, tak na dalších řádcích vypíšeme text článku, pokud ne, tak napíšeme chybovou hlášku.

 1 <?php
 2 include "connect.php";
 3 
 4 if(isset($_GET['id_clanku'])) { // zpracuje, pokud je vybráno ID v URL adrese
 5     $id = $_GET['id_clanku']; 
 6     $id = (int) $id; // přetypování
 7     $dotaz = "SELECT id, nazev, popis, clanek FROM clanky WHERE id=" . $id . " LIMIT 1";
 8     $vysledek = mysql_query($dotaz); // vybereme z databáze, s podmínkou pokud se id z databáze rovná 
 9                                 // id v URL a omezíme na jeden článek
10     $data = mysql_fetch_array($vysledek); // naplníme pole článkem
11     if(!empty($data)) { // pokud je pole naplněno, vypíšeme text článku a další údaje o něm
12         echo "Název: " . $data['nazev'] . "<br>" .
13             "Popis: " . $data['popis'] . "<br>" .
14             "Článek: " . $data['clanek'];
15     }
16     else {
17         echo "Takový článek neexistuje!"; // pokud je pole prázdné, vypíšeme text o neexistenci článku
18     }
19 }
20 else {
21     echo "Musíte zadat ID článku!"; // pokud přijde někdo na tuto stránku bez ?id_clanku=...
22 }
23 ?>

Příklad je dostatečně okomentován, snad to dostatečně pochopíte.