Přeskočit na obsah

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

Z Wikiknih

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 | editovat zdroj]

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 | editovat zdroj]

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.

<?php
include "connect.php";

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

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