Zobrazení článku z databáze

Nedávno jsem ukázal, jakým způsobem lze načíst soubor s obsahem do středu připravené stránky a teď ukážu, jak jednoché je načíst obsah z databáze. Také tyto dva skripty sloučím.

Vytvoření tabulky clanky.
Tato tabulka je velmi jednoduchá, pro ukázku to ale stačí. Kromě absolutně jasných sloupců jsem zde přidal i sloupec „hit“. Skript bude při každém zobrazení článku přičítat jedno zobrazení. Tabulku nejjednodušeji vytvoříte, použijete-li např. phpmyadmina. Nějaké základy práce s tímto nástrojem jsem popsal zde.

SQL tabulka clanky

CREATE TABLE `clanky` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nazev` VARCHAR( 255 ) NOT NULL ,
`popis` TEXT NOT NULL ,
`clanek` TEXT NOT NULL ,
`hit` INT NOT NULL
) ENGINE = MYISAM ;

Budeme pracovat s databází, tedy se k ní budeme muset nějak připojit. Vytvoříme si soubor, který nás k ní připojí. Vždy ho stačí „includovat“ tam, kde ho je potřeba.
Toto je obecný příklad, jak připojení k databázi může vypadat. Podle skutečnosti si vyplňte údaje SERVER, JMENO, HESLO a DATABAZE.

db_conn.php

<?php
 $spojeni = mysql_connect("SERVER","JMENO","HESLO" ) or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db_conn.php - ' . mysql_error());
  mysql_select_db("DATABAZE", $spojeni) or die ('Nepodarilo se vybrat databazi. Asi zadana databaze v db_conn.php - '. mysql_error());
  mysql_query("SET NAMES utf8");   // Výsledky a dotazy budeme klást v kódování UTF8.
?>

Celý kód je velmi jednoduchý.

index.php

...
...
...
<div id="obsah">
<?php
/*
* Tento kousek vždy includuje do "stredu" stránky volaný článek z databáze přes URL
* Příklad volání: index.php?read=1
* do středu se načte článek s id 1
*/
  if(isset($_GET['read'])){
  $id=(int)$_GET['read'];     // Do proměnné $id si dáme číslo volaného článku. Tuto proměnnou raději z bezpečnostních důvodů přetypujeme na INTEGER
  require_once "db_conn.php";     // Spojení na databázi
  $Vyber=mysql_query("SELECT `nazev`,`popis`,`clanek`,`hit` FROM `clanky` WHERE `id`='$id' LIMIT 1");
    $Vypis=mysql_fetch_array($Vyber); // Naplníme pole
      if($Vypis['nazev']){  // Dostali jsme nějaký výsledek, vypíšeme článek
        echo "
          <h2>".$Vypis['nazev']."</h2>
          <p>".$Vypis['popis']."</p>
          <p>".$Vypis['clanek']."</p>
          <p>Přečteno: ".$Vypis['hit']."x </p>
          ";
        // Protože jsme "otevřeli" tento článek, přičteme mu hit.
        mysql_query("UPDATE `clanky` SET `hit`=`hit`+1 WHERE `id`='$id' LIMIT 1");
      }else{
        echo "Článek s takovým ID se v databázi nenachází.";
      }
 }
 ?>
</div>
...
...
...

Výsledek můžeme zkombinovat i s načtením článku ze souboru, které jsem ukazoval nedávno. Výsledek bude vypadat následovně:

<?php
/*
* (c) peCan.cz 2007

* Tento kousek vždy includuje do "stredu" stránky volaný článek z databáze přes URL
* Příklad volání: index.php?read=1
* do středu se načte článek s id 1
===============================================================
* Tento kousek vždy includuje do "stredu" stránky volaný soubor přes URL
* Příklad volání: index.php?page=registrace
* do středu se načte soubor registrace.php
===============================================================
*/
if(isset($_GET['read'])){
  $id=(int)$_GET['read'];     // Do proměnné $id si dáme číslo volaného článku. Tuto proměnnou raději z bezpečnostních důvodů přetypujeme na INTEGER
  require_once "db_conn.php";     // Spojení na databázi
  $Vyber=mysql_query("SELECT `nazev`,`popis`,`clanek`,`hit` FROM `clanky` WHERE `id`='$id' LIMIT 1");
    $Vypis=mysql_fetch_array($Vyber); // Naplníme pole
      if($Vypis['nazev']){  // Dostali jsme nějaký výsledek, vypíšeme článek
        echo "
          <h2>".$Vypis['nazev']."</h2>
          <p>".$Vypis['popis']."</p>
          <p>".$Vypis['clanek']."</p>
          <p>Přečteno: ".$Vypis['hit']."x </p>
          ";
        // Protože jsme "otevřeli" tento článek, přičteme mu hit.
        mysql_query("UPDATE `clanky` SET `hit`=`hit`+1 WHERE `id`='$id' LIMIT 1");
      }else{
        echo "Článek s takovým ID se v databázi nenachází.";
      }
}elseif (isset($_GET['page'])){        // pokud byl odeslán ?page= ...
  $soubor=$_GET['page'];
  $soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor.".php";
  $soubor3=strtolower($soubor);
  if(file_exists($soubor2)){      //pokud soubor existuje, načteme ho do středu
     if(substr_count($soubor,"../")>0){ // pokud je v parametru alespoň 1x ../ neumožíme soubor načíst
       echo "<h3>Upozornění</h3>Nelze nahrát soubor v nadřazeném adresáři!";
     }elseif($soubor3=="index" or $soubor3=="/index" or $soubor3=="./index"){ // index načíst nepovolíme, vznikl by nekonečný cyklus - retezec jsem pred tim prevedl na male pismena
       echo "<h3>Upozornění</h3>Index nemůže načíst sám sebe!";
     }else{
       include $soubor2;
     }
  }else{                //pokud soubor neexistuje, zavoláme error404.php
     include "error404.php";
  }
}else{                  // Pokud nebyl paramentr page nebo read volaný, načteme uvod.php
  include "uvod.php";
}
 ?>

Nyní pro pořádek v kódu bychom si mohli udělat funkce, ale to možná někdy příště.

PS: Download celého skriptu i s minulým dílem – načtení článku z databáze v php.


<Starší | tento článek | Novější>

Napsáno: 16. 2. 2007, 23:47 | Přečteno: 22690x | Kategorie: PHP Skripty | Napsal: peCan.cz |
Stará vem si svetr, jdu do hospody, Jé miláčku ty mě vezmeš sebou? Ne, vypnu topení!
Petr Graubner | ICQ- 264912843, Jabber - pecan27@njs.netlab.cz | RSS | Šlape na miniRS | Styl CoolStyle | Zpracováno za: 0.137s | Počet SQL dotazů ve fóru: 1 | Admin