PHP prakticky/Výběr článku z databáze: Porovnání verzí

Smazaný obsah Přidaný obsah
m <source> → <syntaxhighlight>
Změna logiky (zabránění E_NOTICE), přejmenovány proměnné, doplněno SQL pro výchozí naplnění DB tabulky.
Řádek 8:
) ENGINE = MYISAM ;
</syntaxhighlight>
 
<syntaxhighlight lang="sql">
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.');
</syntaxhighlight>
 
== Připojení k DB ==
 
Vytvoříme si soubor, je jedno jak ho pojmenujete, já zvolím connect.php, budeme ho používat k připojení do databáze.
<syntaxhighlight lang="php">
<?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.");
Řádek 22 ⟶ 30:
?>
</syntaxhighlight>
== Výběr a zpracování databáze ==
Ve zkratce tento skript funguje tak, že příkazem ''include'' připojíme ke zpracování i dříve vytvořený soubor connect.php. Následně se z globálního pole ''$_GET'' načte identifikace hledaného článku, pole ''$_GET'' obsahuje všechny informace předávané v adresním řádku prohlížeče. Tedy tento soubor pro výběr článku s identifikačním číslem 1 by měl podobu: ''http://nejaka.adresa.cz/vyber_clanku.php?adresa=číslo_článku''. Dále se příkazem ''$id=(int)$adresa'' přetypuje a znovu uloží identifikační číslo článku do proměnné ''$id''.
 
== Výběr a zpracování údajů z databáze ==
Na řádku 5 zjišťujeme pomocí funkce ''isset()'', zda je nastavena proměnná $id (zde je příklad uvedený tak, že proměnná bude nastavena vždy), pokud bude, tak budeme pokračovat s vykonáváním souboru. Na řádku 6 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.
 
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.
Na dalším, sedmém, řádku zpracujeme pomocí funkce ''mysql_query()'' dotaz uložený v proměnné $dotaz a výsledek uloží do proměnné $sql, 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 proměnnou $ok. Dále testujeme, jestli na desátém řádku se v poli $ok položka s klíčem ''nazev'' nachází nějaká hodnota, pokud ano, tak na dalších řádcích vypíšeme text, pokud ne, tak napíšeme chybovou hlášku.
 
Na řádku 5 zjišťujemeZ pomocíglobálního funkcepole ''isset()$_GET'', zdanačteme jeidentifikaci hledaného nastavenačlánku proměnnáa příkazem ''$id = (zdeint)$id'' jeji příkladpřetypujeme uvedenýna tak,číslo. žeTo proměnná bude nastavena vždy), pokud bude,je taknutné budemejako pokračovatochrana spřed vykonávánímSQL souboruinjection. Na řádku 67 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, sedmémosmém, řádku zpracujemeprovedeme pomocí funkce ''mysql_query()'' dotaz uložený v proměnné $dotaz a výsledek uloží do proměnné $sqlvysledek, 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 proměnnounázvem $okdata. Dále testujeme, jestli na desátém11. řádku sepomocí vfunkce poli''empty()'' $oktestujeme, položkajestli sse klíčemv ''nazev''poli $data nachází nějaká hodnota,. pokudPokud ano, tak na dalších řádcích vypíšeme text článku, pokud ne, tak napíšeme chybovou hlášku.
<syntaxhighlight lang="php" line>
<?php
include "connect.php";
 
$adresa = $_GET['adresa'];
if(isset($id_GET['id_clanku'])) { // zpracuje, pokud je vybráno ID v URL adrese
$id=(int)$adresa; //Přetypování
$adresaid = $_GET['adresaid_clanku'];
if(isset($id)){ //zpracuje, pokud je vybráno ID v URL adrese
$id = (int) $id; // přetypování
$dotaz = "SELECT id, nazev, popis, clanek FROM clanky WHERE id=" . $id . " LIMIT 1";
$sqlvysledek = mysql_query($dotaz); // vybereme z databáze, s podmínkou pokud se id z databáze rovná
// id v URL a olimitujemeomezíme na jeden článek
$okdata = mysql_fetch_array($sqlvysledek); // naplníme pole článkem
if(!empty($ok['nazev']data)) { // pokud je pole naplňenonaplněno, vypíšeme text článku a dostanemedalší výsledekúdaje kterýo zpracujemeněm
echo "Název: " . $okdata['nazev'] . "<br>" .
"Popis: " . $okdata['popis'] . "<br>" .
"Článek: " . $okdata['clanek'];
}
else {
echo "Takový článek neexistuje!"; // pokud je pole není naplněnoprázdné, vypíšeme text o neexistenci článku
//článku
}
}
else {
else{
echo "PokusMusíte ozadat narušeníID bezpečnostičlánku!"; // pokud přijde někdo na tuto stránku bez ?clanekid_clanku= pokouší...
}
//se někdo zlobit
}
?>
</syntaxhighlight>