Kategorie | PHP

Redakční systém v PHP (3.díl)

Publikováno 02 Červenec 2007, Petr Láslo

Dobrý den, přináším 3.díl seriálu o tvorbě v PHP. V dnešním díle naplníme databázi zkušebními daty, vytvoříme dynamické menu a provedeme první SEO.

Naplnění databáze
V tomtou seriálu již předpokládám základní znalost PHP a MySQL. Tyto příkazy vložíme do databáze pomocí phpMyAdmin.

1. Vytvoření administrátorského účtu

INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
VALUES (’1′ , ‘Petr’, ‘Láslo’, ‘admin’, ‘laslo.petr(a)seznam.cz’, ‘e10adc3949ba59abbe56e057f20f883e’, ‘1′
);

2. Vytvoříme druhy oprávnění

INSERT INTO `opravneni` ( `id` , `nazev` )
VALUES (’1′, ‘Administrator’), (’2′, ‘Redaktor’), (’3′, ‘Uzivatel’);

3. Vytvoříme testovací rubriky

INSERT INTO `rubriky` ( `id` , `nazev` )
VALUES (
‘1′, ‘PHP’
), (

‘1′, ‘name’, ‘BlogerCMS’), (
‘2′, ’slogan’, ‘Redakcni system pro Vas web’
);

INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnota` )
VALUES (
‘3′, ‘keywords’, ‘BlogerCMS CMS redakcni system blog tvorba www php seo xhtml css i-extra.net merlin.php-pro.cz Petr Láslo’
), (
‘4′, ‘description’, ‘Redakcni system pro Vas web’
);

INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnota` )
VALUES (
‘5′, ‘zarazeni’, ‘CMS’
), (
‘6′, ‘autor’, ‘Petr Laslo’
);

INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnota` )
VALUES (
‘7′, ‘copyright’, ‘(c) Petr Laslo 2007′
), (
‘8′, ‘email’, ‘laslo.petr(a)i-extra.net’
);Y

INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnota` )
VALUES (
‘9′, ‘limit’, ‘20′
), (
‘10′, ‘datum’, ‘d.F Y G:i’
);

5. Rozšíření a naplnění datábáze o tabulku odkazy
V tomto kroku rozšířím databázi o tabulku odkazy. Do této tabulky budeme ukládat odkazy na naše oblíbené weby, které budeme zobrazovat v levém menu pod rubrikami.

CREATE TABLE `odkazy` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nazev` VARCHAR( 255 ) NOT NULL ,
`odkaz` VARCHAR( 255 ) NOT NULL
);

INSERT INTO `odkazy` ( `id` , `nazev` , `odkaz` )
VALUES (
‘1′, ‘Merlin Forum’, ‘http://merlin.php-pro.cz’
), (
‘2′, ‘Extra NET’, ‘http://i-extra.net’
);

6. Vložíme testovací článek

INSERT INTO `clanky` ( `id` , `nazev` , `id_rubriky` , `anotace` , `textl` , `shlednuto` , `schvaleno` )
VALUES (
‘1′, ‘Promene v PHP’, ‘1′, ‘Prace s promenymi v PHP’, ‘Prace s promenymi v PHP’, ‘0′, ‘1′
);

Teď máme naplněnou databázi daty. Pustíme se do dalšího úkolu dnešního dne. Vytvoříme si novou adresářovou strukturu. Vytvoříme složku “includes”(do této složky budeme ukládat všechny includované soubory) a přemístíme do ní soubor config.php. Do souboru heaf přidáme inclůd s config.php. Viz ukázka:

<?php

include ‘includes/config.php’;
?>

Nyní využijeme možností PHP 5 a naprogramujeme první třídu. Třída se bude jmenovat Menu a bude se starat o zobrazení Rubrik na hlavní stránce. Otevřeme si náš oblíbený editor a vytvoříme nový soubor. Ten pojmenujeme classMenu.php a uložíme do naší složky includes. Obsah souboru by měl vypadat takto:

<?php
class Menu{
public $dotaz;
public $vyber;

//konstruktor
function __construct($dotaz){
$this -> vyber = mysql_query($dotaz) or die (mysql_error());
}

function zobrazdb(){
return mysql_fetch_array($this -> vyber);
}
}
?>

Na prvním místě nastavíme proměnné dotaz a vyber na veřejné. Dále pokračuji s nastavením kostruktoru. Konstruktor provede dotaz. Další věc je metoda zobrazdb(). Tato metoda uloží výsledky z MySQL do asociativního pole. Tento seriál nemá za úkol vysvětlovat Objektově orientované programování v PHP. Pokud chcete rozšířit své obzory znalosti PHP určitě se podívejte na Interval.cz.

Teď opět upravíme soubor head.php. Přidáme další inclůd, tentokrát includujeme naši třídu.

<?php

include ‘includes/config.php’;
//objekty
include ‘includes/classMenu.php’;
?>

Soubor uložíme a zavřeme. Nyní musíme menu zobrazit na naší stránce. V našem editoru otevřeme soubor leve_menu.php a vložíme script pro zobrazení mena.


<ul class=”sidemenu”>
<?php
$vyber = new Menu(”SELECT * FROM rubriky”);
while($radek = $vyber -> zobrazdb()){
echo “<li><a href=\”index.html\”>”.$radek[nazev].”</a></li>”;
}
?>

</ul>

Tento kód přijde namísto původního statického menu. Teď Vám script popíši. Do proměnné $vyber uložíme instanci třídy Menu. Vytzvoříme cyklus while a necháme jeho pomocí vypsat menu. Do parametrů cyklu uložíme proměnnou, do ktere inicializujeme metodu $vyber -> zobrazdb(). A nakonec menu vypíšeme zápisem:

echo “<li><a href=\”index.html\”>”.$radek[nazev].”</a></li>”;

Tak první třídu máme hotovou. Ani to nebolelo, co? Nyní opět odbočím od programování v PHP a udělám pár věcí pro SEO.

SEO = Search Engine Optimalization(optimalizace pro vyhledávače)

Takže v prvním kroku si vytvoříme soubor .htaccess, do kterého budeme ukládat příkazy pro přepis URL.
1. Musíme se rozhodnout zda budeme používat adresu s WWW nebo bez WWW. Pro Google Page Rank jsou to totiž 2 rozdílné adresy a všechny zpětné adresy by se dělily
a) Zápis pro verzi bez WWW

RewriteEngine On
Options+FollowSymlinks
RewriteCond %{HTTP_HOST}^ www.web.cz
RewriteRule (.*)http://web.cz/$1 [R=301,QSA,L]

b) Zápis pro verzi bez WWW

RewriteEngine On
Options+FollowSymlinks
RewriteCond %{HTTP_HOST}^ web.cz
RewriteRule (.*)http://www.web.cz/$1 [R=301,QSA,L]

Zvolenou metodu uložíme do souboru .htaccess a uložíme. Název domény www.web,cz a web.cz můžete změnit na svou.

2. Z adresy http://web.cz/index.php uděláme adresu http://web.cz/

RewriteRule ^index\.php$ /$1 [R=301]

Pro dnešek by to bylo již vše. Těším se na Vás zase u dalšího dílu seriálu. Pokud budete mít nějaké problémy, pište prosím na naše fórum.

Linkuj.cz! | Vybrali.sme.sk | | MediaBlog.cz | Del.icio.us

Příspěvků v diskuzi: 24

  1. dzala Říká:

    prosim vas nemohli by ste mi pomoct nevim jak mam udelat to INSERT INTO kdyt to udelam v sql tam mi to hadze chybu nemuzu udelat tu databazu

  2. merlin Říká:

    musi te nejdrive vytvorti tabulky viz http://i-extra.net/php-tutorials/redakcni-system-v-php-1dil/

    SQL dotazy mam overene v phpMyadmin. Pomuzu kdyz mi nejlepe ofotite chybu co to hlasi ;-)

  3. dzala Říká:

    jj tabulky mam

  4. dzala Říká:

    a ja nevim kam mam hodit toto INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
    VALUES (?1? , ?Petr?, ?Láslo?, ?admin?, ?laslo.petr(a)seznam.cz?, ?e10adc3949ba59abbe56e057f20f883e?, ?1?
    ); v tem je problem :D

  5. merlin Říká:

    INSERT INTO uzivatele (’ id’ , ‘jmeno’ , ‘prijmeni’ , ‘nick’ , ‘email ‘,’heslo’, ‘id_opravneni ‘)
    VALUES (’1′ , ‘Petr’, ‘Láslo’, ‘admin’, ‘aslo.petr(a­)seznam.cz’, ‘e10adc3949ba­59abbe56e057f20f883e’, ‘1′
    );

    TO hodíš do php my admin ;-) tak jak si tam vložil tabulky

  6. dzala Říká:

    nebudes verit ale ja sem tak blbej ze nechapu:D kdyby to je na screenoch tak temu chapes ale takto asi ne:(

  7. dzala Říká:

    aha to php admin to je to SQL tam mam hodit toto: INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
    VALUES (?1? , ?Petr?, ?Láslo?, ?admin?, ?laslo.petr(a)seznam.cz?, ?e10adc3949ba59abbe56e057f20f883e?, ?1?
    ); ne ?

  8. merlin Říká:

    jo

  9. dzala Říká:

    tak ja sem spravil treba tabulku uzivatele kliknem nanu a hore dam SQL a tam napisem to INSERT INTO ATD ne?

  10. dzala Říká:

    SQL dopyt:

    INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
    VALUES (
    ?1?, ?Boris?, ?Maxian?, ?dzala?, ?dzala(
    at
    )roct.eu?, ?djsummer?, ?1?
    )

    MySQL hlási: Dokumentácia
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘roct.euâ??, â??djsummerâ??, â??1â??
    )’ at line 2

  11. dzala Říká:

    toto mi to dela

  12. kemo Říká:

    to merlin: opravdu obdivuji vasi trpelivost vysvetlovat tyhle veci, podivejte lidi, pokud ani netusite co je phpMyAdmin, nevite co je SQL atp. uz chcete vyvijet podle tutu nejaky CMS? Mrzi me jesli nekoho urazim, ale proc si prvne neprostudujete nejake clanky kde vysvetluji alespon zakladni synstaxe SQL, praci s PMA, a alespon praci s promennyma v php…

  13. Thunderwolf Říká:

    SQL-dotaz:

    INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
    VALUES (
    ?1?, ?Petr?, ?Láslo?, ?admin?, ?laslo.petr(
    a
    )seznam.cz?, ?e10adc3949ba59abbe56e057f20f883e?, ?1?
    )

    MySQL hlásí: Dokumentace
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’seznam.cz?, ?e10adc3949ba59abbe56e057f20f883e?, ?1?
    )’ at line 2

  14. Thunderwolf Říká:

    Sakra je takovej problém aby někdo kdo to umí opravil tu syntaxi vzoru, která je očividně špatně aby sme to my lamy mohli použít!

  15. merlin Říká:

    Sakra proč tam všichni rvete otaznbiky místo apostrofů? Dyť to tam mam uvedené správně.

  16. Thunderwolf Říká:

    Protože to má v tom návodu blbě. Otazníky se tam hodí když to dáváš přes Ctrl+C protože ty druhý uvozovky jsou nestandartní nebo co.

    INSERT INTO `uzivatele` ( `id` , `jmeno` , `prijmeni` , `nick` , `email` , `heslo` , `id_opravneni` )
    VALUES (’1′, ‘aaaaa’ , ‘aaaaa’ , ‘admin’ , ‘aaaaa(a)seznam.cz’ , ‘aaaaa’ , ‘1′);

  17. Thunderwolf Říká:

    Jde tp chce to jiný uvozovky, ted zas nechápu proč mi nejdou rubriky, asi si tu bichli o PHP nakonec stejně budu muset přečíst celou

    SQL-dotaz:

    INSERT INTO `rubriky` ( `id` , `nazev` )
    VALUES (
    ‘1′, ‘PHP’
    ), (
    ‘1′, ‘name’, ‘BlogerCMS’
    ), (
    ‘2′, ’slogan’, ‘Redakcni system pro Vas web’
    )

    MySQL hlásí: Dokumentace
    #1136 - Column count doesn’t match value count at row 2

  18. Petr Láslo Říká:

    INSERT INTO ‘nastaveni’ ( ‘id’ , ‘nazev’, ‘hodnot’ )
    VALUES (
    ?1?, ?PHP?
    ), (

    ?1?, ?name?, ?BlogerCMS?), (
    ?2?, ?slogan?, ?Redakcni system pro Vas web?
    );

    omlouvam se moje chyba nemaj to byt rubriky ale nastaveni :-[

  19. Thunderwolf Říká:

    Pořád ne-e, někde je chyba.

    SQL-dotaz:

    INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnot` )
    VALUES (
    ‘1′, ‘PHP’
    ), (
    ‘1′, ‘name’, ‘BlogerCMS’
    ), (
    ‘2′, ’slogan’, ‘Redakcni system pro Vas web’
    )

    MySQL hlásí: Dokumentace
    #1136 - Column count doesn’t match value count at row 1

  20. virus Říká:

    Proboha to da rozum ze je nekde chyba kdyz mas ID jako auto_increment lol

    INSERT INTO `nastaveni` ( `id` , `nazev` , `hodnot` )
    VALUES (”,’1′, ‘PHP’), (”, ‘name’, ‘BlogerCMS’), (”, ’slogan’, ‘Redakcni system pro Vas web’);
    nebo :
    INSERT INTO `nastaveni` ( `nazev` , `hodnot` )
    VALUES (’1′, ‘PHP’), (’name’, ‘BlogerCMS’), (’slogan’, ‘Redakcni system pro Vas web’);
    jak jednoduche ze :P

  21. merlin Říká:

    V phpadmin mi funguje bohužel zadání id cisla i pres auto_increment, zduraznuji kommentare resici to ze nejde myadmin uz resit nebudu. Cilem serialu neni naucit deolat s phpmyadmin.

  22. gledy Říká:

    Cafec, tohle je dobry TUT, jenze ma hodne chyb, coz me stve ! :( :( :( :(

  23. Ginza Říká:

    Kdyby jste byli líní jako já, tak si napíšete za 1 minutu skript, který Vám nahradí v textu ?, ? tímto ‘, ‘ .Co je na tom tak složitého?

  24. Sáva Arabadžiev Říká:

    A když tam bude otázka?

Zapoj se do diskuze

XHTML: Můžete používat tyto tagy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>







Anketa