PHP prakticky/Výběr článku z databáze
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
editovatVytvoří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
editovatVe 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.